@zuplo/cli 6.9.0 → 6.10.1
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__/engine.test.js.map +1 -1
- package/dist/convert/engine.d.ts +3 -3
- package/dist/convert/engine.d.ts.map +1 -1
- package/dist/convert/engine.js.map +1 -1
- package/dist/convert/handler.js.map +1 -1
- package/dist/convert/{routes.generated.d.ts → routes.legacy.d.ts} +1 -1
- package/dist/convert/routes.legacy.d.ts.map +1 -0
- package/dist/convert/routes.legacy.js +2 -0
- package/dist/convert/routes.legacy.js.map +1 -0
- package/dist/deploy/handler.d.ts +0 -1
- package/dist/deploy/handler.d.ts.map +1 -1
- package/dist/deploy/handler.js +5 -4
- package/dist/deploy/handler.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/dist/convert/routes.generated.d.ts.map +0 -1
- package/dist/convert/routes.generated.js +0 -2
- package/dist/convert/routes.generated.js.map +0 -1
|
@@ -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.generated.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 */\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"]}
|
package/dist/convert/engine.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RouteConfigFile } from "./routes.
|
|
1
|
+
import { RouteConfigFile } from "./routes.legacy.js";
|
|
2
2
|
export declare function convertRoutes(routesConfig: RouteConfigFile): {
|
|
3
3
|
openapi: string;
|
|
4
4
|
info: {
|
|
@@ -8,7 +8,7 @@ export declare function convertRoutes(routesConfig: RouteConfigFile): {
|
|
|
8
8
|
paths: {};
|
|
9
9
|
};
|
|
10
10
|
export declare function convertPolicies(routes: RouteConfigFile): {
|
|
11
|
-
policies: import("./routes.
|
|
12
|
-
corsPolicies: import("./routes.
|
|
11
|
+
policies: import("./routes.legacy.js").PolicyConfigurationFragment[];
|
|
12
|
+
corsPolicies: import("./routes.legacy.js").CorsPolicyConfiguration[];
|
|
13
13
|
};
|
|
14
14
|
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/convert/engine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/convert/engine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,wBAAgB,aAAa,CAAC,YAAY,EAAE,eAAe;;;;;;;EA8D1D;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe;;;EAQtD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/convert/engine.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { join } from \"node:path\";\nimport { RouteConfigFile } from \"./routes.
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/convert/engine.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { join } from \"node:path\";\nimport { RouteConfigFile } from \"./routes.legacy.js\";\n\nexport function convertRoutes(routesConfig: RouteConfigFile) {\n const base = generateBaseOpenAPIConfig();\n const paths = base.paths as any;\n\n routesConfig.routes.forEach((route) => {\n const pathObjectKey = fullPath(route, routesConfig);\n\n let pathObject: any;\n if (!paths[pathObjectKey]) {\n pathObject = {} as any;\n // Default the path to url-pattern\n pathObject[\"x-zuplo-path\"] = {\n pathMode: \"url-pattern\",\n };\n paths[pathObjectKey] = pathObject;\n }\n\n pathObject = paths[pathObjectKey];\n\n const operationKey = route.methods.map((m) => m.toLowerCase()).join(\",\");\n const operation = {} as any;\n\n if (route.excludeFromOpenApi) {\n operation[\"x-internal\"] = true;\n }\n\n operation[\"summary\"] = route.summary;\n operation[\"description\"] = route.description;\n operation[\"operationId\"] = route.operationId;\n\n // Support for openapi types we supported for a short time\n // for a while that some customers are actually using\n const routeWithOpenApi = route as {\n responses?: any;\n parameters?: any;\n tags?: any;\n };\n if (routeWithOpenApi.parameters) {\n operation[\"parameters\"] = routeWithOpenApi.parameters;\n }\n if (routeWithOpenApi.responses) {\n operation[\"responses\"] = routeWithOpenApi.responses;\n }\n if (routeWithOpenApi.tags) {\n operation[\"tags\"] = routeWithOpenApi.tags;\n }\n\n const xZuploRoute = {} as any;\n if (route.corsPolicy) xZuploRoute[\"corsPolicy\"] = route.corsPolicy;\n if (route.custom) xZuploRoute[\"custom\"] = route.custom;\n if (route.policies) xZuploRoute[\"policies\"] = route.policies;\n if (route.key) xZuploRoute[\"key\"] = route.key;\n if (route.label) xZuploRoute[\"label\"] = route.label;\n\n xZuploRoute[\"handler\"] = route.handler;\n\n operation[\"x-zuplo-route\"] = xZuploRoute;\n\n pathObject[operationKey] = operation;\n });\n\n return base;\n}\n\nexport function convertPolicies(routes: RouteConfigFile) {\n const policies = routes.policies;\n const corsPolicies = routes.corsPolicies;\n\n return {\n policies: policies ? [...policies] : [],\n corsPolicies: corsPolicies ? [...corsPolicies] : [],\n };\n}\n\n// Utilities\n////////////\n\nfunction generateBaseOpenAPIConfig() {\n return {\n openapi: \"3.1.0\",\n info: {\n title: \"Converted from config/routes.json\",\n version: \"1.0.0\",\n },\n paths: {},\n };\n}\n\nfunction fullPath(\n path: { path: string; version: string },\n context: RouteConfigFile\n) {\n const versionPrefix = context.versions.filter(\n (v) => v.name === path.version\n )[0].pathPrefix;\n return join(versionPrefix, path.path);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/convert/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,oCAAoC,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAO7D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAe;IAC3C,IAAI,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAC9B,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,aAAa,CAAC,CAC7C,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAoB,CAAC;QAGnE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAGtC,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACzE,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;YACtE,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAC;QACH,aAAa,CAAC,eAAe,EAAE,gBAAgB,EAAE;YAC/C,IAAI,EAAE,GAAG;SACV,CAAC,CAAC;QAGH,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAGzC,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QACxE,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YACxE,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAC;QACH,aAAa,CAAC,gBAAgB,EAAE,iBAAiB,EAAE;YACjD,IAAI,EAAE,GAAG;SACV,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClB,MAAM,oCAAoC,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;AACH,CAAC","sourcesContent":["import { writeFileSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { join, relative } from \"node:path\";\nimport prettier from \"prettier\";\nimport { logger } from \"../common/logger.js\";\nimport { printCriticalFailureToConsoleAndExit } from \"../common/output.js\";\nimport { convertPolicies, convertRoutes } from \"./engine.js\";\nimport { RouteConfigFile } from \"./routes.
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/convert/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,oCAAoC,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAO7D,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAe;IAC3C,IAAI,CAAC;QAEH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAC9B,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,aAAa,CAAC,CAC7C,CAAC;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAoB,CAAC;QAGnE,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;QAGtC,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,iBAAiB,CAAC,CAAC;QACzE,MAAM,gBAAgB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;YACtE,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAC;QACH,aAAa,CAAC,eAAe,EAAE,gBAAgB,EAAE;YAC/C,IAAI,EAAE,GAAG;SACV,CAAC,CAAC;QAGH,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAGzC,MAAM,gBAAgB,GAAG,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;QACxE,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;YACxE,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAC;QACH,aAAa,CAAC,gBAAgB,EAAE,iBAAiB,EAAE;YACjD,IAAI,EAAE,GAAG;SACV,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClB,MAAM,oCAAoC,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;AACH,CAAC","sourcesContent":["import { writeFileSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { join, relative } from \"node:path\";\nimport prettier from \"prettier\";\nimport { logger } from \"../common/logger.js\";\nimport { printCriticalFailureToConsoleAndExit } from \"../common/output.js\";\nimport { convertPolicies, convertRoutes } from \"./engine.js\";\nimport { RouteConfigFile } from \"./routes.legacy.js\";\n\nexport interface Arguments {\n dir: string;\n}\n\nexport async function convert(argv: Arguments) {\n try {\n // 1. Read the routes.json\n const dir = argv.dir;\n const normalizedDir = join(relative(process.cwd(), dir));\n const rawRoutes = await readFile(\n join(normalizedDir, \"config\", \"routes.json\")\n );\n const routes = JSON.parse(rawRoutes.toString()) as RouteConfigFile;\n\n // 2. Convert to OpenAPI\n const openApi = convertRoutes(routes);\n\n // 3. Write to routes.oas.json\n const openAPIFilePath = join(normalizedDir, \"config\", \"routes.oas.json\");\n const formattedOpenAPI = await prettier.format(JSON.stringify(openApi), {\n parser: \"json-stringify\",\n });\n writeFileSync(openAPIFilePath, formattedOpenAPI, {\n flag: \"w\",\n });\n\n // 4. Extract policies\n const policies = convertPolicies(routes);\n\n // 5. Write policies\n const policiesFilePath = join(normalizedDir, \"config\", \"policies.json\");\n const formattedPolicies = await prettier.format(JSON.stringify(policies), {\n parser: \"json-stringify\",\n });\n writeFileSync(policiesFilePath, formattedPolicies, {\n flag: \"w\",\n });\n } catch (err) {\n logger.error(err);\n await printCriticalFailureToConsoleAndExit(err);\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.legacy.d.ts","sourceRoot":"","sources":["../../src/convert/routes.legacy.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IAIjB,QAAQ,EAAE,CAAC,WAAW,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC;IAI1C,MAAM,EAAE,0BAA0B,EAAE,CAAC;IACrC,QAAQ,CAAC,EAAE,2BAA2B,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACzC,mBAAmB,CAAC,EAAE,iBAAiB,CAAC;CACzC;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,CAAC;IAIZ,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAI7B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAMD,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAMD,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CACL,KAAK,GACL,MAAM,GACN,MAAM,GACN,KAAK,GACL,QAAQ,GACR,SAAS,GACT,SAAS,GACT,OAAO,GACP,OAAO,CACV,EAAE,CAAC;IAIJ,KAAK,CAAC,EAAE,MAAM,CAAC;IAIf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAMD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QACR,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACtB,CAAC;CACH;AAMD,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE;QACR,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACtB,CAAC;CACH;AAMD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,CACb,KAAK,GACL,MAAM,GACN,MAAM,GACN,KAAK,GACL,QAAQ,GACR,SAAS,GACT,SAAS,GACT,OAAO,GACP,OAAO,CACV,EAAE,CAAC;IACJ,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.legacy.js","sourceRoot":"","sources":["../../src/convert/routes.legacy.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * @deprecated This is the legacy route.json format, it should only be\n * used for conversion purposes.\n */\nexport interface RouteConfigFile {\n $schema?: string;\n /**\n * @minItems 1\n */\n versions: [VersionData, ...VersionData[]];\n /**\n * @minItems 0\n */\n routes: RouteConfigurationFragment[];\n policies?: PolicyConfigurationFragment[];\n corsPolicies?: CorsPolicyConfiguration[];\n requestErrorHandler?: HandlerDefinition;\n}\n\n/**\n * @deprecated This is the legacy route.json format, it should only be\n * used for conversion purposes.\n */\nexport interface VersionData {\n name: string;\n pathPrefix: string;\n info?: Info;\n /**\n * The project relative path to the OpenAPI spec.\n */\n openApiFile?: string;\n /**\n * If false, OpenAPI documentation will not be generated for this version. If openApiFile is set this setting is ignored.\n */\n excludeFromOpenApi?: boolean;\n /**\n * If true, schema validation found in the OpenAPI spec will be enforced on requests/responses.\n */\n enforceOpenApi?: boolean;\n}\n\n/**\n * @deprecated This is the legacy route.json format, it should only be\n * used for conversion purposes.\n */\nexport interface Info {\n title: string;\n summary?: string;\n description?: string;\n termsOfService?: string;\n version: string;\n [k: string]: unknown;\n}\n\n/**\n * @deprecated This is the legacy route.json format, it should only be\n * used for conversion purposes.\n */\nexport interface RouteConfigurationFragment {\n operationId?: string;\n path: string;\n methods: (\n | \"GET\"\n | \"HEAD\"\n | \"POST\"\n | \"PUT\"\n | \"DELETE\"\n | \"CONNECT\"\n | \"OPTIONS\"\n | \"TRACE\"\n | \"PATCH\"\n )[];\n /**\n * An internal user-friendly identifier of the route.\n */\n label?: string;\n /**\n * If true, schema validation found in the OpenAPI spec will be enforced on requests/responses.\n */\n enforceOpenApi?: boolean;\n key?: string;\n handler: HandlerDefinition;\n corsPolicy?: string;\n custom?: unknown;\n version: string;\n policies?: {\n inbound?: string[];\n outbound?: string[];\n };\n summary?: string;\n description?: string;\n excludeFromOpenApi?: boolean;\n tags?: string[];\n}\n\n/**\n * @deprecated This is the legacy route.json format, it should only be\n * used for conversion purposes.\n */\nexport interface HandlerDefinition {\n module: string;\n export: string;\n options?: {\n [k: string]: unknown;\n };\n}\n\n/**\n * @deprecated This is the legacy route.json format, it should only be\n * used for conversion purposes.\n */\nexport interface PolicyConfigurationFragment {\n name: string;\n policyType: string;\n handler: HandlerDefinition;\n options?: {\n [k: string]: unknown;\n };\n}\n\n/**\n * @deprecated This is the legacy route.json format, it should only be\n * used for conversion purposes.\n */\nexport interface CorsPolicyConfiguration {\n name: string;\n allowCredentials?: boolean;\n maxAge?: number;\n allowedOrigins: string[];\n allowedMethods?: (\n | \"GET\"\n | \"HEAD\"\n | \"POST\"\n | \"PUT\"\n | \"DELETE\"\n | \"CONNECT\"\n | \"OPTIONS\"\n | \"TRACE\"\n | \"PATCH\"\n )[];\n allowedHeaders?: string[];\n exposeHeaders?: string[];\n}\n"]}
|
package/dist/deploy/handler.d.ts
CHANGED
|
@@ -11,5 +11,4 @@ export interface Arguments {
|
|
|
11
11
|
}
|
|
12
12
|
export type SelfHostedArgs = RequiredProperties<Arguments, "self-hosted-endpoint">;
|
|
13
13
|
export declare function deploy(argv: Arguments): Promise<void>;
|
|
14
|
-
export declare const getPrettyBranch: (branch: string) => string;
|
|
15
14
|
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/deploy/handler.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAW9D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAC7C,SAAS,EACT,sBAAsB,CACvB,CAAC;AAEF,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,iBAO3C
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/deploy/handler.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAW9D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,MAAM,cAAc,GAAG,kBAAkB,CAC7C,SAAS,EACT,sBAAsB,CACvB,CAAC;AAEF,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,iBAO3C"}
|
package/dist/deploy/handler.js
CHANGED
|
@@ -5,11 +5,11 @@ import { logger } from "../common/logger.js";
|
|
|
5
5
|
import { printCriticalFailureToConsoleAndExit, printDiagnosticsToConsole, printResultToConsoleAndExitGracefully, printWarningToConsole, } from "../common/output.js";
|
|
6
6
|
import settings from "../common/settings.js";
|
|
7
7
|
import { normalizeUrl } from "../common/utils/urls.js";
|
|
8
|
-
import {
|
|
8
|
+
import { pullSystemConfig } from "../link/populate.js";
|
|
9
|
+
import { archive, ARCHIVE_EXTENSION, generateMetadata } from "./archive.js";
|
|
10
|
+
import { retrieveOrCreateEnvironment, UnableToAutoLinkToExistingProject, } from "./environments.js";
|
|
9
11
|
import { upload } from "./file-upload.js";
|
|
10
12
|
import { pollBuild, pollDeployment } from "./poll-deployment.js";
|
|
11
|
-
import { retrieveOrCreateEnvironment, UnableToAutoLinkToExistingProject, } from "./environments.js";
|
|
12
|
-
import { pullSystemConfig } from "../link/populate.js";
|
|
13
13
|
export async function deploy(argv) {
|
|
14
14
|
if (argv["self-hosted-endpoint"]) {
|
|
15
15
|
const args = argv;
|
|
@@ -158,13 +158,14 @@ function restoreExistingZuploEnvAsNecessary(argv, originalValue) {
|
|
|
158
158
|
writeFileSync(envFilePath, originalValue);
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
|
-
|
|
161
|
+
const getPrettyBranch = (branch) => {
|
|
162
162
|
return (branch
|
|
163
163
|
.normalize("NFD")
|
|
164
164
|
.replace(/[\u0300-\u036f]/g, "")
|
|
165
165
|
.replace(/([^\w]+|\s+)/g, "-")
|
|
166
166
|
.replace(/\-\-+/g, "-")
|
|
167
167
|
.replace(/(^-+|-+$)/, "")
|
|
168
|
+
.replaceAll("_", "-")
|
|
168
169
|
.toLowerCase()
|
|
169
170
|
.substring(0, MAX_PRETTY_BRANCH_LENGTH));
|
|
170
171
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/deploy/handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, parse, relative } from \"node:path\";\nimport {\n MAX_PRETTY_BRANCH_NAME as MAX_PRETTY_BRANCH_LENGTH,\n ZUPLO_SYSTEM_ENV_VAR,\n} from \"../common/constants.js\";\nimport { logger } from \"../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printDiagnosticsToConsole,\n printResultToConsoleAndExitGracefully,\n printWarningToConsole,\n} from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { RequiredProperties } from \"../common/utils/types.js\";\nimport { normalizeUrl } from \"../common/utils/urls.js\";\nimport { ARCHIVE_EXTENSION, archive, generateMetadata } from \"./archive.js\";\nimport { upload } from \"./file-upload.js\";\nimport { pollBuild, pollDeployment } from \"./poll-deployment.js\";\nimport {\n retrieveOrCreateEnvironment,\n UnableToAutoLinkToExistingProject,\n} from \"./environments.js\";\nimport { pullSystemConfig } from \"../link/populate.js\";\n\nexport interface Arguments {\n account: string;\n project: string;\n dir: string;\n environment?: string;\n \"api-key\": string;\n \"verify-remote\": boolean;\n \"self-hosted-endpoint\"?: string;\n \"override-repo-url\"?: string;\n}\n\nexport type SelfHostedArgs = RequiredProperties<\n Arguments,\n \"self-hosted-endpoint\"\n>;\n\nexport async function deploy(argv: Arguments) {\n if (argv[\"self-hosted-endpoint\"]) {\n const args = argv as SelfHostedArgs;\n await deployToSelfHosted(args);\n } else {\n await deployToSaas(argv);\n }\n}\n\nasync function deployToSaas(argv: Arguments) {\n // 1. Create the tarball locally\n const archiveMetadata = await archive(argv);\n logger.debug(`Tarball created locally at ${archiveMetadata}`);\n\n // 2. Build uploadUrl request\n const { account, project } = argv;\n const uploadUrlResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/deployments/sources`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n body: JSON.stringify({\n accountName: account,\n projectName: project,\n branchName: archiveMetadata.metadata.branch,\n }),\n }\n );\n\n if (uploadUrlResponse.ok) {\n // 3. Upload to request URL\n const { uploadUrl } = await uploadUrlResponse.json();\n const uploadResponse = await upload(archiveMetadata.tarball, uploadUrl);\n\n if (uploadResponse.ok) {\n printDiagnosticsToConsole(\n `Deploying the current branch ${archiveMetadata.metadata.branch} to project ${project} on account ${account}...`\n );\n\n // 5. Poll for status\n const fileId = parse(new URL(uploadUrl).pathname).base.replace(\n ARCHIVE_EXTENSION,\n \"\"\n );\n const { url, steps, buildResult } = await pollDeployment(\n argv,\n fileId,\n account,\n project\n );\n if (url) {\n await printResultToConsoleAndExitGracefully(`Deployed to ${url}`);\n } else {\n const diagnostics = buildResult ?? steps;\n await printCriticalFailureToConsoleAndExit(\n `Failed to deploy the current branch ${\n archiveMetadata.metadata.branch\n } to project ${project} on account ${account}. Here's the diagnostics: ${JSON.stringify(\n diagnostics,\n null,\n 2\n )}`\n );\n }\n } else {\n logger.error(\n {\n status: uploadResponse.status,\n statusText: uploadResponse.statusText,\n },\n \"Failed to upload source to cloud storage\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to upload source to cloud storage. Try again later.\"\n );\n }\n } else {\n logger.error(\n {\n status: uploadUrlResponse.status,\n statusText: uploadUrlResponse.statusText,\n },\n \"Failed to retrieve uploadUrl\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to determine where to upload your files. Try again later.\"\n );\n }\n}\n\nasync function deployToSelfHosted(argv: SelfHostedArgs) {\n const { account, project } = argv;\n\n let existingZuploEnv: string | undefined;\n\n try {\n // 0. Finagle the URL first\n const endpoint = normalizeUrl(argv[\"self-hosted-endpoint\"]);\n\n // 1. Perform the link on-behalf-of-the-user\n // Store the current .env.zuplo if there is one and restore it later\n existingZuploEnv = retrieveExistingZuploEnv(argv);\n const branch = (await generateMetadata(argv)).branch;\n try {\n const environmentToAutoLink = await retrieveOrCreateEnvironment(\n branch,\n argv\n );\n await pullSystemConfig({\n dir: argv.dir,\n environment: environmentToAutoLink.name,\n \"api-key\": argv[\"api-key\"],\n });\n } catch (error) {\n if (error instanceof UnableToAutoLinkToExistingProject) {\n printWarningToConsole(\n `We are unable to fetch the environment variables from Zuplo for this project. \n Deployment will proceed but the environment variables will not be available. \n To fix this, check that the project, ${argv.project} exists and this api-key has access to it.`\n );\n } else {\n throw error;\n }\n }\n\n // 2. Create the tarball locally\n const archiveMetadata = await archive(argv);\n logger.debug(`Tarball created locally at ${archiveMetadata}`);\n\n // 3. Build uploadUrl request\n const form = new FormData();\n const deploymentName = `${project}-${getPrettyBranch(\n archiveMetadata.metadata.branch\n )}`;\n form.set(\n \"file\",\n new Blob([readFileSync(archiveMetadata.tarball)], {\n type: \"application/gzip\",\n })\n );\n form.set(\"projectName\", project);\n form.set(\"deploymentName\", deploymentName);\n\n const uploadUrlResponse = await fetch(`${endpoint}/v1/deployments/build`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n body: form,\n });\n\n if (uploadUrlResponse.ok) {\n printDiagnosticsToConsole(\n `Deploying the current branch ${archiveMetadata.metadata.branch} to project ${project} on account ${account}...`\n );\n\n // 4. Poll for build\n const { buildName } = await uploadUrlResponse.json();\n const buildResult = await pollBuild(argv, endpoint, buildName);\n\n if (buildResult.conditionType === \"Complete\") {\n // Retrieve the deployment\n const deploymentResponse = await fetch(\n `${endpoint}/v1/deployments/${deploymentName}`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n }\n );\n const deploymentJSON: { deploymentUrl: string } =\n await deploymentResponse.json();\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n await printResultToConsoleAndExitGracefully(\n `Deployed to ${deploymentJSON.deploymentUrl}`\n );\n } else {\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n await printCriticalFailureToConsoleAndExit(\n `Failed to deploy the current environment. Here's the diagnostics: ${JSON.stringify(\n buildResult\n )}`\n );\n }\n } else {\n logger.error(\n await uploadUrlResponse.text(),\n \"Failed to upload to self-hosted build endpoint\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to upload to self-hosted build endpoint\"\n );\n }\n } catch (error) {\n logger.error(error);\n } finally {\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n }\n}\n\nfunction retrieveExistingZuploEnv(argv: SelfHostedArgs): string | undefined {\n const dir = argv.dir;\n const normalizedDir = join(relative(process.cwd(), dir));\n const envFilePath = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n if (existsSync(envFilePath)) {\n const envFileContent = readFileSync(envFilePath, \"utf-8\");\n return envFileContent;\n } else {\n return undefined;\n }\n}\n\nfunction restoreExistingZuploEnvAsNecessary(\n argv: SelfHostedArgs,\n originalValue: string | undefined\n) {\n if (originalValue) {\n const dir = argv.dir;\n const normalizedDir = join(relative(process.cwd(), dir));\n const envFilePath = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n writeFileSync(envFilePath, originalValue);\n }\n}\n\nexport const getPrettyBranch = (branch: string): string => {\n // https://ricardometring.com/javascript-replace-special-characters\n return (\n branch\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\") // Remove accents\n .replace(/([^\\w]+|\\s+)/g, \"-\") // Replace space and other characters by hyphen\n // eslint-disable-next-line no-useless-escape\n .replace(/\\-\\-+/g, \"-\") // Replaces multiple hyphens by one hyphen\n .replace(/(^-+|-+$)/, \"\") // Remove extra hyphens from beginning or end of the string\n .toLowerCase()\n .substring(0, MAX_PRETTY_BRANCH_LENGTH)\n );\n};\n"]}
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/deploy/handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, parse, relative } from \"node:path\";\nimport {\n MAX_PRETTY_BRANCH_NAME as MAX_PRETTY_BRANCH_LENGTH,\n ZUPLO_SYSTEM_ENV_VAR,\n} from \"../common/constants.js\";\nimport { logger } from \"../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printDiagnosticsToConsole,\n printResultToConsoleAndExitGracefully,\n printWarningToConsole,\n} from \"../common/output.js\";\nimport settings from \"../common/settings.js\";\nimport { RequiredProperties } from \"../common/utils/types.js\";\nimport { normalizeUrl } from \"../common/utils/urls.js\";\nimport { pullSystemConfig } from \"../link/populate.js\";\nimport { archive, ARCHIVE_EXTENSION, generateMetadata } from \"./archive.js\";\nimport {\n retrieveOrCreateEnvironment,\n UnableToAutoLinkToExistingProject,\n} from \"./environments.js\";\nimport { upload } from \"./file-upload.js\";\nimport { pollBuild, pollDeployment } from \"./poll-deployment.js\";\n\nexport interface Arguments {\n account: string;\n project: string;\n dir: string;\n environment?: string;\n \"api-key\": string;\n \"verify-remote\": boolean;\n \"self-hosted-endpoint\"?: string;\n \"override-repo-url\"?: string;\n}\n\nexport type SelfHostedArgs = RequiredProperties<\n Arguments,\n \"self-hosted-endpoint\"\n>;\n\nexport async function deploy(argv: Arguments) {\n if (argv[\"self-hosted-endpoint\"]) {\n const args = argv as SelfHostedArgs;\n await deployToSelfHosted(args);\n } else {\n await deployToSaas(argv);\n }\n}\n\nasync function deployToSaas(argv: Arguments) {\n // 1. Create the tarball locally\n const archiveMetadata = await archive(argv);\n logger.debug(`Tarball created locally at ${archiveMetadata}`);\n\n // 2. Build uploadUrl request\n const { account, project } = argv;\n const uploadUrlResponse = await fetch(\n `${settings.ZUPLO_DEVELOPER_API_ENDPOINT}/v1/deployments/sources`,\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n body: JSON.stringify({\n accountName: account,\n projectName: project,\n branchName: archiveMetadata.metadata.branch,\n }),\n }\n );\n\n if (uploadUrlResponse.ok) {\n // 3. Upload to request URL\n const { uploadUrl } = await uploadUrlResponse.json();\n const uploadResponse = await upload(archiveMetadata.tarball, uploadUrl);\n\n if (uploadResponse.ok) {\n printDiagnosticsToConsole(\n `Deploying the current branch ${archiveMetadata.metadata.branch} to project ${project} on account ${account}...`\n );\n\n // 5. Poll for status\n const fileId = parse(new URL(uploadUrl).pathname).base.replace(\n ARCHIVE_EXTENSION,\n \"\"\n );\n const { url, steps, buildResult } = await pollDeployment(\n argv,\n fileId,\n account,\n project\n );\n if (url) {\n await printResultToConsoleAndExitGracefully(`Deployed to ${url}`);\n } else {\n const diagnostics = buildResult ?? steps;\n await printCriticalFailureToConsoleAndExit(\n `Failed to deploy the current branch ${\n archiveMetadata.metadata.branch\n } to project ${project} on account ${account}. Here's the diagnostics: ${JSON.stringify(\n diagnostics,\n null,\n 2\n )}`\n );\n }\n } else {\n logger.error(\n {\n status: uploadResponse.status,\n statusText: uploadResponse.statusText,\n },\n \"Failed to upload source to cloud storage\"\n );\n printDiagnosticsToConsole(\n \"Error: Failed to upload source to cloud storage. Try again later.\"\n );\n }\n } else {\n logger.error(\n {\n status: uploadUrlResponse.status,\n statusText: uploadUrlResponse.statusText,\n },\n \"Failed to retrieve uploadUrl\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to determine where to upload your files. Try again later.\"\n );\n }\n}\n\nasync function deployToSelfHosted(argv: SelfHostedArgs) {\n const { account, project } = argv;\n\n let existingZuploEnv: string | undefined;\n\n try {\n // 0. Finagle the URL first\n const endpoint = normalizeUrl(argv[\"self-hosted-endpoint\"]);\n\n // 1. Perform the link on-behalf-of-the-user\n // Store the current .env.zuplo if there is one and restore it later\n existingZuploEnv = retrieveExistingZuploEnv(argv);\n const branch = (await generateMetadata(argv)).branch;\n try {\n const environmentToAutoLink = await retrieveOrCreateEnvironment(\n branch,\n argv\n );\n await pullSystemConfig({\n dir: argv.dir,\n environment: environmentToAutoLink.name,\n \"api-key\": argv[\"api-key\"],\n });\n } catch (error) {\n if (error instanceof UnableToAutoLinkToExistingProject) {\n printWarningToConsole(\n `We are unable to fetch the environment variables from Zuplo for this project. \n Deployment will proceed but the environment variables will not be available. \n To fix this, check that the project, ${argv.project} exists and this api-key has access to it.`\n );\n } else {\n throw error;\n }\n }\n\n // 2. Create the tarball locally\n const archiveMetadata = await archive(argv);\n logger.debug(`Tarball created locally at ${archiveMetadata}`);\n\n // 3. Build uploadUrl request\n const form = new FormData();\n const deploymentName = `${project}-${getPrettyBranch(\n archiveMetadata.metadata.branch\n )}`;\n form.set(\n \"file\",\n new Blob([readFileSync(archiveMetadata.tarball)], {\n type: \"application/gzip\",\n })\n );\n form.set(\"projectName\", project);\n form.set(\"deploymentName\", deploymentName);\n\n const uploadUrlResponse = await fetch(`${endpoint}/v1/deployments/build`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n body: form,\n });\n\n if (uploadUrlResponse.ok) {\n printDiagnosticsToConsole(\n `Deploying the current branch ${archiveMetadata.metadata.branch} to project ${project} on account ${account}...`\n );\n\n // 4. Poll for build\n const { buildName } = await uploadUrlResponse.json();\n const buildResult = await pollBuild(argv, endpoint, buildName);\n\n if (buildResult.conditionType === \"Complete\") {\n // Retrieve the deployment\n const deploymentResponse = await fetch(\n `${endpoint}/v1/deployments/${deploymentName}`,\n {\n method: \"GET\",\n headers: {\n Authorization: `Bearer ${argv[\"api-key\"]}`,\n },\n }\n );\n const deploymentJSON: { deploymentUrl: string } =\n await deploymentResponse.json();\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n await printResultToConsoleAndExitGracefully(\n `Deployed to ${deploymentJSON.deploymentUrl}`\n );\n } else {\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n await printCriticalFailureToConsoleAndExit(\n `Failed to deploy the current environment. Here's the diagnostics: ${JSON.stringify(\n buildResult\n )}`\n );\n }\n } else {\n logger.error(\n await uploadUrlResponse.text(),\n \"Failed to upload to self-hosted build endpoint\"\n );\n await printCriticalFailureToConsoleAndExit(\n \"Error: Failed to upload to self-hosted build endpoint\"\n );\n }\n } catch (error) {\n logger.error(error);\n } finally {\n restoreExistingZuploEnvAsNecessary(argv, existingZuploEnv);\n }\n}\n\nfunction retrieveExistingZuploEnv(argv: SelfHostedArgs): string | undefined {\n const dir = argv.dir;\n const normalizedDir = join(relative(process.cwd(), dir));\n const envFilePath = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n if (existsSync(envFilePath)) {\n const envFileContent = readFileSync(envFilePath, \"utf-8\");\n return envFileContent;\n } else {\n return undefined;\n }\n}\n\nfunction restoreExistingZuploEnvAsNecessary(\n argv: SelfHostedArgs,\n originalValue: string | undefined\n) {\n if (originalValue) {\n const dir = argv.dir;\n const normalizedDir = join(relative(process.cwd(), dir));\n const envFilePath = join(normalizedDir, ZUPLO_SYSTEM_ENV_VAR);\n writeFileSync(envFilePath, originalValue);\n }\n}\n\nconst getPrettyBranch = (branch: string): string => {\n // https://ricardometring.com/javascript-replace-special-characters\n return (\n branch\n .normalize(\"NFD\")\n .replace(/[\\u0300-\\u036f]/g, \"\") // Remove accents\n .replace(/([^\\w]+|\\s+)/g, \"-\") // Replace space and other characters by hyphen\n // eslint-disable-next-line no-useless-escape\n .replace(/\\-\\-+/g, \"-\") // Replaces multiple hyphens by one hyphen\n .replace(/(^-+|-+$)/, \"\") // Remove extra hyphens from beginning or end of the string\n .replaceAll(\"_\", \"-\") // Replace underscores by hyphens (Url hosts cannot have underscores)\n .toLowerCase()\n .substring(0, MAX_PRETTY_BRANCH_LENGTH)\n );\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/cli.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/engine.test.ts","../src/__tests__/import-openapi-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/oas-test-data.ts","../src/__tests__/outdated.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/build/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/convert.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/editor.ts","../src/cmds/link.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/test.ts","../src/cmds/project/import-openapi.ts","../src/cmds/project/index.ts","../src/cmds/project/update.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/settings.ts","../src/common/analytics/lib.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/ports.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/login-state-validator.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/convert/engine.ts","../src/convert/handler.ts","../src/convert/routes.
|
|
1
|
+
{"root":["../src/cli.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/engine.test.ts","../src/__tests__/import-openapi-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/oas-test-data.ts","../src/__tests__/outdated.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/build/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/convert.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/editor.ts","../src/cmds/link.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/test.ts","../src/cmds/project/import-openapi.ts","../src/cmds/project/index.ts","../src/cmds/project/update.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/settings.ts","../src/common/analytics/lib.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/ports.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/login-state-validator.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/convert/engine.ts","../src/convert/handler.ts","../src/convert/routes.legacy.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/editor/handler.ts","../src/editor/assets/index-03352ce7.js","../src/editor/server/cors-plugin.ts","../src/editor/server/server.ts","../src/editor/server/xfs.ts","../src/link/handler.ts","../src/link/populate.ts","../src/list/handler.ts","../src/login/handler.ts","../src/login/server.ts","../src/project/import-openapi/handler.ts","../src/project/import-openapi/interfaces.ts","../src/project/import-openapi/utils.ts","../src/project/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts"],"version":"5.6.2"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zuplo/cli",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.10.1",
|
|
4
4
|
"repository": "https://github.com/zuplo/zuplo",
|
|
5
5
|
"author": "Zuplo, Inc.",
|
|
6
6
|
"type": "module",
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
"@opentelemetry/api": "^1.8.0",
|
|
30
30
|
"@sentry/node": "^7.119.2",
|
|
31
31
|
"@swc/core": "1.7.6",
|
|
32
|
-
"@zuplo/core": "^6.
|
|
32
|
+
"@zuplo/core": "^6.10.1",
|
|
33
33
|
"@zuplo/pino-pretty-configurations": "^1.5.0",
|
|
34
|
-
"@zuplo/runtime": "^6.
|
|
34
|
+
"@zuplo/runtime": "^6.10.1",
|
|
35
35
|
"chalk": "^5.3.0",
|
|
36
36
|
"chokidar": "^3.5.3",
|
|
37
37
|
"dotenv": "^16.4.5",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routes.generated.d.ts","sourceRoot":"","sources":["../../src/convert/routes.generated.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IAIjB,QAAQ,EAAE,CAAC,WAAW,EAAE,GAAG,WAAW,EAAE,CAAC,CAAC;IAI1C,MAAM,EAAE,0BAA0B,EAAE,CAAC;IACrC,QAAQ,CAAC,EAAE,2BAA2B,EAAE,CAAC;IACzC,YAAY,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACzC,mBAAmB,CAAC,EAAE,iBAAiB,CAAC;CACzC;AACD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,IAAI,CAAC;IAIZ,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAI7B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AACD,MAAM,WAAW,IAAI;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AACD,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,CACL,KAAK,GACL,MAAM,GACN,MAAM,GACN,KAAK,GACL,QAAQ,GACR,SAAS,GACT,SAAS,GACT,OAAO,GACP,OAAO,CACV,EAAE,CAAC;IAIJ,KAAK,CAAC,EAAE,MAAM,CAAC;IAIf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,iBAAiB,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AACD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QACR,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACtB,CAAC;CACH;AACD,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE;QACR,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACtB,CAAC;CACH;AACD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,CACb,KAAK,GACL,MAAM,GACN,MAAM,GACN,KAAK,GACL,QAAQ,GACR,SAAS,GACT,SAAS,GACT,OAAO,GACP,OAAO,CACV,EAAE,CAAC;IACJ,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"routes.generated.js","sourceRoot":"","sources":["../../src/convert/routes.generated.ts"],"names":[],"mappings":"","sourcesContent":["/* tslint:disable */\n/**\n * This file was automatically generated by json-schema-to-typescript.\n * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,\n * and run json-schema-to-typescript to regenerate this file.\n */\n\nexport interface RouteConfigFile {\n $schema?: string;\n /**\n * @minItems 1\n */\n versions: [VersionData, ...VersionData[]];\n /**\n * @minItems 0\n */\n routes: RouteConfigurationFragment[];\n policies?: PolicyConfigurationFragment[];\n corsPolicies?: CorsPolicyConfiguration[];\n requestErrorHandler?: HandlerDefinition;\n}\nexport interface VersionData {\n name: string;\n pathPrefix: string;\n info?: Info;\n /**\n * The project relative path to the OpenAPI spec.\n */\n openApiFile?: string;\n /**\n * If false, OpenAPI documentation will not be generated for this version. If openApiFile is set this setting is ignored.\n */\n excludeFromOpenApi?: boolean;\n /**\n * If true, schema validation found in the OpenAPI spec will be enforced on requests/responses.\n */\n enforceOpenApi?: boolean;\n}\nexport interface Info {\n title: string;\n summary?: string;\n description?: string;\n termsOfService?: string;\n version: string;\n [k: string]: unknown;\n}\nexport interface RouteConfigurationFragment {\n operationId?: string;\n path: string;\n methods: (\n | \"GET\"\n | \"HEAD\"\n | \"POST\"\n | \"PUT\"\n | \"DELETE\"\n | \"CONNECT\"\n | \"OPTIONS\"\n | \"TRACE\"\n | \"PATCH\"\n )[];\n /**\n * An internal user-friendly identifier of the route.\n */\n label?: string;\n /**\n * If true, schema validation found in the OpenAPI spec will be enforced on requests/responses.\n */\n enforceOpenApi?: boolean;\n key?: string;\n handler: HandlerDefinition;\n corsPolicy?: string;\n custom?: unknown;\n version: string;\n policies?: {\n inbound?: string[];\n outbound?: string[];\n };\n summary?: string;\n description?: string;\n excludeFromOpenApi?: boolean;\n tags?: string[];\n}\nexport interface HandlerDefinition {\n module: string;\n export: string;\n options?: {\n [k: string]: unknown;\n };\n}\nexport interface PolicyConfigurationFragment {\n name: string;\n policyType: string;\n handler: HandlerDefinition;\n options?: {\n [k: string]: unknown;\n };\n}\nexport interface CorsPolicyConfiguration {\n name: string;\n allowCredentials?: boolean;\n maxAge?: number;\n allowedOrigins: string[];\n allowedMethods?: (\n | \"GET\"\n | \"HEAD\"\n | \"POST\"\n | \"PUT\"\n | \"DELETE\"\n | \"CONNECT\"\n | \"OPTIONS\"\n | \"TRACE\"\n | \"PATCH\"\n )[];\n allowedHeaders?: string[];\n exposeHeaders?: string[];\n}\n"]}
|