@zuplo/cli 6.63.0 → 6.63.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,16 +14,14 @@ describe("Outdated CLI check", function () {
14
14
  mockAgent = new MockAgent();
15
15
  mockAgent.disableNetConnect();
16
16
  mockAgent
17
- .get("https://raw.githubusercontent.com")
17
+ .get("https://registry.npmjs.org")
18
18
  .intercept({
19
- path: "/zuplo/zuplo/main/packages/zuplo/package.json",
19
+ path: "/@zuplo/cli/latest",
20
20
  method: "GET",
21
21
  })
22
22
  .reply(200, {
23
- name: "zuplo",
24
- dependencies: {
25
- "@zuplo/cli": "1.109.0",
26
- },
23
+ name: "@zuplo/cli",
24
+ version: "1.109.0",
27
25
  });
28
26
  setGlobalDispatcher(mockAgent);
29
27
  });
@@ -1 +1 @@
1
- {"version":3,"file":"outdated.test.js","sourceRoot":"","sources":["../../src/__tests__/outdated.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { beforeEach, describe, it } from \"node:test\";\nimport { assert } from \"chai\";\nimport { MockAgent, setGlobalDispatcher } from \"undici\";\nimport { ZUPLO_VERSION_CHECK_FILE } from \"../common/constants.js\";\nimport { warnIfOutdatedVersion } from \"../common/outdated.js\";\nimport { ZUPLO_XDG_STATE_HOME } from \"../common/xdg/lib.js\";\n\nconst versionCheckPath = join(ZUPLO_XDG_STATE_HOME, ZUPLO_VERSION_CHECK_FILE);\n\nprocess.env.ZUPLO_OVERRIDE_CI_TO_TEST = \"true\";\n\ndescribe(\"Outdated CLI check\", function () {\n let mockAgent: MockAgent;\n\n beforeEach(() => {\n mockAgent = new MockAgent();\n mockAgent.disableNetConnect();\n mockAgent\n .get(\"https://raw.githubusercontent.com\")\n .intercept({\n path: \"/zuplo/zuplo/main/packages/zuplo/package.json\",\n method: \"GET\",\n })\n .reply(200, {\n name: \"zuplo\",\n dependencies: {\n \"@zuplo/cli\": \"1.109.0\",\n },\n });\n\n setGlobalDispatcher(mockAgent);\n });\n\n it(\"should warn on outdated version\", async function () {\n await rm(versionCheckPath, { recursive: true, force: true });\n\n const result = await warnIfOutdatedVersion(\"1.0.0\");\n assert.isTrue(result);\n assert.equal(mockAgent.pendingInterceptors.length, 0);\n });\n it(\"should not warn if current version\", async function () {\n const result = await warnIfOutdatedVersion(\"1.109.0\");\n assert.isFalse(result);\n });\n it(\"should not warn if still has cached result\", async function () {\n // Set the cache to still be valid, so even though the version is outdated\n // we dont return a warning since we dont fetch the latest version\n const state = { lastCheck: Date.now() - 1000, latestVersion: \"1.108.0\" };\n await writeFile(versionCheckPath, JSON.stringify(state), \"utf-8\");\n\n const result = await warnIfOutdatedVersion(\"1.108.0\");\n assert.isFalse(result);\n });\n it(\"should warn when time expired on outdated version\", async function () {\n const state = {\n lastCheck: Date.now() - 1000 * 60 * 60 * 24 - 100,\n latestVersion: \"1.0.0\",\n };\n await writeFile(versionCheckPath, JSON.stringify(state), \"utf-8\");\n\n const result = await warnIfOutdatedVersion(\"1.0.0\");\n assert.isTrue(result);\n assert.equal(mockAgent.pendingInterceptors.length, 0);\n });\n it(\"should handle invalid state\", async function () {\n await writeFile(versionCheckPath, \"hello\", \"utf-8\");\n\n const result = await warnIfOutdatedVersion(\"0.0.1\");\n assert.isTrue(result);\n assert.equal(mockAgent.pendingInterceptors.length, 0);\n });\n});\n"]}
1
+ {"version":3,"file":"outdated.test.js","sourceRoot":"","sources":["../../src/__tests__/outdated.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { beforeEach, describe, it } from \"node:test\";\nimport { assert } from \"chai\";\nimport { MockAgent, setGlobalDispatcher } from \"undici\";\nimport { ZUPLO_VERSION_CHECK_FILE } from \"../common/constants.js\";\nimport { warnIfOutdatedVersion } from \"../common/outdated.js\";\nimport { ZUPLO_XDG_STATE_HOME } from \"../common/xdg/lib.js\";\n\nconst versionCheckPath = join(ZUPLO_XDG_STATE_HOME, ZUPLO_VERSION_CHECK_FILE);\n\nprocess.env.ZUPLO_OVERRIDE_CI_TO_TEST = \"true\";\n\ndescribe(\"Outdated CLI check\", function () {\n let mockAgent: MockAgent;\n\n beforeEach(() => {\n mockAgent = new MockAgent();\n mockAgent.disableNetConnect();\n mockAgent\n .get(\"https://registry.npmjs.org\")\n .intercept({\n path: \"/@zuplo/cli/latest\",\n method: \"GET\",\n })\n .reply(200, {\n name: \"@zuplo/cli\",\n version: \"1.109.0\",\n });\n\n setGlobalDispatcher(mockAgent);\n });\n\n it(\"should warn on outdated version\", async function () {\n await rm(versionCheckPath, { recursive: true, force: true });\n\n const result = await warnIfOutdatedVersion(\"1.0.0\");\n assert.isTrue(result);\n assert.equal(mockAgent.pendingInterceptors.length, 0);\n });\n it(\"should not warn if current version\", async function () {\n const result = await warnIfOutdatedVersion(\"1.109.0\");\n assert.isFalse(result);\n });\n it(\"should not warn if still has cached result\", async function () {\n // Set the cache to still be valid, so even though the version is outdated\n // we dont return a warning since we dont fetch the latest version\n const state = { lastCheck: Date.now() - 1000, latestVersion: \"1.108.0\" };\n await writeFile(versionCheckPath, JSON.stringify(state), \"utf-8\");\n\n const result = await warnIfOutdatedVersion(\"1.108.0\");\n assert.isFalse(result);\n });\n it(\"should warn when time expired on outdated version\", async function () {\n const state = {\n lastCheck: Date.now() - 1000 * 60 * 60 * 24 - 100,\n latestVersion: \"1.0.0\",\n };\n await writeFile(versionCheckPath, JSON.stringify(state), \"utf-8\");\n\n const result = await warnIfOutdatedVersion(\"1.0.0\");\n assert.isTrue(result);\n assert.equal(mockAgent.pendingInterceptors.length, 0);\n });\n it(\"should handle invalid state\", async function () {\n await writeFile(versionCheckPath, \"hello\", \"utf-8\");\n\n const result = await warnIfOutdatedVersion(\"0.0.1\");\n assert.isTrue(result);\n assert.equal(mockAgent.pendingInterceptors.length, 0);\n });\n});\n"]}
package/dist/cli.js CHANGED
@@ -2,7 +2,6 @@ import * as dotenv from "dotenv";
2
2
  dotenv.config();
