@zuplo/cli 6.49.2 → 6.49.3
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.
- package/dist/__tests__/archive-utils.test.js +2 -2
- package/dist/__tests__/archive-utils.test.js.map +1 -1
- package/dist/__tests__/engine.test.js +1 -1
- package/dist/__tests__/engine.test.js.map +1 -1
- package/dist/__tests__/import-openapi-utils.test.js +4 -4
- package/dist/__tests__/import-openapi-utils.test.js.map +1 -1
- package/dist/__tests__/import-openapi.test.js +4 -4
- package/dist/__tests__/import-openapi.test.js.map +1 -1
- package/dist/__tests__/outdated.test.js +1 -1
- package/dist/__tests__/outdated.test.js.map +1 -1
- package/dist/__tests__/tsconfig-upgrader.test.js +8 -4
- package/dist/__tests__/tsconfig-upgrader.test.js.map +1 -1
- package/dist/build/handler.d.ts.map +1 -1
- package/dist/build/handler.js +1 -1
- package/dist/build/handler.js.map +1 -1
- package/dist/cli.js +2 -2
- package/dist/cli.js.map +1 -1
- package/dist/cmds/tunnel/list.js +1 -1
- package/dist/cmds/tunnel/list.js.map +1 -1
- package/dist/common/middleware/user-configuration.js +1 -1
- package/dist/common/middleware/user-configuration.js.map +1 -1
- package/dist/common/middleware/user-identification.js +2 -2
- package/dist/common/middleware/user-identification.js.map +1 -1
- package/dist/common/outdated.d.ts.map +1 -1
- package/dist/common/outdated.js +1 -1
- package/dist/common/outdated.js.map +1 -1
- package/dist/common/upgraders/tsconfig-upgrader.js +1 -1
- package/dist/common/upgraders/tsconfig-upgrader.js.map +1 -1
- package/dist/common/upgraders/vscode-settings-json-upgrader.js +1 -1
- package/dist/common/upgraders/vscode-settings-json-upgrader.js.map +1 -1
- package/dist/common/validators/file-system-validator.js +1 -1
- package/dist/common/validators/file-system-validator.js.map +1 -1
- package/dist/common/worker-output.d.ts +1 -1
- package/dist/common/worker-output.d.ts.map +1 -1
- package/dist/common/worker-output.js.map +1 -1
- package/dist/compile/handler.d.ts.map +1 -1
- package/dist/compile/handler.js +1 -1
- package/dist/compile/handler.js.map +1 -1
- package/dist/deploy/archive.js +2 -2
- package/dist/deploy/archive.js.map +1 -1
- package/dist/deploy/handler.js +1 -1
- package/dist/deploy/handler.js.map +1 -1
- package/dist/dev/handler.d.ts.map +1 -1
- package/dist/dev/handler.js +1 -1
- package/dist/dev/handler.js.map +1 -1
- package/dist/editor/server/cors-plugin.js +1 -1
- package/dist/editor/server/cors-plugin.js.map +1 -1
- package/dist/editor/server/server.d.ts.map +1 -1
- package/dist/editor/server/server.js +3 -3
- package/dist/editor/server/server.js.map +1 -1
- package/dist/link/populate.js +1 -1
- package/dist/link/populate.js.map +1 -1
- package/dist/login/tokens.js +1 -1
- package/dist/login/tokens.js.map +1 -1
- package/dist/project/import-openapi/handler.js +3 -3
- package/dist/project/import-openapi/handler.js.map +1 -1
- package/dist/test/invoke-test.d.ts.map +1 -1
- package/dist/test/invoke-test.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { expect } from "chai";
|
|
2
|
-
import ignore from "ignore";
|
|
3
1
|
import path from "node:path";
|
|
4
2
|
import { describe, it } from "node:test";
|
|
5
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { expect } from "chai";
|
|
5
|
+
import ignore from "ignore";
|
|
6
6
|
import { createIgnoreFunction, generateMetadata } from "../deploy/archive.js";
|
|
7
7
|
const __filename = fileURLToPath(import.meta.url);
|
|
8
8
|
const __dirname = path.dirname(__filename);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive-utils.test.js","sourceRoot":"","sources":["../../src/__tests__/archive-utils.test.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"archive-utils.test.js","sourceRoot":"","sources":["../../src/__tests__/archive-utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import path from \"node:path\";\nimport { describe, it } from \"node:test\";\nimport { fileURLToPath } from \"node:url\";\nimport { expect } from \"chai\";\nimport ignore from \"ignore\";\nimport { createIgnoreFunction, generateMetadata } from \"../deploy/archive.js\";\nconst __filename = fileURLToPath(import.meta.url); // get the resolved path to the file\nconst __dirname = path.dirname(__filename); // get the name of the directory\n\nconst basicTestsPath = path.join(\n __dirname,\n \"..\",\n \"..\",\n \"..\",\n \"..\",\n \"test-fixtures\",\n \"basic\"\n);\n\ndescribe(\"Archive utils\", async function () {\n it(\"should not ignore .zuplo using gitignore\", function () {\n const ignores = createIgnoreFunction(basicTestsPath);\n const expectedRules = (ignore as any)().add(\".git/\");\n expectedRules.add(\".cache/\");\n expectedRules.add(\"dist/\");\n expectedRules.add(\"node_modules/\");\n expectedRules.add(\".env\");\n expectedRules.add(\".DS_Store\");\n\n expect(ignores._rules).to.deep.equal(expectedRules._rules);\n });\n\n it(\"should return default metadata values\", async function () {\n const results = await generateMetadata({\n account: \"zuplo-test\",\n project: \"basic\",\n dir: basicTestsPath,\n environment: \"basic-1234\",\n authToken: \"\",\n });\n\n expect(results).to.not.be.empty;\n expect(results.branch).to.equal(\"basic-1234\");\n expect(results.repoUrl).to.not.be.null;\n expect(results.sha).to.not.be.null;\n });\n\n it(\"should allow metadata value override on repo url\", async function () {\n const results = await generateMetadata({\n account: \"zuplo-test\",\n project: \"basic\",\n dir: basicTestsPath,\n environment: \"basic-1234\",\n authToken: \"\",\n \"override-repo-url\": \"https://github.com/zuplo/test-override\",\n });\n\n expect(results).to.not.be.empty;\n expect(results.branch).to.equal(\"basic-1234\");\n expect(results.repoUrl).to.not.be.null;\n expect(results.repoUrl).to.equal(\"https://github.com/zuplo/test-override\");\n expect(results.sha).to.not.be.null;\n });\n});\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { expect } from "chai";
|
|
2
1
|
import { describe, it } from "node:test";
|
|
2
|
+
import { expect } from "chai";
|
|
3
3
|
import { convertRoutes } from "../convert/engine.js";
|
|
4
4
|
describe("Routes.json Conversion Engine", () => {
|
|
5
5
|
it("should handle simple route conversion (no version)", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../../src/__tests__/engine.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { expect } from \"chai\";\nimport { describe, it } from \"node:test\";\nimport { convertRoutes } from \"../convert/engine.js\";\nimport { RouteConfigFile } from \"../convert/routes.legacy.js\";\n\ndescribe(\"Routes.json Conversion Engine\", () => {\n it(\"should handle simple route conversion (no version)\", () => {\n const routesConfig: RouteConfigFile = {\n versions: [\n {\n name: \"v1\",\n pathPrefix: \"/v1\",\n },\n {\n name: \"none\",\n pathPrefix: \"\",\n },\n ],\n routes: [\n {\n methods: [\"GET\"],\n path: \"/test\",\n summary: \"Test route\",\n version: \"none\",\n corsPolicy: \"anything-goes\",\n description: \"This is a test route\",\n operationId: \"random\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://jsonplaceholder.typicode.com/todos\",\n forwardSearch: true,\n },\n },\n },\n ],\n };\n const expected = {\n openapi: \"3.1.0\",\n info: {\n title: \"Converted from config/routes.json\",\n version: \"1.0.0\",\n },\n paths: {\n \"/test\": {\n get: {\n summary: \"Test route\",\n description: \"This is a test route\",\n operationId: \"random\",\n \"x-zuplo-route\": {\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://jsonplaceholder.typicode.com/todos\",\n forwardSearch: true,\n },\n },\n },\n },\n \"x-zuplo-path\": {\n pathMode: \"url-pattern\",\n },\n },\n },\n };\n const actual = convertRoutes(routesConfig);\n expect(actual).to.deep.equal(expected);\n });\n\n it(\"should handle simple route conversion (with version)\", () => {\n const routesConfig: RouteConfigFile = {\n versions: [\n {\n name: \"v1\",\n pathPrefix: \"/v1\",\n },\n {\n name: \"none\",\n pathPrefix: \"\",\n },\n ],\n routes: [\n {\n methods: [\"GET\"],\n path: \"/test\",\n summary: \"Test route\",\n version: \"v1\",\n corsPolicy: \"anything-goes\",\n description: \"This is a test route\",\n operationId: \"random\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://jsonplaceholder.typicode.com/todos\",\n forwardSearch: true,\n },\n },\n },\n ],\n };\n const expected = {\n openapi: \"3.1.0\",\n info: {\n title: \"Converted from config/routes.json\",\n version: \"1.0.0\",\n },\n paths: {\n \"/v1/test\": {\n get: {\n summary: \"Test route\",\n description: \"This is a test route\",\n operationId: \"random\",\n \"x-zuplo-route\": {\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://jsonplaceholder.typicode.com/todos\",\n forwardSearch: true,\n },\n },\n },\n },\n \"x-zuplo-path\": {\n pathMode: \"url-pattern\",\n },\n },\n },\n };\n const actual = convertRoutes(routesConfig);\n expect(actual).to.deep.equal(expected);\n });\n\n it(\"should handle single route with multiple methods\", () => {\n const routesConfig: RouteConfigFile = {\n versions: [\n {\n name: \"v1\",\n pathPrefix: \"/v1\",\n },\n {\n name: \"none\",\n pathPrefix: \"\",\n },\n ],\n routes: [\n {\n methods: [\"GET\", \"POST\", \"HEAD\"],\n path: \"/test\",\n summary: \"Test route\",\n version: \"v1\",\n corsPolicy: \"anything-goes\",\n description: \"This is a test route\",\n operationId: \"random\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://jsonplaceholder.typicode.com/todos\",\n forwardSearch: true,\n },\n },\n },\n ],\n };\n const expected = {\n openapi: \"3.1.0\",\n info: {\n title: \"Converted from config/routes.json\",\n version: \"1.0.0\",\n },\n paths: {\n \"/v1/test\": {\n \"get,post,head\": {\n summary: \"Test route\",\n description: \"This is a test route\",\n operationId: \"random\",\n \"x-zuplo-route\": {\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://jsonplaceholder.typicode.com/todos\",\n forwardSearch: true,\n },\n },\n },\n },\n \"x-zuplo-path\": {\n pathMode: \"url-pattern\",\n },\n },\n },\n };\n const actual = convertRoutes(routesConfig);\n expect(actual).to.deep.equal(expected);\n });\n\n it(\"should handle single route with different methods\", () => {\n const routesConfig: RouteConfigFile = {\n versions: [\n {\n name: \"v1\",\n pathPrefix: \"/v1\",\n },\n {\n name: \"none\",\n pathPrefix: \"\",\n },\n ],\n routes: [\n {\n methods: [\"GET\"],\n path: \"/test\",\n summary: \"Test route\",\n description: \"This is a test route\",\n version: \"v1\",\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://welcome.zuplo.io/\",\n forwardSearch: true,\n },\n },\n operationId: \"random1\",\n },\n {\n methods: [\"POST\"],\n path: \"/test\",\n summary: \"Test route\",\n description: \"This is a test route\",\n version: \"v1\",\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://welcome.zuplo.io/\",\n forwardSearch: true,\n },\n },\n operationId: \"random2\",\n },\n ],\n };\n const expected = {\n openapi: \"3.1.0\",\n info: {\n title: \"Converted from config/routes.json\",\n version: \"1.0.0\",\n },\n paths: {\n \"/v1/test\": {\n get: {\n summary: \"Test route\",\n description: \"This is a test route\",\n operationId: \"random1\",\n \"x-zuplo-route\": {\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://welcome.zuplo.io/\",\n forwardSearch: true,\n },\n },\n },\n },\n post: {\n summary: \"Test route\",\n description: \"This is a test route\",\n operationId: \"random2\",\n \"x-zuplo-route\": {\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://welcome.zuplo.io/\",\n forwardSearch: true,\n },\n },\n },\n },\n \"x-zuplo-path\": {\n pathMode: \"url-pattern\",\n },\n },\n },\n };\n const actual = convertRoutes(routesConfig);\n expect(actual).to.deep.equal(expected);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../../src/__tests__/engine.test.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-floating-promises */\n\nimport { describe, it } from \"node:test\";\nimport { expect } from \"chai\";\nimport { convertRoutes } from \"../convert/engine.js\";\nimport { RouteConfigFile } from \"../convert/routes.legacy.js\";\n\ndescribe(\"Routes.json Conversion Engine\", () => {\n it(\"should handle simple route conversion (no version)\", () => {\n const routesConfig: RouteConfigFile = {\n versions: [\n {\n name: \"v1\",\n pathPrefix: \"/v1\",\n },\n {\n name: \"none\",\n pathPrefix: \"\",\n },\n ],\n routes: [\n {\n methods: [\"GET\"],\n path: \"/test\",\n summary: \"Test route\",\n version: \"none\",\n corsPolicy: \"anything-goes\",\n description: \"This is a test route\",\n operationId: \"random\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://jsonplaceholder.typicode.com/todos\",\n forwardSearch: true,\n },\n },\n },\n ],\n };\n const expected = {\n openapi: \"3.1.0\",\n info: {\n title: \"Converted from config/routes.json\",\n version: \"1.0.0\",\n },\n paths: {\n \"/test\": {\n get: {\n summary: \"Test route\",\n description: \"This is a test route\",\n operationId: \"random\",\n \"x-zuplo-route\": {\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://jsonplaceholder.typicode.com/todos\",\n forwardSearch: true,\n },\n },\n },\n },\n \"x-zuplo-path\": {\n pathMode: \"url-pattern\",\n },\n },\n },\n };\n const actual = convertRoutes(routesConfig);\n expect(actual).to.deep.equal(expected);\n });\n\n it(\"should handle simple route conversion (with version)\", () => {\n const routesConfig: RouteConfigFile = {\n versions: [\n {\n name: \"v1\",\n pathPrefix: \"/v1\",\n },\n {\n name: \"none\",\n pathPrefix: \"\",\n },\n ],\n routes: [\n {\n methods: [\"GET\"],\n path: \"/test\",\n summary: \"Test route\",\n version: \"v1\",\n corsPolicy: \"anything-goes\",\n description: \"This is a test route\",\n operationId: \"random\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://jsonplaceholder.typicode.com/todos\",\n forwardSearch: true,\n },\n },\n },\n ],\n };\n const expected = {\n openapi: \"3.1.0\",\n info: {\n title: \"Converted from config/routes.json\",\n version: \"1.0.0\",\n },\n paths: {\n \"/v1/test\": {\n get: {\n summary: \"Test route\",\n description: \"This is a test route\",\n operationId: \"random\",\n \"x-zuplo-route\": {\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://jsonplaceholder.typicode.com/todos\",\n forwardSearch: true,\n },\n },\n },\n },\n \"x-zuplo-path\": {\n pathMode: \"url-pattern\",\n },\n },\n },\n };\n const actual = convertRoutes(routesConfig);\n expect(actual).to.deep.equal(expected);\n });\n\n it(\"should handle single route with multiple methods\", () => {\n const routesConfig: RouteConfigFile = {\n versions: [\n {\n name: \"v1\",\n pathPrefix: \"/v1\",\n },\n {\n name: \"none\",\n pathPrefix: \"\",\n },\n ],\n routes: [\n {\n methods: [\"GET\", \"POST\", \"HEAD\"],\n path: \"/test\",\n summary: \"Test route\",\n version: \"v1\",\n corsPolicy: \"anything-goes\",\n description: \"This is a test route\",\n operationId: \"random\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://jsonplaceholder.typicode.com/todos\",\n forwardSearch: true,\n },\n },\n },\n ],\n };\n const expected = {\n openapi: \"3.1.0\",\n info: {\n title: \"Converted from config/routes.json\",\n version: \"1.0.0\",\n },\n paths: {\n \"/v1/test\": {\n \"get,post,head\": {\n summary: \"Test route\",\n description: \"This is a test route\",\n operationId: \"random\",\n \"x-zuplo-route\": {\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://jsonplaceholder.typicode.com/todos\",\n forwardSearch: true,\n },\n },\n },\n },\n \"x-zuplo-path\": {\n pathMode: \"url-pattern\",\n },\n },\n },\n };\n const actual = convertRoutes(routesConfig);\n expect(actual).to.deep.equal(expected);\n });\n\n it(\"should handle single route with different methods\", () => {\n const routesConfig: RouteConfigFile = {\n versions: [\n {\n name: \"v1\",\n pathPrefix: \"/v1\",\n },\n {\n name: \"none\",\n pathPrefix: \"\",\n },\n ],\n routes: [\n {\n methods: [\"GET\"],\n path: \"/test\",\n summary: \"Test route\",\n description: \"This is a test route\",\n version: \"v1\",\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://welcome.zuplo.io/\",\n forwardSearch: true,\n },\n },\n operationId: \"random1\",\n },\n {\n methods: [\"POST\"],\n path: \"/test\",\n summary: \"Test route\",\n description: \"This is a test route\",\n version: \"v1\",\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://welcome.zuplo.io/\",\n forwardSearch: true,\n },\n },\n operationId: \"random2\",\n },\n ],\n };\n const expected = {\n openapi: \"3.1.0\",\n info: {\n title: \"Converted from config/routes.json\",\n version: \"1.0.0\",\n },\n paths: {\n \"/v1/test\": {\n get: {\n summary: \"Test route\",\n description: \"This is a test route\",\n operationId: \"random1\",\n \"x-zuplo-route\": {\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://welcome.zuplo.io/\",\n forwardSearch: true,\n },\n },\n },\n },\n post: {\n summary: \"Test route\",\n description: \"This is a test route\",\n operationId: \"random2\",\n \"x-zuplo-route\": {\n corsPolicy: \"anything-goes\",\n handler: {\n export: \"urlRewriteHandler\",\n module: \"$import(@zuplo/runtime)\",\n options: {\n rewritePattern: \"https://welcome.zuplo.io/\",\n forwardSearch: true,\n },\n },\n },\n },\n \"x-zuplo-path\": {\n pathMode: \"url-pattern\",\n },\n },\n },\n };\n const actual = convertRoutes(routesConfig);\n expect(actual).to.deep.equal(expected);\n });\n});\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { expect } from "chai";
|
|
2
|
-
import { describe, it } from "node:test";
|
|
3
1
|
import fs from "node:fs/promises";
|
|
4
2
|
import path from "node:path";
|
|
3
|
+
import { describe, it } from "node:test";
|
|
5
4
|
import { fileURLToPath } from "node:url";
|
|
6
|
-
import { addOperationIdsAsNecessary, parseOpenApiFile, } from "../project/import-openapi/utils.js";
|
|
7
5
|
import { mergeOpenApiDocuments } from "@zuplo/openapi-tools";
|
|
8
|
-
import {
|
|
6
|
+
import { expect } from "chai";
|
|
9
7
|
import { BASE_TEMPLATE } from "../project/import-openapi/handler.js";
|
|
8
|
+
import { addOperationIdsAsNecessary, parseOpenApiFile, } from "../project/import-openapi/utils.js";
|
|
9
|
+
import { baseRoutesFileOnImportTests, baseRoutesFileWOOperationIDs, } from "./oas-test-data.js";
|
|
10
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
11
11
|
const __dirname = path.dirname(__filename);
|
|
12
12
|
const testAssetsPath = path.join(__dirname, "..", "..", "src", "__tests__", "test-assets");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-openapi-utils.test.js","sourceRoot":"","sources":["../../src/__tests__/import-openapi-utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect } from \"chai\";\nimport { describe, it } from \"node:test\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n addOperationIdsAsNecessary,\n parseOpenApiFile,\n} from \"../project/import-openapi/utils.js\";\nimport { mergeOpenApiDocuments } from \"@zuplo/openapi-tools\";\nimport {\n baseRoutesFileOnImportTests,\n baseRoutesFileWOOperationIDs,\n} from \"./oas-test-data.js\";\nimport { ZuploOpenApiDocument } from \"../../../types/dist/open-api.js\";\nimport { BASE_TEMPLATE } from \"../project/import-openapi/handler.js\";\nconst __filename = fileURLToPath(import.meta.url); // get the resolved path to the file\nconst __dirname = path.dirname(__filename); // get the name of the directory\n\nconst testAssetsPath = path.join(\n __dirname,\n \"..\",\n \"..\",\n \"src\",\n \"__tests__\",\n \"test-assets\"\n);\n\ndescribe(\"Import open api utils\", async function () {\n it(\"should generate merge changes between two different oas files\", async function () {\n const toImportPath = path.join(testAssetsPath, \"toimport.oas.json\");\n const toImportContent = await fs.readFile(toImportPath, \"utf-8\");\n const toImportOpenApiSpec = await parseOpenApiFile(\n \".json\",\n toImportContent\n );\n\n const originalDocument = (await parseOpenApiFile(\n \".json\",\n JSON.stringify(baseRoutesFileOnImportTests)\n )) as ZuploOpenApiDocument;\n\n const { created, merged, retained } = mergeOpenApiDocuments(\n originalDocument,\n toImportOpenApiSpec,\n \"path-method\"\n );\n\n const expectedMergedResult = new Set().add(\n \"post>/v2/second/{userUid}/nature\"\n );\n const expectedRetainedResult = new Set().add(\n \"post>/v1/second/{userUid}/nature\"\n );\n\n expect(created).to.deep.equals(new Set());\n expect(merged).to.deep.equals(expectedMergedResult);\n expect(retained).to.deep.equals(expectedRetainedResult);\n });\n\n it(\"should generate merge changes between a oas file and the default base template\", async function () {\n const toImportPath = path.join(testAssetsPath, \"toimport.oas.json\");\n const toImportContent = await fs.readFile(toImportPath, \"utf-8\");\n const toImportOpenApiSpec = await parseOpenApiFile(\n \".json\",\n toImportContent\n );\n\n const originalDocument = (await parseOpenApiFile(\n \".json\",\n BASE_TEMPLATE\n )) as ZuploOpenApiDocument;\n\n const { created, merged, retained } = mergeOpenApiDocuments(\n originalDocument,\n toImportOpenApiSpec,\n \"path-method\"\n );\n\n expect(created).to.deep.equals(\n new Set().add(\"post>/v2/second/{userUid}/nature\")\n );\n expect(merged).to.deep.equals(new Set());\n expect(retained).to.deep.equals(new Set());\n });\n\n it(\"should generate missing operation ids\", async function () {\n const oasDocument = await parseOpenApiFile(\n \".json\",\n JSON.stringify(baseRoutesFileWOOperationIDs)\n );\n\n addOperationIdsAsNecessary(oasDocument);\n\n expect(oasDocument.paths).to.not.be.empty;\n // @ts-ignore\n expect(oasDocument.paths[\"/v2/second/{userUid}/nature\"]?.post?.operationId)\n .to.not.be.empty;\n });\n\n it(\"should not change existing operation ids\", async function () {\n const oasDocument = await parseOpenApiFile(\n \".json\",\n JSON.stringify(baseRoutesFileOnImportTests)\n );\n\n addOperationIdsAsNecessary(oasDocument);\n\n expect(oasDocument.paths).to.not.be.empty;\n expect(\n // @ts-ignore\n oasDocument.paths[\"/v1/second/{userUid}/nature\"]?.post?.operationId\n ).to.equal(\"12345\");\n expect(\n // @ts-ignore\n oasDocument.paths[\"/v2/second/{userUid}/nature\"]?.post?.operationId\n ).to.equal(\"67920\");\n });\n\n it(\"should successfully parse a yaml open api file\", async function () {\n const toImportPath = path.join(testAssetsPath, \"toimportv2.yaml\");\n const toImportContent = await fs.readFile(toImportPath, \"utf-8\");\n const toImportOpenApiSpec = await parseOpenApiFile(\n \".yaml\",\n toImportContent\n );\n\n expect(toImportOpenApiSpec).to.not.be.empty;\n expect(toImportOpenApiSpec.info).to.deep.equals({\n title: \"Protect API\",\n description: \"Buy & sell\",\n version: \"0.2.0\",\n contact: {\n name: \"Zuplo YAML Test\",\n url: \"https://zuplo.com/\",\n email: \"test@example.com\",\n },\n });\n expect(toImportOpenApiSpec.servers).to.deep.equals([\n {\n url: \"https://api.zuplo.com\",\n description: \"Production\",\n },\n ]);\n expect(toImportOpenApiSpec.tags).to.deep.equals([\n {\n name: \"Order\",\n },\n {\n name: \"Organization\",\n },\n {\n name: \"Site\",\n },\n {\n name: \"Supervisor\",\n },\n ]);\n\n expect(toImportOpenApiSpec.paths).to.not.be.empty;\n\n //@ts-ignore\n expect(toImportOpenApiSpec.paths[\"/v1/orders\"]).to.not.be.empty;\n //@ts-ignore\n expect(toImportOpenApiSpec.paths[\"/v1/orders/wa/{waaaa}\"]).to.not.be.empty;\n //@ts-ignore\n expect(toImportOpenApiSpec.paths[\"/v1/orders/{order}\"]).to.not.be.empty;\n //@ts-ignore\n expect(toImportOpenApiSpec.paths[\"/v1/orgs/{organization}\"]).to.not.be\n .empty;\n //@ts-ignore\n expect(toImportOpenApiSpec.paths[\"/v1/sites\"]).to.deep.equals({\n get: {\n operationId: \"get-sites\",\n summary: \"Get Sites\",\n description: \"Sites are locations\",\n tags: [\"Site\"],\n responses: {\n \"200\": {\n description: \"OK\",\n content: {\n \"application/json\": {\n schema: {\n type: \"array\",\n items: {\n $ref: \"#/components/schemas/Site\",\n },\n },\n },\n },\n headers: {\n \"Cache-Control\": {\n required: true,\n schema: {\n type: \"string\",\n },\n description:\n \"Responses are cacheable following standard HTTP headers.\",\n },\n },\n },\n },\n },\n });\n expect(toImportOpenApiSpec.components).to.not.be.empty;\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"import-openapi-utils.test.js","sourceRoot":"","sources":["../../src/__tests__/import-openapi-utils.test.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { describe, it } from \"node:test\";\nimport { fileURLToPath } from \"node:url\";\nimport { mergeOpenApiDocuments } from \"@zuplo/openapi-tools\";\nimport { expect } from \"chai\";\nimport { ZuploOpenApiDocument } from \"../../../types/dist/open-api.js\";\nimport { BASE_TEMPLATE } from \"../project/import-openapi/handler.js\";\nimport {\n addOperationIdsAsNecessary,\n parseOpenApiFile,\n} from \"../project/import-openapi/utils.js\";\nimport {\n baseRoutesFileOnImportTests,\n baseRoutesFileWOOperationIDs,\n} from \"./oas-test-data.js\";\nconst __filename = fileURLToPath(import.meta.url); // get the resolved path to the file\nconst __dirname = path.dirname(__filename); // get the name of the directory\n\nconst testAssetsPath = path.join(\n __dirname,\n \"..\",\n \"..\",\n \"src\",\n \"__tests__\",\n \"test-assets\"\n);\n\ndescribe(\"Import open api utils\", async function () {\n it(\"should generate merge changes between two different oas files\", async function () {\n const toImportPath = path.join(testAssetsPath, \"toimport.oas.json\");\n const toImportContent = await fs.readFile(toImportPath, \"utf-8\");\n const toImportOpenApiSpec = await parseOpenApiFile(\n \".json\",\n toImportContent\n );\n\n const originalDocument = (await parseOpenApiFile(\n \".json\",\n JSON.stringify(baseRoutesFileOnImportTests)\n )) as ZuploOpenApiDocument;\n\n const { created, merged, retained } = mergeOpenApiDocuments(\n originalDocument,\n toImportOpenApiSpec,\n \"path-method\"\n );\n\n const expectedMergedResult = new Set().add(\n \"post>/v2/second/{userUid}/nature\"\n );\n const expectedRetainedResult = new Set().add(\n \"post>/v1/second/{userUid}/nature\"\n );\n\n expect(created).to.deep.equals(new Set());\n expect(merged).to.deep.equals(expectedMergedResult);\n expect(retained).to.deep.equals(expectedRetainedResult);\n });\n\n it(\"should generate merge changes between a oas file and the default base template\", async function () {\n const toImportPath = path.join(testAssetsPath, \"toimport.oas.json\");\n const toImportContent = await fs.readFile(toImportPath, \"utf-8\");\n const toImportOpenApiSpec = await parseOpenApiFile(\n \".json\",\n toImportContent\n );\n\n const originalDocument = (await parseOpenApiFile(\n \".json\",\n BASE_TEMPLATE\n )) as ZuploOpenApiDocument;\n\n const { created, merged, retained } = mergeOpenApiDocuments(\n originalDocument,\n toImportOpenApiSpec,\n \"path-method\"\n );\n\n expect(created).to.deep.equals(\n new Set().add(\"post>/v2/second/{userUid}/nature\")\n );\n expect(merged).to.deep.equals(new Set());\n expect(retained).to.deep.equals(new Set());\n });\n\n it(\"should generate missing operation ids\", async function () {\n const oasDocument = await parseOpenApiFile(\n \".json\",\n JSON.stringify(baseRoutesFileWOOperationIDs)\n );\n\n addOperationIdsAsNecessary(oasDocument);\n\n expect(oasDocument.paths).to.not.be.empty;\n // @ts-ignore\n expect(oasDocument.paths[\"/v2/second/{userUid}/nature\"]?.post?.operationId)\n .to.not.be.empty;\n });\n\n it(\"should not change existing operation ids\", async function () {\n const oasDocument = await parseOpenApiFile(\n \".json\",\n JSON.stringify(baseRoutesFileOnImportTests)\n );\n\n addOperationIdsAsNecessary(oasDocument);\n\n expect(oasDocument.paths).to.not.be.empty;\n expect(\n // @ts-ignore\n oasDocument.paths[\"/v1/second/{userUid}/nature\"]?.post?.operationId\n ).to.equal(\"12345\");\n expect(\n // @ts-ignore\n oasDocument.paths[\"/v2/second/{userUid}/nature\"]?.post?.operationId\n ).to.equal(\"67920\");\n });\n\n it(\"should successfully parse a yaml open api file\", async function () {\n const toImportPath = path.join(testAssetsPath, \"toimportv2.yaml\");\n const toImportContent = await fs.readFile(toImportPath, \"utf-8\");\n const toImportOpenApiSpec = await parseOpenApiFile(\n \".yaml\",\n toImportContent\n );\n\n expect(toImportOpenApiSpec).to.not.be.empty;\n expect(toImportOpenApiSpec.info).to.deep.equals({\n title: \"Protect API\",\n description: \"Buy & sell\",\n version: \"0.2.0\",\n contact: {\n name: \"Zuplo YAML Test\",\n url: \"https://zuplo.com/\",\n email: \"test@example.com\",\n },\n });\n expect(toImportOpenApiSpec.servers).to.deep.equals([\n {\n url: \"https://api.zuplo.com\",\n description: \"Production\",\n },\n ]);\n expect(toImportOpenApiSpec.tags).to.deep.equals([\n {\n name: \"Order\",\n },\n {\n name: \"Organization\",\n },\n {\n name: \"Site\",\n },\n {\n name: \"Supervisor\",\n },\n ]);\n\n expect(toImportOpenApiSpec.paths).to.not.be.empty;\n\n //@ts-ignore\n expect(toImportOpenApiSpec.paths[\"/v1/orders\"]).to.not.be.empty;\n //@ts-ignore\n expect(toImportOpenApiSpec.paths[\"/v1/orders/wa/{waaaa}\"]).to.not.be.empty;\n //@ts-ignore\n expect(toImportOpenApiSpec.paths[\"/v1/orders/{order}\"]).to.not.be.empty;\n //@ts-ignore\n expect(toImportOpenApiSpec.paths[\"/v1/orgs/{organization}\"]).to.not.be\n .empty;\n //@ts-ignore\n expect(toImportOpenApiSpec.paths[\"/v1/sites\"]).to.deep.equals({\n get: {\n operationId: \"get-sites\",\n summary: \"Get Sites\",\n description: \"Sites are locations\",\n tags: [\"Site\"],\n responses: {\n \"200\": {\n description: \"OK\",\n content: {\n \"application/json\": {\n schema: {\n type: \"array\",\n items: {\n $ref: \"#/components/schemas/Site\",\n },\n },\n },\n },\n headers: {\n \"Cache-Control\": {\n required: true,\n schema: {\n type: \"string\",\n },\n description:\n \"Responses are cacheable following standard HTTP headers.\",\n },\n },\n },\n },\n },\n });\n expect(toImportOpenApiSpec.components).to.not.be.empty;\n });\n});\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { importOpenApi } from "../project/import-openapi/handler.js";
|
|
2
|
-
import { expect } from "chai";
|
|
3
|
-
import { describe, it, beforeEach, afterEach } from "node:test";
|
|
4
1
|
import fs from "node:fs/promises";
|
|
5
|
-
import { createSandbox } from "sinon";
|
|
6
2
|
import path from "node:path";
|
|
3
|
+
import { afterEach, beforeEach, describe, it } from "node:test";
|
|
7
4
|
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { expect } from "chai";
|
|
6
|
+
import { createSandbox } from "sinon";
|
|
7
|
+
import { importOpenApi } from "../project/import-openapi/handler.js";
|
|
8
8
|
import { baseRoutesFileOnImportTests } from "./oas-test-data.js";
|
|
9
9
|
const __filename = fileURLToPath(import.meta.url);
|
|
10
10
|
const __dirname = path.dirname(__filename);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-openapi.test.js","sourceRoot":"","sources":["../../src/__tests__/import-openapi.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { importOpenApi } from \"../project/import-openapi/handler.js\";\nimport { expect } from \"chai\";\nimport { describe, it, beforeEach, afterEach } from \"node:test\";\nimport fs from \"node:fs/promises\";\nimport { SinonSandbox, SinonStub, createSandbox } from \"sinon\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { baseRoutesFileOnImportTests } from \"./oas-test-data.js\";\nconst __filename = fileURLToPath(import.meta.url); // get the resolved path to the file\nconst __dirname = path.dirname(__filename); // get the name of the directory\n\nconst testAssetsPath = path.join(\n __dirname,\n \"..\",\n \"..\",\n \"src\",\n \"__tests__\",\n \"test-assets\"\n);\n\nconst testTmpPath = path.join(\n __dirname,\n \"..\",\n \"..\",\n \"src\",\n \"__tests__\",\n \"test-tmp\"\n);\n\nasync function createOASFile(content: string, destinationPath: string) {\n try {\n // Get the directory path of the file\n const dir = path.dirname(destinationPath);\n\n // Ensure that the directory exists (creates parent directories if necessary)\n await fs.mkdir(dir, { recursive: true });\n\n // Write the content to the file (creates the file if it doesn't exist)\n await fs.writeFile(destinationPath, content, \"utf8\");\n\n console.log(`File created successfully at ${destinationPath}`);\n } catch (error) {\n console.error(`Error creating file at ${destinationPath}:`, error);\n }\n}\n\nlet sandbox: SinonSandbox;\ndescribe(\"Import open api file\", async function () {\n let printExit: SinonStub;\n beforeEach(async function () {\n sandbox = createSandbox();\n // @NOTE - need to wrap this or else the cli code kills test run\n printExit = sandbox.stub(process, \"exit\");\n });\n\n afterEach(() => {\n sandbox.restore();\n });\n\n it(\"should merge two existing files correctly\", async function () {\n const destinationPath = path.join(\n testTmpPath,\n \"config\",\n \"routes-test-one.oas.json\"\n );\n // setup by creating the destination file first\n await createOASFile(\n JSON.stringify(baseRoutesFileOnImportTests),\n destinationPath\n );\n\n await importOpenApi({\n dir: testAssetsPath,\n prompt: false,\n source: path.join(testAssetsPath, \"toimport.oas.json\"),\n destination: destinationPath,\n \"source-url\": \"\",\n });\n\n const mergedContent = await fs.readFile(destinationPath, \"utf-8\");\n\n const jsonContent = JSON.parse(mergedContent);\n\n expect(jsonContent.paths).to.deep.equals({\n \"/v1/second/{userUid}/nature\": {\n post: {\n summary: \"Test route\",\n operationId: \"12345\",\n parameters: [\n {\n $ref: \"#/components/parameters/userUid\",\n },\n ],\n responses: {\n \"200\": {\n description: \"\",\n },\n },\n security: [{}],\n servers: [\n {\n url: \"https://api.stage.example.com\",\n description: \"stage\",\n },\n {\n url: \"https://api.example.com\",\n description: \"production\",\n },\n ],\n },\n },\n \"/v2/second/{userUid}/nature\": {\n post: {\n operationId: \"67920\",\n summary: \"Test route v2\",\n parameters: [\n {\n $ref: \"#/components/parameters/userUid\",\n },\n ],\n responses: {\n \"200\": {\n description: \"\",\n },\n },\n },\n },\n });\n });\n\n it(\"should import a file into a fs destination that does not yet exist\", async function () {\n const destinationPath = path.join(testTmpPath, \"routes-test-two.oas.json\");\n\n await importOpenApi({\n dir: testAssetsPath,\n prompt: false,\n source: path.join(testAssetsPath, \"toimport.oas.json\"),\n destination: destinationPath,\n \"source-url\": \"\",\n });\n\n const mergedContent = await fs.readFile(destinationPath, \"utf-8\");\n\n const jsonContent = JSON.parse(mergedContent);\n\n expect(jsonContent.info).to.deep.equals({\n version: \"v2\",\n title: \"Zuplo test API V2\",\n description: \"Test api v2\",\n contact: {\n name: \"Zuplo test\",\n url: \"www.zuplo.com\",\n },\n });\n\n expect(jsonContent.openapi).to.equal(\"3.1.0\");\n\n expect(jsonContent.components).to.deep.equals({\n parameters: {\n userUid: {\n name: \"userUid\",\n in: \"path\",\n description: \"Unique UUID of the user.\",\n required: true,\n schema: {\n type: \"string\",\n format: \"uuid\",\n },\n },\n },\n securitySchemes: {\n authorization: {\n type: \"http\",\n description: \"Firebase JWT auth token\",\n scheme: \"bearer\",\n },\n },\n });\n\n expect(jsonContent.servers).to.deep.equals([\n {\n url: \"https://api.stage.example.com\",\n description: \"Stage\",\n },\n {\n url: \"https://api.example.com\",\n description: \"Prod\",\n },\n ]);\n\n expect(jsonContent.security).to.deep.equals([{}]);\n\n expect(jsonContent.tags).to.deep.equals([]);\n\n expect(jsonContent.paths).to.deep.equals({\n \"/v2/second/{userUid}/nature\": {\n post: {\n summary: \"Test route v2\",\n operationId: \"67920\",\n parameters: [\n {\n $ref: \"#/components/parameters/userUid\",\n },\n ],\n responses: {\n \"200\": {\n description: \"\",\n },\n },\n },\n },\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"import-openapi.test.js","sourceRoot":"","sources":["../../src/__tests__/import-openapi.test.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { afterEach, beforeEach, describe, it } from \"node:test\";\nimport { fileURLToPath } from \"node:url\";\nimport { expect } from \"chai\";\nimport { SinonSandbox, SinonStub, createSandbox } from \"sinon\";\nimport { importOpenApi } from \"../project/import-openapi/handler.js\";\nimport { baseRoutesFileOnImportTests } from \"./oas-test-data.js\";\nconst __filename = fileURLToPath(import.meta.url); // get the resolved path to the file\nconst __dirname = path.dirname(__filename); // get the name of the directory\n\nconst testAssetsPath = path.join(\n __dirname,\n \"..\",\n \"..\",\n \"src\",\n \"__tests__\",\n \"test-assets\"\n);\n\nconst testTmpPath = path.join(\n __dirname,\n \"..\",\n \"..\",\n \"src\",\n \"__tests__\",\n \"test-tmp\"\n);\n\nasync function createOASFile(content: string, destinationPath: string) {\n try {\n // Get the directory path of the file\n const dir = path.dirname(destinationPath);\n\n // Ensure that the directory exists (creates parent directories if necessary)\n await fs.mkdir(dir, { recursive: true });\n\n // Write the content to the file (creates the file if it doesn't exist)\n await fs.writeFile(destinationPath, content, \"utf8\");\n\n console.log(`File created successfully at ${destinationPath}`);\n } catch (error) {\n console.error(`Error creating file at ${destinationPath}:`, error);\n }\n}\n\nlet sandbox: SinonSandbox;\ndescribe(\"Import open api file\", async function () {\n let printExit: SinonStub;\n beforeEach(async function () {\n sandbox = createSandbox();\n // @NOTE - need to wrap this or else the cli code kills test run\n printExit = sandbox.stub(process, \"exit\");\n });\n\n afterEach(() => {\n sandbox.restore();\n });\n\n it(\"should merge two existing files correctly\", async function () {\n const destinationPath = path.join(\n testTmpPath,\n \"config\",\n \"routes-test-one.oas.json\"\n );\n // setup by creating the destination file first\n await createOASFile(\n JSON.stringify(baseRoutesFileOnImportTests),\n destinationPath\n );\n\n await importOpenApi({\n dir: testAssetsPath,\n prompt: false,\n source: path.join(testAssetsPath, \"toimport.oas.json\"),\n destination: destinationPath,\n \"source-url\": \"\",\n });\n\n const mergedContent = await fs.readFile(destinationPath, \"utf-8\");\n\n const jsonContent = JSON.parse(mergedContent);\n\n expect(jsonContent.paths).to.deep.equals({\n \"/v1/second/{userUid}/nature\": {\n post: {\n summary: \"Test route\",\n operationId: \"12345\",\n parameters: [\n {\n $ref: \"#/components/parameters/userUid\",\n },\n ],\n responses: {\n \"200\": {\n description: \"\",\n },\n },\n security: [{}],\n servers: [\n {\n url: \"https://api.stage.example.com\",\n description: \"stage\",\n },\n {\n url: \"https://api.example.com\",\n description: \"production\",\n },\n ],\n },\n },\n \"/v2/second/{userUid}/nature\": {\n post: {\n operationId: \"67920\",\n summary: \"Test route v2\",\n parameters: [\n {\n $ref: \"#/components/parameters/userUid\",\n },\n ],\n responses: {\n \"200\": {\n description: \"\",\n },\n },\n },\n },\n });\n });\n\n it(\"should import a file into a fs destination that does not yet exist\", async function () {\n const destinationPath = path.join(testTmpPath, \"routes-test-two.oas.json\");\n\n await importOpenApi({\n dir: testAssetsPath,\n prompt: false,\n source: path.join(testAssetsPath, \"toimport.oas.json\"),\n destination: destinationPath,\n \"source-url\": \"\",\n });\n\n const mergedContent = await fs.readFile(destinationPath, \"utf-8\");\n\n const jsonContent = JSON.parse(mergedContent);\n\n expect(jsonContent.info).to.deep.equals({\n version: \"v2\",\n title: \"Zuplo test API V2\",\n description: \"Test api v2\",\n contact: {\n name: \"Zuplo test\",\n url: \"www.zuplo.com\",\n },\n });\n\n expect(jsonContent.openapi).to.equal(\"3.1.0\");\n\n expect(jsonContent.components).to.deep.equals({\n parameters: {\n userUid: {\n name: \"userUid\",\n in: \"path\",\n description: \"Unique UUID of the user.\",\n required: true,\n schema: {\n type: \"string\",\n format: \"uuid\",\n },\n },\n },\n securitySchemes: {\n authorization: {\n type: \"http\",\n description: \"Firebase JWT auth token\",\n scheme: \"bearer\",\n },\n },\n });\n\n expect(jsonContent.servers).to.deep.equals([\n {\n url: \"https://api.stage.example.com\",\n description: \"Stage\",\n },\n {\n url: \"https://api.example.com\",\n description: \"Prod\",\n },\n ]);\n\n expect(jsonContent.security).to.deep.equals([{}]);\n\n expect(jsonContent.tags).to.deep.equals([]);\n\n expect(jsonContent.paths).to.deep.equals({\n \"/v2/second/{userUid}/nature\": {\n post: {\n summary: \"Test route v2\",\n operationId: \"67920\",\n parameters: [\n {\n $ref: \"#/components/parameters/userUid\",\n },\n ],\n responses: {\n \"200\": {\n description: \"\",\n },\n },\n },\n },\n });\n });\n});\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { assert } from "chai";
|
|
2
1
|
import { rm, writeFile } from "node:fs/promises";
|
|
3
2
|
import { join } from "node:path";
|
|
4
3
|
import { beforeEach, describe, it } from "node:test";
|
|
4
|
+
import { assert } from "chai";
|
|
5
5
|
import { MockAgent, setGlobalDispatcher } from "undici";
|
|
6
6
|
import { ZUPLO_VERSION_CHECK_FILE } from "../common/constants.js";
|
|
7
7
|
import { warnIfOutdatedVersion } from "../common/outdated.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outdated.test.js","sourceRoot":"","sources":["../../src/__tests__/outdated.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"outdated.test.js","sourceRoot":"","sources":["../../src/__tests__/outdated.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,EAAE,wBAAwB,CAAC,CAAC;AAG9E,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,MAAM,CAAC;AAE/C,QAAQ,CAAC,oBAAoB,EAAE;IAC7B,IAAI,SAAoB,CAAC;IAEzB,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,SAAS,CAAC,iBAAiB,EAAE,CAAC;QAC9B,SAAS;aACN,GAAG,CAAC,mCAAmC,CAAC;aACxC,SAAS,CAAC;YACT,IAAI,EAAE,+CAA+C;YACrD,MAAM,EAAE,KAAK;SACd,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,IAAI,EAAE,OAAO;YACb,YAAY,EAAE;gBACZ,YAAY,EAAE,SAAS;aACxB;SACF,CAAC,CAAC;QAEL,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK;QACzC,MAAM,EAAE,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7D,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,oCAAoC,EAAE,KAAK;QAC5C,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,4CAA4C,EAAE,KAAK;QAGpD,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;QACzE,MAAM,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,mDAAmD,EAAE,KAAK;QAC3D,MAAM,KAAK,GAAG;YACZ,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG;YACjD,aAAa,EAAE,OAAO;SACvB,CAAC;QACF,MAAM,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,6BAA6B,EAAE,KAAK;QACrC,MAAM,SAAS,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-floating-promises */\n\nimport { 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\n// eslint-disable-next-line node/no-process-env\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"]}
|
|
@@ -4,22 +4,26 @@ import { TSConfigUpgrader } from "../common/upgraders/tsconfig-upgrader.js";
|
|
|
4
4
|
process.env.ZUPLO_OVERRIDE_CI_TO_TEST = "true";
|
|
5
5
|
describe("TSConfigUpgrader checks", async function () {
|
|
6
6
|
test("Should not run for a valid tsconfig.json", async function () {
|
|
7
|
-
const upgrader = new TSConfigUpgrader(new URL("../../test-fixtures-cli/tsconfig/valid", import.meta.url)
|
|
7
|
+
const upgrader = new TSConfigUpgrader(new URL("../../test-fixtures-cli/tsconfig/valid", import.meta.url)
|
|
8
|
+
.pathname);
|
|
8
9
|
const needsUpgrade = await upgrader.needsUpgrade();
|
|
9
10
|
assert.equal(needsUpgrade, false);
|
|
10
11
|
});
|
|
11
12
|
test("Should run for a legacy tsconfig.json", async function () {
|
|
12
|
-
const upgrader = new TSConfigUpgrader(new URL("../../test-fixtures-cli/tsconfig/legacy", import.meta.url)
|
|
13
|
+
const upgrader = new TSConfigUpgrader(new URL("../../test-fixtures-cli/tsconfig/legacy", import.meta.url)
|
|
14
|
+
.pathname);
|
|
13
15
|
const needsUpgrade = await upgrader.needsUpgrade();
|
|
14
16
|
assert.equal(needsUpgrade, true);
|
|
15
17
|
});
|
|
16
18
|
test("Should run for a missing prop tsconfig.json", async function () {
|
|
17
|
-
const upgrader = new TSConfigUpgrader(new URL("../../test-fixtures-cli/tsconfig/missing-prop", import.meta.url)
|
|
19
|
+
const upgrader = new TSConfigUpgrader(new URL("../../test-fixtures-cli/tsconfig/missing-prop", import.meta.url)
|
|
20
|
+
.pathname);
|
|
18
21
|
const needsUpgrade = await upgrader.needsUpgrade();
|
|
19
22
|
assert.equal(needsUpgrade, true);
|
|
20
23
|
});
|
|
21
24
|
test("Should run when baseUrl set in tsconfig.json", async function () {
|
|
22
|
-
const upgrader = new TSConfigUpgrader(new URL("../../test-fixtures-cli/tsconfig/missing-prop", import.meta.url)
|
|
25
|
+
const upgrader = new TSConfigUpgrader(new URL("../../test-fixtures-cli/tsconfig/missing-prop", import.meta.url)
|
|
26
|
+
.pathname);
|
|
23
27
|
const needsUpgrade = await upgrader.needsUpgrade();
|
|
24
28
|
assert.equal(needsUpgrade, true);
|
|
25
29
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tsconfig-upgrader.test.js","sourceRoot":"","sources":["../../src/__tests__/tsconfig-upgrader.test.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAG5E,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,MAAM,CAAC;AAE/C,QAAQ,CAAC,yBAAyB,EAAE,KAAK;IACvC,IAAI,CAAC,0CAA0C,EAAE,KAAK;QACpD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CACnC,IAAI,GAAG,
|
|
1
|
+
{"version":3,"file":"tsconfig-upgrader.test.js","sourceRoot":"","sources":["../../src/__tests__/tsconfig-upgrader.test.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAG5E,OAAO,CAAC,GAAG,CAAC,yBAAyB,GAAG,MAAM,CAAC;AAE/C,QAAQ,CAAC,yBAAyB,EAAE,KAAK;IACvC,IAAI,CAAC,0CAA0C,EAAE,KAAK;QACpD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CACnC,IAAI,GAAG,CAAC,wCAAwC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aAC/D,QAAQ,CACZ,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,uCAAuC,EAAE,KAAK;QACjD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CACnC,IAAI,GAAG,CAAC,yCAAyC,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aAChE,QAAQ,CACZ,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,6CAA6C,EAAE,KAAK;QACvD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CACnC,IAAI,GAAG,CAAC,+CAA+C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aACtE,QAAQ,CACZ,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,8CAA8C,EAAE,KAAK;QACxD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CACnC,IAAI,GAAG,CAAC,+CAA+C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;aACtE,QAAQ,CACZ,CAAC;QAEF,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-floating-promises */\nimport assert from \"node:assert\";\nimport { describe, test } from \"node:test\";\nimport { TSConfigUpgrader } from \"../common/upgraders/tsconfig-upgrader.js\";\n\n// eslint-disable-next-line node/no-process-env\nprocess.env.ZUPLO_OVERRIDE_CI_TO_TEST = \"true\";\n\ndescribe(\"TSConfigUpgrader checks\", async function () {\n test(\"Should not run for a valid tsconfig.json\", async function () {\n const upgrader = new TSConfigUpgrader(\n new URL(\"../../test-fixtures-cli/tsconfig/valid\", import.meta.url)\n .pathname\n );\n\n const needsUpgrade = await upgrader.needsUpgrade();\n assert.equal(needsUpgrade, false);\n });\n test(\"Should run for a legacy tsconfig.json\", async function () {\n const upgrader = new TSConfigUpgrader(\n new URL(\"../../test-fixtures-cli/tsconfig/legacy\", import.meta.url)\n .pathname\n );\n\n const needsUpgrade = await upgrader.needsUpgrade();\n assert.equal(needsUpgrade, true);\n });\n test(\"Should run for a missing prop tsconfig.json\", async function () {\n const upgrader = new TSConfigUpgrader(\n new URL(\"../../test-fixtures-cli/tsconfig/missing-prop\", import.meta.url)\n .pathname\n );\n\n const needsUpgrade = await upgrader.needsUpgrade();\n assert.equal(needsUpgrade, true);\n });\n test(\"Should run when baseUrl set in tsconfig.json\", async function () {\n const upgrader = new TSConfigUpgrader(\n new URL(\"../../test-fixtures-cli/tsconfig/missing-prop\", import.meta.url)\n .pathname\n );\n\n const needsUpgrade = await upgrader.needsUpgrade();\n assert.equal(needsUpgrade, true);\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/build/handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/build/handler.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,SAAS,iBAwB1C"}
|
package/dist/build/handler.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { build as runBuild } from "@zuplo/core/cli";
|
|
2
1
|
import { randomUUID } from "node:crypto";
|
|
3
2
|
import { join, relative, resolve } from "node:path";
|
|
3
|
+
import { build as runBuild } from "@zuplo/core/cli";
|
|
4
4
|
import { logger } from "../common/logger.js";
|
|
5
5
|
import { ConsoleOutput, printDiagnosticsToConsole } from "../common/output.js";
|
|
6
6
|
export async function build(argv) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/build/handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/build/handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,KAAK,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAO/E,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAe;IACzC,MAAM,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEzE,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC;IAEpD,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC;YAC5B,OAAO;YACP,MAAM,EAAE,IAAI,aAAa,EAAE;YAC3B,eAAe;YACf,OAAO,EAAE,OAAO;YAChB,MAAM;YACN,aAAa,EAAE,YAAY;SAC5B,CAAC,CAAC;QACH,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yBAAyB,CAAC,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;AACH,CAAC","sourcesContent":["/* eslint-disable node/no-process-env */\n\nimport { randomUUID } from \"node:crypto\";\nimport { join, relative, resolve } from \"node:path\";\nimport { build as runBuild } from \"@zuplo/core/cli\";\nimport { logger } from \"../common/logger.js\";\nimport { ConsoleOutput, printDiagnosticsToConsole } from \"../common/output.js\";\n\nexport interface Arguments {\n dir: string;\n customDomain?: string;\n}\n\nexport async function build(argv: Arguments) {\n const sourceDirectory = resolve(join(relative(process.cwd(), argv.dir)));\n\n const customDomain = argv.customDomain ?? undefined;\n\n const buildId = randomUUID();\n\n try {\n const result = await runBuild({\n buildId,\n output: new ConsoleOutput(),\n sourceDirectory,\n command: \"build\",\n logger,\n deploymentUrl: customDomain,\n });\n if (result.status === \"Failed\") {\n process.exit(1);\n } else {\n process.exit();\n }\n } catch (err) {\n printDiagnosticsToConsole(`Build error occurred: ${err.message}`);\n }\n}\n"]}
|
package/dist/cli.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as dotenv from "dotenv";
|
|
2
2
|
dotenv.config();
|
|
3
3
|
import undici from "undici";
|
|
4
|
-
import { confirm } from "@inquirer/prompts";
|
|
5
|
-
import * as Sentry from "@sentry/node";
|
|
6
4
|
import { readFileSync } from "node:fs";
|
|
7
5
|
import os from "node:os";
|
|
8
6
|
import { fileURLToPath } from "node:url";
|
|
7
|
+
import { confirm } from "@inquirer/prompts";
|
|
8
|
+
import * as Sentry from "@sentry/node";
|
|
9
9
|
import { gte } from "semver";
|
|
10
10
|
import { hideBin } from "yargs/helpers";
|
|
11
11
|
import yargs from "yargs/yargs";
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,MAAM,CAAC,MAAM,EAAE,CAAC;AAKhB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,
|
|
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\n// eslint-disable-next-line import/no-duplicates\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 convert from \"./cmds/convert.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 project from \"./cmds/project/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\";\n\n// This allows us to stop the CLI from executing so we can connect the profiler\n// eslint-disable-next-line node/no-process-env\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 \"The Zuplo CLI is not supported on Windows. We recommend using Windows Subsystem for Linux (WSL).\"\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 // eslint-disable-next-line node/no-process-env\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 .command(compile)\n .command(convert)\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(project)\n .command(tunnel)\n .command(variable)\n .command(build)\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"]}
|
package/dist/cmds/tunnel/list.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { captureEvent } from "../../common/analytics/lib.js";
|
|
2
|
+
import { authenticate } from "../../common/middleware/authentication.js";
|
|
2
3
|
import { configure } from "../../common/middleware/user-configuration.js";
|
|
3
4
|
import { identify } from "../../common/middleware/user-identification.js";
|
|
4
5
|
import setBlocking from "../../common/output.js";
|
|
5
6
|
import { list } from "../../tunnel/list/handler.js";
|
|
6
|
-
import { authenticate } from "../../common/middleware/authentication.js";
|
|
7
7
|
export default {
|
|
8
8
|
desc: "Lists the tunnels in your account",
|
|
9
9
|
command: "list",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cmds/tunnel/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAC1E,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAa,IAAI,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cmds/tunnel/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,+CAA+C,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAC1E,OAAO,WAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAa,IAAI,EAAE,MAAM,8BAA8B,CAAC;AAE/D,eAAe;IACb,IAAI,EAAE,mCAAmC;IACzC,OAAO,EAAE,MAAM;IACf,OAAO,EAAE,CAAC,KAAW,EAAiB,EAAE;QACtC,OAAO,KAAK;aACT,MAAM,CAAC,SAAS,EAAE;YACjB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,wBAAwB;YAClC,MAAM,EAAE,SAAS;SAClB,CAAC;aACD,YAAY,CAAC,CAAC,SAAS,CAAC,CAAC;aACzB,UAAU,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE,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,IAAI,CAAC,IAAiB,CAAC,CAAC;IAChC,CAAC;CACF,CAAC","sourcesContent":["import { Argv } from \"yargs\";\nimport { captureEvent } from \"../../common/analytics/lib.js\";\nimport { authenticate } from \"../../common/middleware/authentication.js\";\nimport { configure } from \"../../common/middleware/user-configuration.js\";\nimport { identify } from \"../../common/middleware/user-identification.js\";\nimport setBlocking from \"../../common/output.js\";\nimport { Arguments, list } from \"../../tunnel/list/handler.js\";\n\nexport default {\n desc: \"Lists the tunnels in your account\",\n command: \"list\",\n builder: (yargs: Argv): Argv<unknown> => {\n return yargs\n .option(\"api-key\", {\n type: \"string\",\n describe: \"The API Key from Zuplo\",\n envVar: \"API_KEY\",\n })\n .demandOption([\"api-key\"])\n .middleware([setBlocking, authenticate, configure, identify]);\n },\n handler: async (argv: unknown) => {\n await captureEvent({ argv, event: \"zuplo tunnel list\" });\n await list(argv as Arguments);\n },\n};\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { parse } from "jsonc-parser";
|
|
2
1
|
import { existsSync } from "node:fs";
|
|
3
2
|
import { readFile } from "node:fs/promises";
|
|
4
3
|
import { join, relative } from "node:path";
|
|
4
|
+
import { parse } from "jsonc-parser";
|
|
5
5
|
import { ZUPLO_FALLBACK_JSON_FILE, ZUPLO_PREFERRED_JSON_FILE, } from "../constants.js";
|
|
6
6
|
import { logger } from "../logger.js";
|
|
7
7
|
import { printCriticalFailureToConsoleAndExit } from "../output.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-configuration.js","sourceRoot":"","sources":["../../../src/common/middleware/user-configuration.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"user-configuration.js","sourceRoot":"","sources":["../../../src/common/middleware/user-configuration.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { join, relative } from \"node:path\";\nimport { ParseError, parse } from \"jsonc-parser\";\nimport {\n ZUPLO_FALLBACK_JSON_FILE,\n ZUPLO_PREFERRED_JSON_FILE,\n} from \"../constants.js\";\nimport { logger } from \"../logger.js\";\nimport { printCriticalFailureToConsoleAndExit } from \"../output.js\";\nimport settings from \"../settings.js\";\n\n/**\n * This is the middleware to set the context for the CLI calls.\n *\n * It can be used to set sensible configurations such as account and project that are gotten from the API, zuplo.jsonc, --parameters\n *\n * The order of setting a configuration is\n * 1. API key\n * 2. zuplo.jsonc\n * 3. --parameters from the CLI invocation\n *\n * Note that --parameters objects can also come from .env file because of https://yargs.js.org/docs/#api-reference-envprefix\n *\n * @param argv - The yargs object\n */\nexport async function configure(argv: { [key: string]: unknown }) {\n // Clone the original value (for merging at the end)\n // The original is the most specific since it can only contain things from --parameters\n // It will always be applied last to override anything from zuplo.jsonc or the API key\n const cliParametersConfiguration = { ...argv };\n\n // Make a call to the API key\n const whoAmIResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/who-am-i`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${argv.authToken}`,\n },\n }\n );\n\n if (whoAmIResponse.ok) {\n // Note that the algorithms below are based on \"addition\"\n // You cannot unset/remove a value from the configuration by setting it to null/undefined\n // Do be mindful of parameters that might be the same value since things might be overridden\n\n // Merge any non-null values from the API key\n const apiKeyMetadata = await whoAmIResponse.json();\n Object.assign(argv, omitNull(apiKeyMetadata));\n\n // Merge any non-null values from zuplo.jsonc\n // For now, only merge project since zuplo.jsonc could have many keys that might conflict\n const { project: zuploJsoncProject } = await processZuploConfigurationFile(\n argv.dir as string | undefined\n );\n if (zuploJsoncProject) {\n argv.project = zuploJsoncProject;\n }\n\n // Merge any non-null values from --parameters\n Object.assign(argv, cliParametersConfiguration);\n } else {\n logger.trace(\n { status: whoAmIResponse.status, statusText: whoAmIResponse.statusText },\n \"Failed to determine who-am-i\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to validate the API key. Check your API key.\"\n );\n }\n}\n\nasync function processZuploConfigurationFile(\n sourceDirectory: string | undefined\n) {\n const normalizedDir = join(relative(process.cwd(), sourceDirectory ?? \".\"));\n const preferredPath = join(normalizedDir, ZUPLO_PREFERRED_JSON_FILE);\n const fallbackPath = join(normalizedDir, ZUPLO_FALLBACK_JSON_FILE);\n let fileContents = \"{}\";\n if (existsSync(preferredPath)) {\n fileContents = await readFile(preferredPath, \"utf-8\");\n } else if (existsSync(fallbackPath)) {\n fileContents = await readFile(fallbackPath, \"utf-8\");\n } else {\n logger.trace(\"No zuplo.jsonc file found\");\n return {};\n }\n\n // If we get here, we have a zuplo.jsonc (or, zuplo.json) file\n // That means we should report any issues with it.\n const errors: ParseError[] = [];\n const data = parse(fileContents, errors, { allowTrailingComma: true });\n if (errors.length > 0) {\n logger.trace(errors[0], \"Failed to parse zuplo.jsonc\");\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to parse the values from zuplo.jsonc. Check your zuplo.jsonc file.\"\n );\n }\n return data;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst omitNull = (obj: any) => {\n Object.keys(obj)\n .filter((k) => obj[k] === null)\n .forEach((k) => delete obj[k]);\n return obj;\n};\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import * as Sentry from "@sentry/node";
|
|
2
|
-
import * as jose from "jose";
|
|
3
1
|
import { readFile } from "node:fs/promises";
|
|
4
2
|
import { join } from "node:path";
|
|
3
|
+
import * as Sentry from "@sentry/node";
|
|
4
|
+
import * as jose from "jose";
|
|
5
5
|
import { ZUPLO_AUTH_FILE_NAME } from "../constants.js";
|
|
6
6
|
import { logger } from "../logger.js";
|
|
7
7
|
import { machineId } from "../machine-id/lib.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-identification.js","sourceRoot":"","sources":["../../../src/common/middleware/user-identification.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"user-identification.js","sourceRoot":"","sources":["../../../src/common/middleware/user-identification.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAgC;IAG7D,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC1E,CAAC;SAAM,CAAC;QAEN,IAAI,MAAM,CAAC;QAGX,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAC5B,IAAI,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,EAChD,OAAO,CACR,CAAC;YACF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACtD,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YAEP,MAAM,GAAG,SAAS,EAAE,CAAC;QACvB,CAAC;QAID,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;QAEpC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,GAAG,MAAM,CAAC;IACjC,CAAC;AACH,CAAC","sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport * as Sentry from \"@sentry/node\";\nimport * as jose from \"jose\";\nimport { ZUPLO_AUTH_FILE_NAME } from \"../constants.js\";\nimport { logger } from \"../logger.js\";\nimport { machineId } from \"../machine-id/lib.js\";\nimport { ZUPLO_XDG_STATE_HOME } from \"../xdg/lib.js\";\n\nexport async function identify(argv: { [key: string]: unknown }) {\n // 0. Respect GDPR and allow user to stop-tracking\n // eslint-disable-next-line node/no-process-env\n if (process.env.ZUPLO_DO_NOT_TRACK) {\n logger.trace(\"Sentry traces will be sent without user identification.\");\n } else {\n // We will supplement any Sentry errors with user information\n let userId;\n\n // 1. Read from the result of `zuplo link` (if it exists)\n try {\n const rawAuth = await readFile(\n join(ZUPLO_XDG_STATE_HOME, ZUPLO_AUTH_FILE_NAME),\n \"utf-8\"\n );\n const authJson = JSON.parse(rawAuth);\n const decoded = jose.decodeJwt(authJson.access_token);\n userId = decoded.sub;\n } catch {\n // 2. Else generate an id from the machine\n userId = machineId();\n }\n\n // 4. Add information to sentry\n // 4a. Always use the machine id as the primary id so that we can relate events when the user is logged in or logged out\n Sentry.setUser({ id: machineId() });\n // 4b. If we have more information about the identity of the user, we can add it as tags\n Sentry.setTag(\"user-id\", userId);\n if (argv.account && typeof argv.account === \"string\") {\n Sentry.setTag(\"account\", argv.account);\n }\n if (argv.project && typeof argv.project === \"string\") {\n Sentry.setTag(\"project\", argv.project);\n }\n // 5. Now that we have identified the user, set it in argv for others to use\n argv[\"zuplo-user-id\"] = userId;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outdated.d.ts","sourceRoot":"","sources":["../../src/common/outdated.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"outdated.d.ts","sourceRoot":"","sources":["../../src/common/outdated.ts"],"names":[],"mappings":"AAgBA,wBAAsB,eAAe,CACnC,iBAAiB,EAAE,MAAM,EACzB,kBAAkB,EAAE,MAAM,iBAY3B;AAED,wBAAsB,qBAAqB,CAAC,cAAc,EAAE,MAAM,oBAyBjE"}
|
package/dist/common/outdated.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import chalk from "chalk";
|
|
2
1
|
import { existsSync, mkdirSync } from "node:fs";
|
|
3
2
|
import { readFile, writeFile } from "node:fs/promises";
|
|
4
3
|
import { join } from "node:path";
|
|
4
|
+
import chalk from "chalk";
|
|
5
5
|
import { gt, inc, lt } from "semver";
|
|
6
6
|
import { ZUPLO_VERSION_CHECK_FILE } from "./constants.js";
|
|
7
7
|
import { printWarningToConsole } from "./output.js";
|