From ba4ac56fad7e6b415b6db747691b1b69f78e66ba Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 21 Apr 2023 16:33:39 +0000 Subject: [PATCH] chore(release): 1.1.2 [skip ci] ## [1.1.2](https://github.com/aacitelli/openapi-endpoint-trimmer/compare/v1.1.1...v1.1.2) (2023-04-21) ### Bug Fixes * `semantic-release` fix ([8421926](https://github.com/aacitelli/openapi-endpoint-trimmer/commit/8421926aaee6b896ff56f752d1b7ff8965139bed)) * bundle required `semantic-release` files ([4f0b133](https://github.com/aacitelli/openapi-endpoint-trimmer/commit/4f0b133e9f02126c22f939adfd7eacf7074dd0d2)) * install missing @types/js-yaml package ([d42774b](https://github.com/aacitelli/openapi-endpoint-trimmer/commit/d42774bb51b92f845021803d936650936f610e0c)) * nPM Script Fixes ([b467d39](https://github.com/aacitelli/openapi-endpoint-trimmer/commit/b467d3931c54abf77277a094ac172c0e60cc3228)) * package only the `dist` dir; drastically cuts bundle size ([185e722](https://github.com/aacitelli/openapi-endpoint-trimmer/commit/185e7222bfbf1c71f9b4981d3f5d52e9b318a437)) --- dist/index.js | 71 +++++++++++++++++++++++++++++++++++++++++++++++ package-lock.json | 4 +-- package.json | 2 +- 3 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 dist/index.js diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..daf1cda --- /dev/null +++ b/dist/index.js @@ -0,0 +1,71 @@ +#! /usr/bin/env node +import * as fs from "node:fs"; +import chalk from "chalk"; +import { program } from "commander"; +import { dump, load } from "js-yaml"; +import { request } from "undici"; +import { z } from "zod"; +console.log(chalk.blue(`${chalk.blue.bold("OpenAPI Endpoint Trimmer")} ${chalk.gray("v" + process.env.npm_package_version)}`)); +program + .name("openapi-endpoint-trimmer") + .description("OpenAPI Endpoint Trimmer.") + .option("-i, --input ", "Input File (Local or Absolute Path). (Required: Either this or --url).") + .option("-u, --url ", "Input URL") + .option("-o, --output ", "Output File") + .option("-v, --version", "Display the current version.") + .option("-p, --paths ", "A comma-separated, zero-spaces list of paths to keep. (Ex. /api/v1/users,/api/v1/organizations)") + .option("--help", "Display all flags, commands, and descriptions."); +program.parse(); +if (program.opts().help) { + program.help(); + process.exit(0); +} +if (program.opts().version) { + console.log(process.env.npm_package_version); + process.exit(0); +} +const options = z + .object({ + input: z.string().optional(), + url: z.string().url().optional(), + output: z.string(), + paths: z.string(), +}) + .refine((data) => { + if ((data.input && data.url) || (!data.input && !data.url)) { + throw new Error("Please specify either an input file or a URL (exactly one)."); + } + return true; +}) + .parse(program.opts()); +let data; +if (options.input) { + data = fs.readFileSync(options.input, "utf8"); +} +else if (options.url) { + // eslint-disable-next-line unicorn/no-await-expression-member + const response = await request(options.url); + if (response.statusCode !== 200) { + throw new Error(`Received a non-200 response when downloading from ${options.url}. Received ${response.statusCode}. Please double check your setup.`); + } + data = await response.body.text(); +} +else { + throw new Error(`Found neither an input URL or an input file!`); +} +const pathsToRetain = options.paths.split(","); +console.log(chalk.gray(`Trimming to just paths ${pathsToRetain.join(", ")}...`)); +let parsed = load(data); +const paths = {}; +for (const path of Object.keys(parsed.paths)) { + if (pathsToRetain.includes(path)) { + paths[path] = parsed.paths[path]; + } +} +parsed = { + ...parsed, + paths, +}; +const filePath = options.output ?? (options.input ?? options.url) + "-trimmed.yaml"; +fs.writeFileSync(filePath, dump(parsed)); +console.log(`Output To: ${filePath}`); diff --git a/package-lock.json b/package-lock.json index 156b29c..997e83a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "openapi-endpoint-trimmer", - "version": "1.1.1", + "version": "1.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "openapi-endpoint-trimmer", - "version": "1.1.1", + "version": "1.1.2", "license": "MIT", "dependencies": { "chalk": "^5.2.0", diff --git a/package.json b/package.json index d6b8e6e..1f32027 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openapi-endpoint-trimmer", - "version": "1.1.1", + "version": "1.1.2", "description": "", "type": "module", "files": [