3
3
  import undici from "undici";
4
4
  import { readFileSync } from "node:fs";
5
- import os from "node:os";
6
5
  import { fileURLToPath } from "node:url";
7
6
  import { confirm } from "@inquirer/prompts";
8
7
  import * as Sentry from "@sentry/node";
@@ -30,7 +29,7 @@ import { shutdownAnalytics } from "./common/analytics/lib.js";
30
29
  import { MAX_WAIT_PENDING_TIME_MS, SENTRY_DSN } from "./common/constants.js";
31
30
  import { logger } from "./common/logger.js";
32
31
  import { warnIfOutdatedVersion, warnNodeVersion } from "./common/outdated.js";
33
- import { printCriticalFailureToConsoleAndExit, printWarningToConsole, } from "./common/output.js";
32
+ import { printCriticalFailureToConsoleAndExit, } from "./common/output.js";
34
33
  import { logLevel } from "./common/middleware/logging.js";
35
34
  if (process.env.ZUPLO_CLI_PROFILING) {
36
35
  await confirm({ message: "Continue executing CLI?", default: true });
@@ -49,9 +48,6 @@ if (gte(process.versions.node, MIN_NODE_VERSION)) {
49
48
  await printCriticalFailureToConsoleAndExit(`Unable to load @zuplo/cli. The package.json is missing or malformed.`);
50
49
  }
51
50
  await warnNodeVersion(cliVersion, RECOMMENDED_NODE_VERSION);
52
- if (os.platform() === "win32") {
53
- printWarningToConsole("Running the Zuplo CLI on Windows is currently in beta. Please report any issues to support@zuplo.com.");
54
- }
55
51
  undici.setGlobalDispatcher(undici.getGlobalDispatcher().compose((dispatch) => {
56
52
  return (opts, handler) => {
57
53
  opts.headers = {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import * as dotenv from \"dotenv\";\ndotenv.config();\n\n// Undici must be imported first to set the global dispatcher\n// If fetch is used before undici, the process will crash\nimport undici from \"undici\";\n\nimport { readFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport { fileURLToPath } from \"node:url\";\nimport { confirm } from \"@inquirer/prompts\";\nimport * as Sentry from \"@sentry/node\";\nimport { gte } from \"semver\";\nimport { hideBin } from \"yargs/helpers\";\nimport yargs from \"yargs/yargs\";\nimport build from \"./cmds/build.js\";\nimport compile from \"./cmds/compile.js\";\nimport deleteZup from \"./cmds/delete.js\";\nimport deploy from \"./cmds/deploy.js\";\nimport dev from \"./cmds/dev.js\";\nimport editor from \"./cmds/editor.js\";\nimport link from \"./cmds/link.js\";\nimport list from \"./cmds/list.js\";\nimport login from \"./cmds/login.js\";\nimport mtlsCertificates from \"./cmds/mtls-certificates/index.js\";\nimport oas from \"./cmds/open-api/index.js\";\nimport project from \"./cmds/project/index.js\";\nimport proxies from \"./cmds/proxies/index.js\";\nimport source from \"./cmds/source/index.js\";\nimport test from \"./cmds/test.js\";\nimport tunnel from \"./cmds/tunnel/index.js\";\nimport variable from \"./cmds/variable/index.js\";\nimport { shutdownAnalytics } from \"./common/analytics/lib.js\";\nimport { MAX_WAIT_PENDING_TIME_MS, SENTRY_DSN } from \"./common/constants.js\";\nimport { logger } from \"./common/logger.js\";\nimport { warnIfOutdatedVersion, warnNodeVersion } from \"./common/outdated.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printWarningToConsole,\n} from \"./common/output.js\";\nimport { logLevel } from \"./common/middleware/logging.js\";\n\n// This allows us to stop the CLI from executing so we can connect the profiler\n\n// biome-ignore lint/style/noProcessEnv: Migrated from ESLint\nif (process.env.ZUPLO_CLI_PROFILING) {\n await confirm({ message: \"Continue executing CLI?\", default: true });\n}\n\n// Note: We cannot set this to be higher than 18.0.0 because of the way\n// our documentation works -- we tell them to use npx @zuplo/cli@latest (even in CI/CD jobs)\n// If we set this to be higher than 18.0.0, then we will break them.\n// Instead we set the value in package.json to be engine.node >= 20.0.0, so it will warn\nconst MIN_NODE_VERSION = \"18.0.0\";\nconst RECOMMENDED_NODE_VERSION = \"20.0.0\";\n\nif (gte(process.versions.node, MIN_NODE_VERSION)) {\n let cliVersion: string;\n try {\n const packageJson = JSON.parse(\n readFileSync(\n fileURLToPath(new URL(\"../package.json\", import.meta.url)),\n \"utf-8\"\n )\n );\n cliVersion = packageJson.version;\n } catch (e) {\n cliVersion = \"0.0.0\";\n logger.error(e);\n await printCriticalFailureToConsoleAndExit(\n `Unable to load @zuplo/cli. The package.json is missing or malformed.`\n );\n }\n\n await warnNodeVersion(cliVersion, RECOMMENDED_NODE_VERSION);\n\n if (os.platform() === \"win32\") {\n printWarningToConsole(\n \"Running the Zuplo CLI on Windows is currently in beta. Please report any issues to support@zuplo.com.\"\n );\n }\n\n undici.setGlobalDispatcher(\n undici.getGlobalDispatcher().compose((dispatch) => {\n return (opts, handler) => {\n opts.headers = {\n ...opts.headers,\n \"user-agent\": `ZuploCLI/${cliVersion}`,\n\n // biome-ignore lint/style/noProcessEnv: Migrated from ESLint\n ...(process.env.ZUPLO_CANARY ? { \"zp-canary\": \"true\" } : {}),\n };\n return dispatch(opts, handler);\n };\n })\n );\n\n Sentry.init({\n dsn: SENTRY_DSN,\n release: cliVersion,\n });\n\n const cli = yargs(hideBin(process.argv))\n // This means that all env vars will have to be prefixed with ZUPLO_\n .env(\"ZUPLO\")\n .option(\"prompt\", {\n type: \"boolean\",\n describe: \"Bypass confirmation prompts\",\n default: true,\n hidden: true,\n })\n .option(\"verbose\", {\n alias: \"v\",\n type: \"count\",\n describe: \"Increase verbosity level (-v, -vv, -vvv)\",\n default: 0,\n hidden: true,\n })\n .middleware(logLevel)\n .command(compile)\n .command(deleteZup) // delete is a reserved keyword in JavaScript, so we call this function deleteZup\n .command(deploy)\n .command(dev)\n .command(editor)\n .command(list)\n .command(link)\n .command(login)\n .command(test)\n .command(oas)\n .command(mtlsCertificates)\n .command(project)\n .command(source)\n .command(tunnel)\n .command(variable)\n .command(build)\n .command(proxies)\n .command({\n command: \"hello\",\n handler: async () => {\n await fetch(\"https://393b4699ced44cc2ae87e4ad86184a29.api.mockbin.io/\");\n },\n })\n .demandCommand()\n .strictCommands()\n .version(cliVersion)\n .fail(false)\n .help();\n\n try {\n await cli.argv;\n\n // Don't block\n void warnIfOutdatedVersion(cliVersion);\n\n void Sentry.close(MAX_WAIT_PENDING_TIME_MS).then(() => {\n process.exit(0);\n });\n } catch (err) {\n if (err instanceof Error) {\n Sentry.captureException(err);\n }\n await printCriticalFailureToConsoleAndExit(err.message ?? err);\n cli.showHelp();\n } finally {\n await shutdownAnalytics();\n }\n} else {\n await printCriticalFailureToConsoleAndExit(\n `The Zuplo CLI requires at least node.js v${MIN_NODE_VERSION}. You are using v${process.versions.node}. Please update your version of node.js.\n\n Consider using a Node.js version manager such as https://github.com/nvm-sh/nvm.`\n );\n}\n"]}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["import * as dotenv from \"dotenv\";\ndotenv.config();\n\n// Undici must be imported first to set the global dispatcher\n// If fetch is used before undici, the process will crash\nimport undici from \"undici\";\n\nimport { readFileSync } from \"node:fs\";\nimport os from \"node:os\";\nimport { fileURLToPath } from \"node:url\";\nimport { confirm } from \"@inquirer/prompts\";\nimport * as Sentry from \"@sentry/node\";\nimport { gte } from \"semver\";\nimport { hideBin } from \"yargs/helpers\";\nimport yargs from \"yargs/yargs\";\nimport build from \"./cmds/build.js\";\nimport compile from \"./cmds/compile.js\";\nimport deleteZup from \"./cmds/delete.js\";\nimport deploy from \"./cmds/deploy.js\";\nimport dev from \"./cmds/dev.js\";\nimport editor from \"./cmds/editor.js\";\nimport link from \"./cmds/link.js\";\nimport list from \"./cmds/list.js\";\nimport login from \"./cmds/login.js\";\nimport mtlsCertificates from \"./cmds/mtls-certificates/index.js\";\nimport oas from \"./cmds/open-api/index.js\";\nimport project from \"./cmds/project/index.js\";\nimport proxies from \"./cmds/proxies/index.js\";\nimport source from \"./cmds/source/index.js\";\nimport test from \"./cmds/test.js\";\nimport tunnel from \"./cmds/tunnel/index.js\";\nimport variable from \"./cmds/variable/index.js\";\nimport { shutdownAnalytics } from \"./common/analytics/lib.js\";\nimport { MAX_WAIT_PENDING_TIME_MS, SENTRY_DSN } from \"./common/constants.js\";\nimport { logger } from \"./common/logger.js\";\nimport { warnIfOutdatedVersion, warnNodeVersion } from \"./common/outdated.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printWarningToConsole,\n} from \"./common/output.js\";\nimport { logLevel } from \"./common/middleware/logging.js\";\n\n// This allows us to stop the CLI from executing so we can connect the profiler\n\n// biome-ignore lint/style/noProcessEnv: Migrated from ESLint\nif (process.env.ZUPLO_CLI_PROFILING) {\n await confirm({ message: \"Continue executing CLI?\", default: true });\n}\n\n// Note: We cannot set this to be higher than 18.0.0 because of the way\n// our documentation works -- we tell them to use npx @zuplo/cli@latest (even in CI/CD jobs)\n// If we set this to be higher than 18.0.0, then we will break them.\n// Instead we set the value in package.json to be engine.node >= 20.0.0, so it will warn\nconst MIN_NODE_VERSION = \"18.0.0\";\nconst RECOMMENDED_NODE_VERSION = \"20.0.0\";\n\nif (gte(process.versions.node, MIN_NODE_VERSION)) {\n let cliVersion: string;\n try {\n const packageJson = JSON.parse(\n readFileSync(\n fileURLToPath(new URL(\"../package.json\", import.meta.url)),\n \"utf-8\"\n )\n );\n cliVersion = packageJson.version;\n } catch (e) {\n cliVersion = \"0.0.0\";\n logger.error(e);\n await printCriticalFailureToConsoleAndExit(\n `Unable to load @zuplo/cli. The package.json is missing or malformed.`\n );\n }\n\n await warnNodeVersion(cliVersion, RECOMMENDED_NODE_VERSION);\n\n undici.setGlobalDispatcher(\n undici.getGlobalDispatcher().compose((dispatch) => {\n return (opts, handler) => {\n opts.headers = {\n ...opts.headers,\n \"user-agent\": `ZuploCLI/${cliVersion}`,\n\n // biome-ignore lint/style/noProcessEnv: Migrated from ESLint\n ...(process.env.ZUPLO_CANARY ? { \"zp-canary\": \"true\" } : {}),\n };\n return dispatch(opts, handler);\n };\n })\n );\n\n Sentry.init({\n dsn: SENTRY_DSN,\n release: cliVersion,\n });\n\n const cli = yargs(hideBin(process.argv))\n // This means that all env vars will have to be prefixed with ZUPLO_\n .env(\"ZUPLO\")\n .option(\"prompt\", {\n type: \"boolean\",\n describe: \"Bypass confirmation prompts\",\n default: true,\n hidden: true,\n })\n .option(\"verbose\", {\n alias: \"v\",\n type: \"count\",\n describe: \"Increase verbosity level (-v, -vv, -vvv)\",\n default: 0,\n hidden: true,\n })\n .middleware(logLevel)\n .command(compile)\n .command(deleteZup) // delete is a reserved keyword in JavaScript, so we call this function deleteZup\n .command(deploy)\n .command(dev)\n .command(editor)\n .command(list)\n .command(link)\n .command(login)\n .command(test)\n .command(oas)\n .command(mtlsCertificates)\n .command(project)\n .command(source)\n .command(tunnel)\n .command(variable)\n .command(build)\n .command(proxies)\n .command({\n command: \"hello\",\n handler: async () => {\n await fetch(\"https://393b4699ced44cc2ae87e4ad86184a29.api.mockbin.io/\");\n },\n })\n .demandCommand()\n .strictCommands()\n .version(cliVersion)\n .fail(false)\n .help();\n\n try {\n await cli.argv;\n\n // Don't block\n void warnIfOutdatedVersion(cliVersion);\n\n void Sentry.close(MAX_WAIT_PENDING_TIME_MS).then(() => {\n process.exit(0);\n });\n } catch (err) {\n if (err instanceof Error) {\n Sentry.captureException(err);\n }\n await printCriticalFailureToConsoleAndExit(err.message ?? err);\n cli.showHelp();\n } finally {\n await shutdownAnalytics();\n }\n} else {\n await printCriticalFailureToConsoleAndExit(\n `The Zuplo CLI requires at least node.js v${MIN_NODE_VERSION}. You are using v${process.versions.node}. Please update your version of node.js.\n\n Consider using a Node.js version manager such as https://github.com/nvm-sh/nvm.`\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/cmds/open-api/convert.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAOV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBAiEf,OAAO;;AApE/B,wBAwEE"}
1
+ {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/cmds/open-api/convert.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAOV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBA6Df,OAAO;;AAhE/B,wBAoEE"}
@@ -4,19 +4,15 @@ import { captureEvent } from "../../common/analytics/lib.js";
4
4
  import { convertOpenAPI } from "../../open-api/convert/handler.js";
5
5
  export default {
6
6
  desc: "Convert OpenAPI files between JSON and YAML formats",
7
- command: "convert [input]",
7
+ command: "convert",
8
8
  builder: (yargs) => {
9
9
  return yargs
10
- .positional("input", {
11
- type: "string",
12
- describe: "The input OpenAPI file (JSON or YAML)",
13
- normalize: true,
14
- })
15
10
  .option("input", {
16
11
  type: "string",
17
12
  alias: "i",
18
13
  describe: "The input OpenAPI file (JSON or YAML)",
19
14
  normalize: true,
15
+ demandOption: true,
20
16
  })
21
17
  .option("format", {
22
18
  type: "string",
@@ -1 +1 @@
1
- {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/cmds/open-api/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAa,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAE9E,eAAe;IACb,IAAI,EAAE,qDAAqD;IAC3D,OAAO,EAAE,iBAAiB;IAC1B,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,UAAU,CAAC,OAAO,EAAE;YACnB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,uCAAuC;YACjD,SAAS,EAAE,IAAI;SAChB,CAAC;aACD,MAAM,CAAC,OAAO,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,uCAAuC;YACjD,SAAS,EAAE,IAAI;SAChB,CAAC;aACD,MAAM,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;SAC1B,CAAC;aACD,MAAM,CAAC,MAAM,EAAE;YACd,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,wBAAwB;YAClC,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;SAC9B,CAAC;aACD,MAAM,CAAC,MAAM,EAAE;YACd,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,wBAAwB;YAClC,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;SAC9B,CAAC;aACD,MAAM,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EACN,+DAA+D;YACjE,SAAS,EAAE,IAAI;SAChB,CAAC;aACD,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YACd,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;YAGD,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,iCAAiC,GAAG,iCAAiC,CACtE,CAAC;YACJ,CAAC;YAGD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAe,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACzD,CAAC;YAGD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACzD,MAAM,cAAc,CAAC,IAAiB,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC","sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Argv } from \"yargs\";\nimport { captureEvent } from \"../../common/analytics/lib.js\";\nimport { Arguments, convertOpenAPI } from \"../../open-api/convert/handler.js\";\n\nexport default {\n desc: \"Convert OpenAPI files between JSON and YAML formats\",\n command: \"convert [input]\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .positional(\"input\", {\n type: \"string\",\n describe: \"The input OpenAPI file (JSON or YAML)\",\n normalize: true,\n })\n .option(\"input\", {\n type: \"string\",\n alias: \"i\",\n describe: \"The input OpenAPI file (JSON or YAML)\",\n normalize: true,\n })\n .option(\"format\", {\n type: \"string\",\n alias: \"f\",\n describe: \"Output format\",\n choices: [\"json\", \"yaml\"],\n })\n .option(\"json\", {\n type: \"boolean\",\n describe: \"Convert to JSON format\",\n conflicts: [\"yaml\", \"format\"],\n })\n .option(\"yaml\", {\n type: \"boolean\",\n describe: \"Convert to YAML format\",\n conflicts: [\"json\", \"format\"],\n })\n .option(\"output\", {\n type: \"string\",\n alias: \"o\",\n describe:\n \"Output file path (if not specified, generates based on input)\",\n normalize: true,\n })\n .check((argv) => {\n if (!argv.input) {\n throw new Error(\"Input file is required\");\n }\n\n // Validate file extension\n const validExtensions = [\".json\", \".yaml\", \".yml\"];\n const ext = path.extname(argv.input as string).toLowerCase();\n if (!validExtensions.includes(ext)) {\n throw new Error(\n `Invalid input file extension: ${ext}. Must be .json, .yaml, or .yml`\n );\n }\n\n // Validate input file exists\n if (!fs.existsSync(argv.input as string)) {\n throw new Error(`Input file not found: ${argv.input}`);\n }\n\n // Validate output format is specified\n if (!argv.format && !argv.json && !argv.yaml) {\n throw new Error(\n \"Output format must be specified using --format, --json, or --yaml\"\n );\n }\n\n return true;\n });\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo oas convert\" });\n await convertOpenAPI(argv as Arguments);\n },\n};\n"]}
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/cmds/open-api/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAa,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAE9E,eAAe;IACb,IAAI,EAAE,qDAAqD;IAC3D,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,MAAM,CAAC,OAAO,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,uCAAuC;YACjD,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,IAAI;SACnB,CAAC;aACD,MAAM,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;SAC1B,CAAC;aACD,MAAM,CAAC,MAAM,EAAE;YACd,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,wBAAwB;YAClC,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;SAC9B,CAAC;aACD,MAAM,CAAC,MAAM,EAAE;YACd,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,wBAAwB;YAClC,SAAS,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;SAC9B,CAAC;aACD,MAAM,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EACN,+DAA+D;YACjE,SAAS,EAAE,IAAI;SAChB,CAAC;aACD,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YACd,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,CAAC;YAGD,MAAM,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7D,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CACb,iCAAiC,GAAG,iCAAiC,CACtE,CAAC;YACJ,CAAC;YAGD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAe,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACzD,CAAC;YAGD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CACb,mEAAmE,CACpE,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACzD,MAAM,cAAc,CAAC,IAAiB,CAAC,CAAC;IAC1C,CAAC;CACF,CAAC","sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Argv } from \"yargs\";\nimport { captureEvent } from \"../../common/analytics/lib.js\";\nimport { Arguments, convertOpenAPI } from \"../../open-api/convert/handler.js\";\n\nexport default {\n desc: \"Convert OpenAPI files between JSON and YAML formats\",\n command: \"convert\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .option(\"input\", {\n type: \"string\",\n alias: \"i\",\n describe: \"The input OpenAPI file (JSON or YAML)\",\n normalize: true,\n demandOption: true,\n })\n .option(\"format\", {\n type: \"string\",\n alias: \"f\",\n describe: \"Output format\",\n choices: [\"json\", \"yaml\"],\n })\n .option(\"json\", {\n type: \"boolean\",\n describe: \"Convert to JSON format\",\n conflicts: [\"yaml\", \"format\"],\n })\n .option(\"yaml\", {\n type: \"boolean\",\n describe: \"Convert to YAML format\",\n conflicts: [\"json\", \"format\"],\n })\n .option(\"output\", {\n type: \"string\",\n alias: \"o\",\n describe:\n \"Output file path (if not specified, generates based on input)\",\n normalize: true,\n })\n .check((argv) => {\n if (!argv.input) {\n throw new Error(\"Input file is required\");\n }\n\n // Validate file extension\n const validExtensions = [\".json\", \".yaml\", \".yml\"];\n const ext = path.extname(argv.input as string).toLowerCase();\n if (!validExtensions.includes(ext)) {\n throw new Error(\n `Invalid input file extension: ${ext}. Must be .json, .yaml, or .yml`\n );\n }\n\n // Validate input file exists\n if (!fs.existsSync(argv.input as string)) {\n throw new Error(`Input file not found: ${argv.input}`);\n }\n\n // Validate output format is specified\n if (!argv.format && !argv.json && !argv.yaml) {\n throw new Error(\n \"Output format must be specified using --format, --json, or --yaml\"\n );\n }\n\n return true;\n });\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo oas convert\" });\n await convertOpenAPI(argv as Arguments);\n },\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/cmds/open-api/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAOV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBA8Cf,OAAO;;AAjD/B,wBAqDE"}
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/cmds/open-api/merge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAOV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBAwCf,OAAO;;AA3C/B,wBA+CE"}
@@ -2,25 +2,19 @@ import { captureEvent } from "../../common/analytics/lib.js";
2
2
  import { importOpenApi } from "../../open-api/merge/handler.js";
3
3
  export default {
4
4
  desc: "Merge an OpenAPI file into your Zuplo project",
5
- command: "merge [source] [destination]",
5
+ command: "merge",
6
6
  builder: (yargs) => {
7
7
  return yargs
8
- .positional("source", {
9
- type: "string",
10
- describe: "The OpenAPI file to merge (file path or URL)",
11
- })
12
- .positional("destination", {
13
- type: "string",
14
- describe: "The destination file name (must end with .oas.json)",
15
- })
16
8
  .option("source", {
17
9
  type: "string",
18
10
  alias: "s",
11
+ demandOption: true,
19
12
  describe: "The OpenAPI file to merge (file path or URL)",
20
13
  })
21
14
  .option("destination", {
22
15
  type: "string",
23
16
  alias: "d",
17
+ default: "./config/routes.oas.json",
24
18
  describe: "The destination file name (must end with .oas.json)",
25
19
  })
26
20
  .option("merge-mode", {
@@ -1 +1 @@
1
- {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/cmds/open-api/merge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAa,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAE3E,eAAe;IACb,IAAI,EAAE,+CAA+C;IACrD,OAAO,EAAE,8BAA8B;IACvC,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,UAAU,CAAC,QAAQ,EAAE;YACpB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,8CAA8C;SACzD,CAAC;aACD,UAAU,CAAC,aAAa,EAAE;YACzB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,qDAAqD;SAChE,CAAC;aACD,MAAM,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,8CAA8C;SACzD,CAAC;aACD,MAAM,CAAC,aAAa,EAAE;YACrB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,qDAAqD;SAChE,CAAC;aACD,MAAM,CAAC,YAAY,EAAE;YACpB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,qDAAqD;YAC/D,OAAO,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;YACxC,OAAO,EAAE,aAAa;SACvB,CAAC;aACD,MAAM,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,wCAAwC;YAClD,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,IAAI;SACb,CAAC;aACD,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACvD,MAAM,aAAa,CAAC,IAAiB,CAAC,CAAC;IACzC,CAAC;CACF,CAAC","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../../common/analytics/lib.js\";\nimport { Arguments, importOpenApi } from \"../../open-api/merge/handler.js\";\n\nexport default {\n desc: \"Merge an OpenAPI file into your Zuplo project\",\n command: \"merge [source] [destination]\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .positional(\"source\", {\n type: \"string\",\n describe: \"The OpenAPI file to merge (file path or URL)\",\n })\n .positional(\"destination\", {\n type: \"string\",\n describe: \"The destination file name (must end with .oas.json)\",\n })\n .option(\"source\", {\n type: \"string\",\n alias: \"s\",\n describe: \"The OpenAPI file to merge (file path or URL)\",\n })\n .option(\"destination\", {\n type: \"string\",\n alias: \"d\",\n describe: \"The destination file name (must end with .oas.json)\",\n })\n .option(\"merge-mode\", {\n type: \"string\",\n alias: \"m\",\n describe: \"The merge mode to use when merging the OpenAPI file\",\n choices: [\"path-method\", \"operation-id\"],\n default: \"path-method\",\n })\n .option(\"prompt\", {\n type: \"boolean\",\n describe: \"Prompt for confirmation before merging\",\n default: false,\n hidden: true,\n })\n .check((argv) => {\n if (!argv.source) {\n throw new Error(\"Source is required\");\n }\n if (!argv.destination) {\n throw new Error(\"Destination is required\");\n }\n if (!argv.destination.endsWith(\".oas.json\")) {\n throw new Error(\"Destination file name must end with '.oas.json'\");\n }\n return true;\n });\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo oas merge\" });\n await importOpenApi(argv as Arguments);\n },\n};\n"]}
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/cmds/open-api/merge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAa,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAE3E,eAAe;IACb,IAAI,EAAE,+CAA+C;IACrD,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,MAAM,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,8CAA8C;SACzD,CAAC;aACD,MAAM,CAAC,aAAa,EAAE;YACrB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,0BAA0B;YACnC,QAAQ,EAAE,qDAAqD;SAChE,CAAC;aACD,MAAM,CAAC,YAAY,EAAE;YACpB,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,qDAAqD;YAC/D,OAAO,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;YACxC,OAAO,EAAE,aAAa;SACvB,CAAC;aACD,MAAM,CAAC,QAAQ,EAAE;YAChB,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,wCAAwC;YAClD,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,IAAI;SACb,CAAC;aACD,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;YACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACrE,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,IAAa,EAAE,EAAE;QAC/B,MAAM,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACvD,MAAM,aAAa,CAAC,IAAiB,CAAC,CAAC;IACzC,CAAC;CACF,CAAC","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../../common/analytics/lib.js\";\nimport { Arguments, importOpenApi } from \"../../open-api/merge/handler.js\";\n\nexport default {\n desc: \"Merge an OpenAPI file into your Zuplo project\",\n command: \"merge\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .option(\"source\", {\n type: \"string\",\n alias: \"s\",\n demandOption: true,\n describe: \"The OpenAPI file to merge (file path or URL)\",\n })\n .option(\"destination\", {\n type: \"string\",\n alias: \"d\",\n default: \"./config/routes.oas.json\",\n describe: \"The destination file name (must end with .oas.json)\",\n })\n .option(\"merge-mode\", {\n type: \"string\",\n alias: \"m\",\n describe: \"The merge mode to use when merging the OpenAPI file\",\n choices: [\"path-method\", \"operation-id\"],\n default: \"path-method\",\n })\n .option(\"prompt\", {\n type: \"boolean\",\n describe: \"Prompt for confirmation before merging\",\n default: false,\n hidden: true,\n })\n .check((argv) => {\n if (!argv.source) {\n throw new Error(\"Source is required\");\n }\n if (!argv.destination) {\n throw new Error(\"Destination is required\");\n }\n if (!argv.destination.endsWith(\".oas.json\")) {\n throw new Error(\"Destination file name must end with '.oas.json'\");\n }\n return true;\n });\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo oas merge\" });\n await importOpenApi(argv as Arguments);\n },\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/cmds/open-api/overlay.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAOV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBAsFf,OAAO;;AAzF/B,wBA6FE"}
1
+ {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../../../src/cmds/open-api/overlay.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;;;;qBAOV,IAAI,KAAG,IAAI,CAAC,OAAO,CAAC;oBA0Ef,OAAO;;AA7E/B,wBAiFE"}
@@ -4,41 +4,29 @@ import { captureEvent } from "../../common/analytics/lib.js";
4
4
  import { applyOverlay } from "../../open-api/overlay/handler.js";
5
5
  export default {
6
6
  desc: "Apply an OpenAPI Overlay to an OpenAPI document",
7
- command: "overlay [input] [overlay] [output]",
7
+ command: "overlay",
8
8
  builder: (yargs) => {
9
9
  return yargs
10
- .positional("input", {
11
- type: "string",
12
- describe: "The input OpenAPI file",
13
- normalize: true,
14
- })
15
- .positional("overlay", {
16
- type: "string",
17
- describe: "The overlay file",
18
- normalize: true,
19
- })
20
- .positional("output", {
21
- type: "string",
22
- describe: "The output OpenAPI file path",
23
- normalize: true,
24
- })
25
10
  .option("input", {
26
11
  type: "string",
27
12
  alias: "i",
28
13
  describe: "The input OpenAPI file",
29
14
  normalize: true,
15
+ demandOption: true,
30
16
  })
31
17
  .option("overlay", {
32
18
  type: "string",
33
19
  alias: "v",
34
20
  describe: "The overlay file",
35
21
  normalize: true,
22
+ demandOption: true,
36
23
  })
37
24
  .option("output", {
38
25
  type: "string",
39
26
  alias: "o",
40
27
  describe: "The output OpenAPI file path",
41
28
  normalize: true,
29
+ demandOption: true,
42
30
  })
43
31
  .option("format", {
44
32
  type: "string",
@@ -1 +1 @@
1
- {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../src/cmds/open-api/overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Argv } from \"yargs\";\nimport { captureEvent } from \"../../common/analytics/lib.js\";\nimport { Arguments, applyOverlay } from \"../../open-api/overlay/handler.js\";\n\nexport default {\n desc: \"Apply an OpenAPI Overlay to an OpenAPI document\",\n command: \"overlay [input] [overlay] [output]\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .positional(\"input\", {\n type: \"string\",\n describe: \"The input OpenAPI file\",\n normalize: true,\n })\n .positional(\"overlay\", {\n type: \"string\",\n describe: \"The overlay file\",\n normalize: true,\n })\n .positional(\"output\", {\n type: \"string\",\n describe: \"The output OpenAPI file path\",\n normalize: true,\n })\n .option(\"input\", {\n type: \"string\",\n alias: \"i\",\n describe: \"The input OpenAPI file\",\n normalize: true,\n })\n .option(\"overlay\", {\n type: \"string\",\n alias: \"v\",\n describe: \"The overlay file\",\n normalize: true,\n })\n .option(\"output\", {\n type: \"string\",\n alias: \"o\",\n describe: \"The output OpenAPI file path\",\n normalize: true,\n })\n .option(\"format\", {\n type: \"string\",\n alias: \"f\",\n describe: \"Output format\",\n choices: [\"json\", \"yaml\"],\n })\n .option(\"json\", {\n type: \"boolean\",\n describe: \"Output in JSON format\",\n conflicts: [\"yaml\", \"format\"],\n })\n .option(\"yaml\", {\n type: \"boolean\",\n describe: \"Output in YAML format\",\n conflicts: [\"json\", \"format\"],\n })\n .check((argv) => {\n if (!argv.input || !argv.overlay || !argv.output) {\n throw new Error(\n \"All three arguments are required: input, overlay, and output\"\n );\n }\n\n // Validate output file has an extension for format detection\n const outputExt = path.extname(argv.output as string).toLowerCase();\n const validExtensions = [\".json\", \".yaml\", \".yml\"];\n\n // Only require extension if format not explicitly specified\n if (\n !argv.format &&\n !argv.json &&\n !argv.yaml &&\n !validExtensions.includes(outputExt)\n ) {\n throw new Error(\n `Output file must have a .json, .yaml, or .yml extension, or specify output format with --format, --json, or --yaml`\n );\n }\n\n // Validate input files exist\n if (!fs.existsSync(argv.input as string)) {\n throw new Error(`Input file not found: ${argv.input}`);\n }\n\n if (!fs.existsSync(argv.overlay as string)) {\n throw new Error(`Overlay file not found: ${argv.overlay}`);\n }\n\n return true;\n });\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo oas overlay\" });\n await applyOverlay(argv as Arguments);\n },\n};\n"]}
1
+ {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../../../src/cmds/open-api/overlay.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { Argv } from \"yargs\";\nimport { captureEvent } from \"../../common/analytics/lib.js\";\nimport { Arguments, applyOverlay } from \"../../open-api/overlay/handler.js\";\n\nexport default {\n desc: \"Apply an OpenAPI Overlay to an OpenAPI document\",\n command: \"overlay\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .option(\"input\", {\n type: \"string\",\n alias: \"i\",\n describe: \"The input OpenAPI file\",\n normalize: true,\n demandOption: true,\n })\n .option(\"overlay\", {\n type: \"string\",\n alias: \"v\",\n describe: \"The overlay file\",\n normalize: true,\n demandOption: true,\n })\n .option(\"output\", {\n type: \"string\",\n alias: \"o\",\n describe: \"The output OpenAPI file path\",\n normalize: true,\n demandOption: true,\n })\n .option(\"format\", {\n type: \"string\",\n alias: \"f\",\n describe: \"Output format\",\n choices: [\"json\", \"yaml\"],\n })\n .option(\"json\", {\n type: \"boolean\",\n describe: \"Output in JSON format\",\n conflicts: [\"yaml\", \"format\"],\n })\n .option(\"yaml\", {\n type: \"boolean\",\n describe: \"Output in YAML format\",\n conflicts: [\"json\", \"format\"],\n })\n .check((argv) => {\n if (!argv.input || !argv.overlay || !argv.output) {\n throw new Error(\n \"All three arguments are required: input, overlay, and output\"\n );\n }\n\n // Validate output file has an extension for format detection\n const outputExt = path.extname(argv.output as string).toLowerCase();\n const validExtensions = [\".json\", \".yaml\", \".yml\"];\n\n // Only require extension if format not explicitly specified\n if (\n !argv.format &&\n !argv.json &&\n !argv.yaml &&\n !validExtensions.includes(outputExt)\n ) {\n throw new Error(\n `Output file must have a .json, .yaml, or .yml extension, or specify output format with --format, --json, or --yaml`\n );\n }\n\n // Validate input files exist\n if (!fs.existsSync(argv.input as string)) {\n throw new Error(`Input file not found: ${argv.input}`);\n }\n\n if (!fs.existsSync(argv.overlay as string)) {\n throw new Error(`Overlay file not found: ${argv.overlay}`);\n }\n\n return true;\n });\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo oas overlay\" });\n await applyOverlay(argv as Arguments);\n },\n};\n"]}
@@ -31,9 +31,9 @@ ${chalk.gray("Older versions are unsupported and may not work as expected.")}`))
31
31
  return shouldWarn;
32
32
  }
33
33
  async function getLatestVersion() {
34
- const response = await fetch("https://raw.githubusercontent.com/zuplo/zuplo/main/packages/zuplo/package.json");
34
+ const response = await fetch("https://registry.npmjs.org/@zuplo/cli/latest");
35
35
  const result = await response.json();
36
- return result.dependencies["@zuplo/cli"];
36
+ return result.version;
37
37
  }
38
38
  async function getVersionCheckInfo() {
39
39
  if (!existsSync(ZUPLO_XDG_STATE_HOME)) {
@@ -1 +1 @@
1
- {"version":3,"file":"outdated.js","sourceRoot":"","sources":["../../src/common/outdated.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport chalk from \"chalk\";\nimport { gt, inc, lt } from \"semver\";\nimport { ZUPLO_VERSION_CHECK_FILE } from \"./constants.js\";\nimport { printWarningToConsole } from \"./output.js\";\nimport box from \"./utils/box.js\";\nimport { ZUPLO_XDG_STATE_HOME } from \"./xdg/lib.js\";\n\ninterface VersionCheckInfo {\n lastCheck: number;\n latestVersion: string;\n}\nexport async function warnNodeVersion(\n currentCliVersion: string,\n desiredNodeVersion: string\n) {\n const currentNodeVersion = process.versions.node;\n if (lt(currentNodeVersion, desiredNodeVersion)) {\n const nextMajorCliVersion = inc(currentCliVersion, \"major\");\n printWarningToConsole(\n box(\n `You are using Node.js ${currentNodeVersion}. The recommended version for the @zuplo/cli is ${nextMajorCliVersion} or greater.\n Some features might not work as expected. Please update your Node.js version as soon as possible.`\n )\n );\n }\n}\n\nexport async function warnIfOutdatedVersion(currentVersion: string) {\n // Print update information, if available\n if (\n // biome-ignore lint/style/noProcessEnv: Migrated from ESLint\n !process.env.ZUPLO_OVERRIDE_CI_TO_TEST &&\n // biome-ignore lint/style/noProcessEnv: Migrated from ESLint\n (process.env.CI || process.env.ZUPLO_DISABLE_UPDATE_CHECK)\n ) {\n return false;\n }\n const versionCheckInfo = await getVersionCheckInfo();\n const shouldWarn = gt(versionCheckInfo.latestVersion, currentVersion);\n\n if (shouldWarn) {\n printWarningToConsole(\n box(\n `Update available! ${chalk.gray(`v${currentVersion}`)} ≫ ${chalk.green(\n `v${versionCheckInfo.latestVersion}`\n )}\nRun ${chalk.cyan(\"npm install zuplo@latest\")} to update.\n\n${chalk.gray(\"Older versions are unsupported and may not work as expected.\")}`\n )\n );\n }\n\n return shouldWarn;\n}\n\nasync function getLatestVersion(): Promise<string> {\n const response = await fetch(\n \"https://raw.githubusercontent.com/zuplo/zuplo/main/packages/zuplo/package.json\"\n );\n const result = await response.json();\n\n return result.dependencies[\"@zuplo/cli\"];\n}\n\nasync function getVersionCheckInfo(): Promise<VersionCheckInfo> {\n if (!existsSync(ZUPLO_XDG_STATE_HOME)) {\n mkdirSync(ZUPLO_XDG_STATE_HOME, { recursive: true });\n }\n const versionCheckPath = join(ZUPLO_XDG_STATE_HOME, ZUPLO_VERSION_CHECK_FILE);\n\n let versionCheckInfo: VersionCheckInfo | undefined;\n if (existsSync(versionCheckPath)) {\n try {\n versionCheckInfo = await readFile(versionCheckPath, \"utf-8\").then(\n JSON.parse\n );\n } catch {\n // Error reading or parsing file, ignore it\n }\n\n // Check if the file is valid, if not ignore it\n if (versionCheckInfo) {\n if (\n typeof versionCheckInfo.lastCheck !== \"number\" ||\n typeof versionCheckInfo.latestVersion !== \"string\"\n ) {\n versionCheckInfo = undefined;\n }\n }\n }\n\n let shouldCheck = true;\n if (versionCheckInfo) {\n const now = Date.now();\n const lastCheck = versionCheckInfo.lastCheck;\n if (now - lastCheck < 1000 * 60 * 60 * 24) {\n shouldCheck = false;\n }\n }\n\n if (!versionCheckInfo || shouldCheck) {\n const latestVersion = await getLatestVersion();\n\n versionCheckInfo = {\n lastCheck: Date.now(),\n latestVersion,\n };\n await writeFile(\n versionCheckPath,\n JSON.stringify(versionCheckInfo),\n \"utf-8\"\n );\n }\n\n return versionCheckInfo;\n}\n"]}
1
+ {"version":3,"file":"outdated.js","sourceRoot":"","sources":["../../src/common/outdated.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync } from \"node:fs\";\nimport { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport chalk from \"chalk\";\nimport { gt, inc, lt } from \"semver\";\nimport { ZUPLO_VERSION_CHECK_FILE } from \"./constants.js\";\nimport { printWarningToConsole } from \"./output.js\";\nimport box from \"./utils/box.js\";\nimport { ZUPLO_XDG_STATE_HOME } from \"./xdg/lib.js\";\n\ninterface VersionCheckInfo {\n lastCheck: number;\n latestVersion: string;\n}\nexport async function warnNodeVersion(\n currentCliVersion: string,\n desiredNodeVersion: string\n) {\n const currentNodeVersion = process.versions.node;\n if (lt(currentNodeVersion, desiredNodeVersion)) {\n const nextMajorCliVersion = inc(currentCliVersion, \"major\");\n printWarningToConsole(\n box(\n `You are using Node.js ${currentNodeVersion}. The recommended version for the @zuplo/cli is ${nextMajorCliVersion} or greater.\n Some features might not work as expected. Please update your Node.js version as soon as possible.`\n )\n );\n }\n}\n\nexport async function warnIfOutdatedVersion(currentVersion: string) {\n // Print update information, if available\n if (\n // biome-ignore lint/style/noProcessEnv: Migrated from ESLint\n !process.env.ZUPLO_OVERRIDE_CI_TO_TEST &&\n // biome-ignore lint/style/noProcessEnv: Migrated from ESLint\n (process.env.CI || process.env.ZUPLO_DISABLE_UPDATE_CHECK)\n ) {\n return false;\n }\n const versionCheckInfo = await getVersionCheckInfo();\n const shouldWarn = gt(versionCheckInfo.latestVersion, currentVersion);\n\n if (shouldWarn) {\n printWarningToConsole(\n box(\n `Update available! ${chalk.gray(`v${currentVersion}`)} ≫ ${chalk.green(\n `v${versionCheckInfo.latestVersion}`\n )}\nRun ${chalk.cyan(\"npm install zuplo@latest\")} to update.\n\n${chalk.gray(\"Older versions are unsupported and may not work as expected.\")}`\n )\n );\n }\n\n return shouldWarn;\n}\n\nasync function getLatestVersion(): Promise<string> {\n const response = await fetch(\"https://registry.npmjs.org/@zuplo/cli/latest\");\n const result = await response.json();\n\n return result.version;\n}\n\nasync function getVersionCheckInfo(): Promise<VersionCheckInfo> {\n if (!existsSync(ZUPLO_XDG_STATE_HOME)) {\n mkdirSync(ZUPLO_XDG_STATE_HOME, { recursive: true });\n }\n const versionCheckPath = join(ZUPLO_XDG_STATE_HOME, ZUPLO_VERSION_CHECK_FILE);\n\n let versionCheckInfo: VersionCheckInfo | undefined;\n if (existsSync(versionCheckPath)) {\n try {\n versionCheckInfo = await readFile(versionCheckPath, \"utf-8\").then(\n JSON.parse\n );\n } catch {\n // Error reading or parsing file, ignore it\n }\n\n // Check if the file is valid, if not ignore it\n if (versionCheckInfo) {\n if (\n typeof versionCheckInfo.lastCheck !== \"number\" ||\n typeof versionCheckInfo.latestVersion !== \"string\"\n ) {\n versionCheckInfo = undefined;\n }\n }\n }\n\n let shouldCheck = true;\n if (versionCheckInfo) {\n const now = Date.now();\n const lastCheck = versionCheckInfo.lastCheck;\n if (now - lastCheck < 1000 * 60 * 60 * 24) {\n shouldCheck = false;\n }\n }\n\n if (!versionCheckInfo || shouldCheck) {\n const latestVersion = await getLatestVersion();\n\n versionCheckInfo = {\n lastCheck: Date.now(),\n latestVersion,\n };\n await writeFile(\n versionCheckPath,\n JSON.stringify(versionCheckInfo),\n \"utf-8\"\n );\n }\n\n return versionCheckInfo;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zuplo/cli",
3
- "version": "6.63.0",
3
+ "version": "6.63.2",
4
4
  "repository": "https://github.com/zuplo/zuplo",
5
5
  "author": "Zuplo, Inc.",
6
6
  "type": "module",
@@ -29,10 +29,10 @@
29
29
  "@opentelemetry/api": "1.9.0",
30
30
  "@sentry/node": "9.22.0",
31
31
  "@swc/core": "1.10.18",
32
- "@zuplo/core": "6.63.0",
32
+ "@zuplo/core": "6.63.2",
33
33
  "@zuplo/editor": "~1.0.0",
34
- "@zuplo/openapi-tools": "6.63.0",
35
- "@zuplo/runtime": "6.63.0",
34
+ "@zuplo/openapi-tools": "6.63.2",
35
+ "@zuplo/runtime": "6.63.2",
36
36
  "as-table": "1.0.55",
37
37
  "chalk": "5.4.1",
38
38
  "chokidar": "3.5.3",