@decohere/scaffold 0.0.1-dev.126 → 0.0.1-dev.80

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.
Files changed (154) hide show
  1. package/commonjs/src/add-api.action.js +3 -1
  2. package/commonjs/src/add-api.command.js +3 -1
  3. package/commonjs/src/add.command.js +3 -1
  4. package/commonjs/src/add.module.js +3 -1
  5. package/commonjs/src/cli.js +3 -2
  6. package/commonjs/src/create.command.js +3 -1
  7. package/commonjs/src/create.module.js +3 -1
  8. package/commonjs/src/domain/prompt.js +2 -0
  9. package/commonjs/src/index.js +2 -12
  10. package/commonjs/src/models/compose.model.js +3 -111
  11. package/commonjs/src/models/config-yaml.model.js +2 -0
  12. package/commonjs/src/models/const.js +2 -0
  13. package/commonjs/src/models/dev-container.model.js +10 -66
  14. package/commonjs/src/models/docker-image.model.js +6 -24
  15. package/commonjs/src/models/env-file.model.js +2 -0
  16. package/commonjs/src/models/gitignore.model.js +2 -7
  17. package/commonjs/src/models/launch-json.model.js +4 -0
  18. package/commonjs/src/models/package-json.model.js +7 -14
  19. package/commonjs/src/models/project.model.js +2 -0
  20. package/commonjs/src/models/source-file.js +2 -0
  21. package/commonjs/src/models/tsconfig.model.js +2 -0
  22. package/commonjs/src/models/vitest-config.model.js +2 -0
  23. package/commonjs/src/models/vscode-settings.model.js +2 -0
  24. package/commonjs/src/program.js +6 -13
  25. package/commonjs/src/resolve-target-dir.js +2 -0
  26. package/commonjs/src/services/scaffold.service.js +2 -0
  27. package/commonjs/src/version.js +2 -0
  28. package/commonjs/src/webapi/api-name.js +2 -0
  29. package/commonjs/src/webapi/cli-options.js +2 -0
  30. package/commonjs/src/webapi/const.js +3 -7
  31. package/commonjs/src/webapi/create-api.js +18 -46
  32. package/commonjs/src/webapi/devcontainer/codebase-rag-mcp.js +2 -0
  33. package/commonjs/src/webapi/devcontainer/host-scripts.js +2 -0
  34. package/commonjs/src/webapi/features/auth.feature.js +44 -11
  35. package/commonjs/src/webapi/features/auth0-cli.js +3 -40
  36. package/commonjs/src/webapi/features/biome-format.js +2 -0
  37. package/commonjs/src/webapi/features/database.feature.js +10 -10
  38. package/commonjs/src/webapi/features/finalize.feature.js +4 -2
  39. package/commonjs/src/webapi/features/postman.feature.js +2 -0
  40. package/commonjs/src/webapi/models/api-package-json.model.js +3 -1
  41. package/commonjs/src/webapi/models/auth-config.model.js +2 -0
  42. package/commonjs/src/webapi/models/controller-source-file.model.js +8 -5
  43. package/commonjs/src/webapi/models/github-ci.model.js +6 -6
  44. package/commonjs/src/webapi/models/main-source-file.model.js +5 -3
  45. package/commonjs/src/webapi/models/production-dockerfile.model.js +109 -27
  46. package/commonjs/src/webapi/models/sample-files.model.js +4 -2
  47. package/commonjs/src/webapi/models/webapi-image.model.js +2 -0
  48. package/commonjs/src/webapi/postman/hello-openapi.js +2 -0
  49. package/commonjs/src/webapi/postman/local-view.js +2 -0
  50. package/commonjs/src/webapi/postman/openapi-to-postman.js +8 -44
  51. package/commonjs/src/webapi/workspace-readme.js +5 -4
  52. package/commonjs/src/webapi.action.js +3 -1
  53. package/commonjs/src/webapi.command.js +4 -2
  54. package/es6/src/add-api.action.js +3 -1
  55. package/es6/src/add-api.command.js +3 -1
  56. package/es6/src/add.command.js +3 -1
  57. package/es6/src/add.module.js +3 -1
  58. package/es6/src/cli.js +3 -2
  59. package/es6/src/create.command.js +3 -1
  60. package/es6/src/create.module.js +3 -1
  61. package/es6/src/domain/prompt.js +2 -0
  62. package/es6/src/index.js +2 -3
  63. package/es6/src/models/compose.model.js +3 -113
  64. package/es6/src/models/config-yaml.model.js +2 -0
  65. package/es6/src/models/const.js +2 -0
  66. package/es6/src/models/dev-container.model.js +10 -66
  67. package/es6/src/models/docker-image.model.js +6 -24
  68. package/es6/src/models/env-file.model.js +2 -0
  69. package/es6/src/models/gitignore.model.js +2 -7
  70. package/es6/src/models/launch-json.model.js +4 -0
  71. package/es6/src/models/package-json.model.js +7 -11
  72. package/es6/src/models/project.model.js +2 -0
  73. package/es6/src/models/source-file.js +2 -0
  74. package/es6/src/models/tsconfig.model.js +2 -0
  75. package/es6/src/models/vitest-config.model.js +2 -0
  76. package/es6/src/models/vscode-settings.model.js +2 -0
  77. package/es6/src/program.js +7 -18
  78. package/es6/src/resolve-target-dir.js +2 -0
  79. package/es6/src/services/scaffold.service.js +2 -0
  80. package/es6/src/version.js +2 -0
  81. package/es6/src/webapi/api-name.js +2 -0
  82. package/es6/src/webapi/cli-options.js +2 -0
  83. package/es6/src/webapi/const.js +3 -4
  84. package/es6/src/webapi/create-api.js +20 -48
  85. package/es6/src/webapi/devcontainer/codebase-rag-mcp.js +2 -0
  86. package/es6/src/webapi/devcontainer/host-scripts.js +2 -0
  87. package/es6/src/webapi/features/auth.feature.js +44 -11
  88. package/es6/src/webapi/features/auth0-cli.js +4 -35
  89. package/es6/src/webapi/features/biome-format.js +2 -0
  90. package/es6/src/webapi/features/database.feature.js +10 -10
  91. package/es6/src/webapi/features/finalize.feature.js +4 -2
  92. package/es6/src/webapi/features/postman.feature.js +2 -0
  93. package/es6/src/webapi/models/api-package-json.model.js +4 -2
  94. package/es6/src/webapi/models/auth-config.model.js +2 -0
  95. package/es6/src/webapi/models/controller-source-file.model.js +8 -5
  96. package/es6/src/webapi/models/github-ci.model.js +6 -6
  97. package/es6/src/webapi/models/main-source-file.model.js +5 -3
  98. package/es6/src/webapi/models/production-dockerfile.model.js +117 -35
  99. package/es6/src/webapi/models/sample-files.model.js +4 -2
  100. package/es6/src/webapi/models/webapi-image.model.js +2 -0
  101. package/es6/src/webapi/postman/hello-openapi.js +2 -0
  102. package/es6/src/webapi/postman/local-view.js +2 -0
  103. package/es6/src/webapi/postman/openapi-to-postman.js +4 -4
  104. package/es6/src/webapi/workspace-readme.js +5 -4
  105. package/es6/src/webapi.action.js +3 -1
  106. package/es6/src/webapi.command.js +4 -2
  107. package/package.json +4 -14
  108. package/types/src/add-api.action.d.ts +1 -1
  109. package/types/src/add-api.command.d.ts +1 -1
  110. package/types/src/add.command.d.ts +2 -2
  111. package/types/src/add.module.d.ts +1 -1
  112. package/types/src/create.command.d.ts +2 -2
  113. package/types/src/create.module.d.ts +1 -1
  114. package/types/src/index.d.ts +0 -4
  115. package/types/src/models/compose.model.d.ts +0 -9
  116. package/types/src/models/dev-container.model.d.ts +1 -13
  117. package/types/src/models/docker-image.model.d.ts +0 -6
  118. package/types/src/models/gitignore.model.d.ts +0 -2
  119. package/types/src/models/package-json.model.d.ts +0 -1
  120. package/types/src/program.d.ts +1 -6
  121. package/types/src/webapi/const.d.ts +0 -2
  122. package/types/src/webapi/create-api.d.ts +1 -1
  123. package/types/src/webapi/features/auth0-cli.d.ts +0 -4
  124. package/types/src/webapi/models/api-package-json.model.d.ts +1 -1
  125. package/types/src/webapi/models/controller-source-file.model.d.ts +2 -2
  126. package/types/src/webapi/models/main-source-file.model.d.ts +1 -1
  127. package/types/src/webapi/models/production-dockerfile.model.d.ts +14 -9
  128. package/types/src/webapi.action.d.ts +1 -1
  129. package/types/src/webapi.command.d.ts +1 -1
  130. package/LICENSE +0 -15
  131. package/commonjs/src/auth0-configure.action.js +0 -28
  132. package/commonjs/src/auth0-configure.command.js +0 -24
  133. package/commonjs/src/auth0-login.action.js +0 -28
  134. package/commonjs/src/auth0-login.command.js +0 -23
  135. package/commonjs/src/auth0.command.js +0 -22
  136. package/commonjs/src/auth0.module.js +0 -28
  137. package/commonjs/src/webapi/auth0-commands.js +0 -250
  138. package/commonjs/src/webapi/authorize-scopes.js +0 -79
  139. package/es6/src/auth0-configure.action.js +0 -18
  140. package/es6/src/auth0-configure.command.js +0 -14
  141. package/es6/src/auth0-login.action.js +0 -18
  142. package/es6/src/auth0-login.command.js +0 -13
  143. package/es6/src/auth0.command.js +0 -12
  144. package/es6/src/auth0.module.js +0 -18
  145. package/es6/src/webapi/auth0-commands.js +0 -185
  146. package/es6/src/webapi/authorize-scopes.js +0 -55
  147. package/types/src/auth0-configure.action.d.ts +0 -7
  148. package/types/src/auth0-configure.command.d.ts +0 -6
  149. package/types/src/auth0-login.action.d.ts +0 -4
  150. package/types/src/auth0-login.command.d.ts +0 -6
  151. package/types/src/auth0.command.d.ts +0 -6
  152. package/types/src/auth0.module.d.ts +0 -18
  153. package/types/src/webapi/auth0-commands.d.ts +0 -11
  154. package/types/src/webapi/authorize-scopes.d.ts +0 -7
@@ -1,66 +1,148 @@
1
1
  import { WELL_KNOWN_FILES } from "../../models/const.js";
2
- import { DEFAULT_WEBAPI_NAME, webapiPackagedEntry, webapiProjectDir } from "../const.js";
2
+ import { DEFAULT_WEBAPI_NAME, webapiProjectDir, webapiReleaseEntry } from "../const.js";
3
3
  /**
4
- * Production Dockerfile for each API, in the API's own folder: `projects/<name>/Dockerfile`.
5
- * That is where `forge docker` and `forge package` look for a deployable, and the folder is
6
- * the Docker build context.
4
+ * Production Dockerfiles for PaaS (Railway/Fly) and local `docker build`.
7
5
  *
8
- * The image copies `.package/`, which `forge package` writes before Docker runs: the API's
9
- * compiled code, the workspace libraries it imports, and a real (symlink-free) `node_modules`
10
- * of the third-party packages it reaches. So the image build installs nothing, runs no
11
- * workspace tooling, and needs no npm token.
6
+ * Context is always the **repo root** (`docker build -f Dockerfile.billing .`).
7
+ * Root `Dockerfile` is the first API (`pnpm start`). Extra or custom-named APIs
8
+ * also get `Dockerfile.<name>` so each service can be deployed on its own.
9
+ *
10
+ * Runtime `node_modules` come from a **prod-deps** stage (`pnpm install --prod`),
11
+ * not the full build install (Forge, TypeScript, Biome, Vitest).
12
12
  */ export class WebapiProductionDockerfile {
13
13
  apiNames;
14
+ options;
14
15
  key = WELL_KNOWN_FILES.PRODUCTION_DOCKERFILE;
15
16
  constructor(apiNames = [
16
17
  DEFAULT_WEBAPI_NAME
17
- ]){
18
+ ], options = {}){
18
19
  this.apiNames = apiNames;
20
+ this.options = options;
19
21
  }
20
22
  files() {
21
23
  const names = this.apiNames.length > 0 ? this.apiNames : [
22
24
  DEFAULT_WEBAPI_NAME
23
25
  ];
24
- return names.flatMap((name)=>[
25
- {
26
- filePath: `${webapiProjectDir(name)}/Dockerfile`,
27
- content: renderProductionDockerfile(name)
28
- },
29
- {
30
- filePath: `${webapiProjectDir(name)}/.dockerignore`,
31
- content: dockerignoreContent()
32
- }
33
- ]);
26
+ const first = names[0] ?? DEFAULT_WEBAPI_NAME;
27
+ const files = [];
28
+ if (!this.options.namedOnly) {
29
+ files.push({
30
+ filePath: ".dockerignore",
31
+ content: dockerignoreContent()
32
+ });
33
+ files.push({
34
+ filePath: "Dockerfile",
35
+ content: renderProductionDockerfile(first, "start")
36
+ });
37
+ }
38
+ const emitNamed = this.options.namedOnly || names.length > 1 || first !== DEFAULT_WEBAPI_NAME;
39
+ if (emitNamed) {
40
+ for (const name of names){
41
+ files.push({
42
+ filePath: `Dockerfile.${name}`,
43
+ content: renderProductionDockerfile(name, `start:${name}`)
44
+ });
45
+ }
46
+ }
47
+ return files;
34
48
  }
35
49
  }
36
- export function renderProductionDockerfile(apiName) {
50
+ export function renderProductionDockerfile(apiName, startScript) {
37
51
  const projectDir = webapiProjectDir(apiName);
38
- const entry = webapiPackagedEntry();
52
+ const startCmd = startScript === "start" ? 'CMD ["pnpm", "start"]' : `CMD ["pnpm", "run", "${startScript}"]`;
53
+ const startEntry = webapiReleaseEntry(apiName);
54
+ const dockerfileFlag = startScript === "start" ? "" : `.${apiName}`;
39
55
  return `# syntax=docker/dockerfile:1
40
- # Production image for ${apiName}. Docker only copies the packaged app; it installs nothing.
56
+ # Self-contained production image: install + forge build happen inside docker build.
57
+ # Hosts (Railway/Fly/etc.) clone git and run \`docker build\` — they do not receive CI dist/.
58
+ # Build from the repo root: docker build -f Dockerfile${dockerfileFlag} .
41
59
  #
42
- # Build the package first (release build, then .package/ in each API), then the image:
43
- # pnpm run package:${apiName}
44
- # docker build -t ${apiName} ${projectDir}
45
- # or, with the image name and tags from the workspace:
46
- # pnpm run package:${apiName} && pnpm exec forge docker --configuration release
60
+ # Runtime node_modules are a production-only install (prod-deps). The build stage's
61
+ # full install (Forge, TypeScript, Biome, Vitest) is not copied into the run image.
47
62
  #
48
- # Hosts that build from a git clone (Railway, Fly) do not have .package/. Build and push the
49
- # image from CI instead, or run the package step before \`docker build\`.
50
- FROM node:24-bookworm-slim
63
+ # Private @decohere/* packages: pass a BuildKit secret named npm_token (npm auth token), e.g.
64
+ # docker build --secret id=npm_token,env=NODE_AUTH_TOKEN .
65
+ # Or set NODE_AUTH_TOKEN as a build-arg on hosts that only support build-args.
66
+
67
+ FROM node:24-bookworm AS build
68
+ WORKDIR /app
69
+ RUN corepack enable && corepack prepare pnpm@10 --activate
70
+
71
+ COPY package.json ./
72
+ COPY pnpm-lock.yaml* ./
73
+ COPY tsconfig.json biome.json ./
74
+ COPY config ./config
75
+ COPY ${projectDir} ./${projectDir}
76
+
77
+ ${renderPnpmInstall("all")}
78
+
79
+ RUN pnpm run build
80
+
81
+ FROM node:24-bookworm AS prod-deps
51
82
  WORKDIR /app
52
83
  ENV NODE_ENV=production
84
+ RUN corepack enable && corepack prepare pnpm@10 --activate
53
85
 
54
- COPY .package/ ./
86
+ COPY package.json ./
87
+ COPY pnpm-lock.yaml* ./
88
+ COPY ${projectDir}/package.json ./${projectDir}/package.json
89
+
90
+ ${renderPnpmInstall("prod")}
91
+
92
+ FROM node:24-bookworm-slim AS run
93
+ WORKDIR /app
94
+ ENV NODE_ENV=production
95
+ RUN corepack enable && corepack prepare pnpm@10 --activate
96
+
97
+ COPY --from=prod-deps /app/package.json ./
98
+ COPY --from=prod-deps /app/pnpm-lock.yaml* ./
99
+ COPY --from=build /app/config ./config
100
+ COPY --from=build /app/dist ./dist
101
+ COPY --from=prod-deps /app/node_modules ./node_modules
102
+ COPY --from=prod-deps /app/${projectDir}/package.json ./${projectDir}/package.json
55
103
 
56
104
  EXPOSE 3000
57
- CMD ["node", "${entry}"]
105
+ ${startCmd}
106
+ # Entry resolved by package.json "${startScript}" → node ${startEntry}
58
107
  `;
59
108
  }
60
- /** The build context is the project folder; only the package belongs in the image. */ function dockerignoreContent() {
109
+ /** npm auth + pnpm install. Token is required again in prod-deps (separate stage, no store). */ function renderPnpmInstall(mode) {
110
+ const flags = mode === "prod" ? " --prod" : "";
111
+ return `ARG NODE_AUTH_TOKEN=
112
+ RUN --mount=type=secret,id=npm_token,required=false \\
113
+ if [ -f /run/secrets/npm_token ]; then \\
114
+ TOKEN="$(cat /run/secrets/npm_token)"; \\
115
+ else \\
116
+ TOKEN="\${NODE_AUTH_TOKEN}"; \\
117
+ fi; \\
118
+ if [ -n "$TOKEN" ]; then \\
119
+ echo "//registry.npmjs.org/:_authToken=\${TOKEN}" > .npmrc; \\
120
+ fi; \\
121
+ if [ -f pnpm-lock.yaml ]; then \\
122
+ pnpm install --frozen-lockfile${flags}; \\
123
+ else \\
124
+ pnpm install${flags}; \\
125
+ fi; \\
126
+ rm -f .npmrc`;
127
+ }
128
+ function dockerignoreContent() {
61
129
  return [
62
- "*",
63
- "!.package",
130
+ "node_modules",
131
+ "dist",
132
+ ".git",
133
+ ".devcontainer",
134
+ ".vscode",
135
+ ".github",
136
+ "postman",
137
+ ".postman",
138
+ ".env",
139
+ ".env.*",
140
+ "!.env.example",
141
+ "coverage",
142
+ "**/*.spec.ts",
143
+ "**/*.test.ts",
64
144
  ""
65
145
  ].join("\n");
66
146
  }
147
+
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvbW9kZWxzL3Byb2R1Y3Rpb24tZG9ja2VyZmlsZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXllZE1vZGVsLCBTb3VyY2VGaWxlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zb3VyY2UtZmlsZS5qc1wiO1xuaW1wb3J0IHsgREVGQVVMVF9XRUJBUElfTkFNRSwgd2ViYXBpUHJvamVjdERpciwgd2ViYXBpUmVsZWFzZUVudHJ5IH0gZnJvbSBcIi4uL2NvbnN0LmpzXCI7XG5cbmV4cG9ydCB0eXBlIFByb2R1Y3Rpb25Eb2NrZXJmaWxlT3B0aW9ucyA9IHtcblx0LyoqIFdoZW4gdHJ1ZSwgb25seSB3cml0ZSBgRG9ja2VyZmlsZS48bmFtZT5gIChleGlzdGluZyB3b3Jrc3BhY2Ug4oCUIGRvIG5vdCByZXBsYWNlIHJvb3QgRG9ja2VyZmlsZSkuICovXG5cdG5hbWVkT25seT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFByb2R1Y3Rpb24gRG9ja2VyZmlsZXMgZm9yIFBhYVMgKFJhaWx3YXkvRmx5KSBhbmQgbG9jYWwgYGRvY2tlciBidWlsZGAuXG4gKlxuICogQ29udGV4dCBpcyBhbHdheXMgdGhlICoqcmVwbyByb290KiogKGBkb2NrZXIgYnVpbGQgLWYgRG9ja2VyZmlsZS5iaWxsaW5nIC5gKS5cbiAqIFJvb3QgYERvY2tlcmZpbGVgIGlzIHRoZSBmaXJzdCBBUEkgKGBwbnBtIHN0YXJ0YCkuIEV4dHJhIG9yIGN1c3RvbS1uYW1lZCBBUElzXG4gKiBhbHNvIGdldCBgRG9ja2VyZmlsZS48bmFtZT5gIHNvIGVhY2ggc2VydmljZSBjYW4gYmUgZGVwbG95ZWQgb24gaXRzIG93bi5cbiAqXG4gKiBSdW50aW1lIGBub2RlX21vZHVsZXNgIGNvbWUgZnJvbSBhICoqcHJvZC1kZXBzKiogc3RhZ2UgKGBwbnBtIGluc3RhbGwgLS1wcm9kYCksXG4gKiBub3QgdGhlIGZ1bGwgYnVpbGQgaW5zdGFsbCAoRm9yZ2UsIFR5cGVTY3JpcHQsIEJpb21lLCBWaXRlc3QpLlxuICovXG5leHBvcnQgY2xhc3MgV2ViYXBpUHJvZHVjdGlvbkRvY2tlcmZpbGUgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuUFJPRFVDVElPTl9ET0NLRVJGSUxFO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IGFwaU5hbWVzOiByZWFkb25seSBzdHJpbmdbXSA9IFtERUZBVUxUX1dFQkFQSV9OQU1FXSxcblx0XHRwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFByb2R1Y3Rpb25Eb2NrZXJmaWxlT3B0aW9ucyA9IHt9LFxuXHQpIHt9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgbmFtZXMgPSB0aGlzLmFwaU5hbWVzLmxlbmd0aCA+IDAgPyB0aGlzLmFwaU5hbWVzIDogW0RFRkFVTFRfV0VCQVBJX05BTUVdO1xuXHRcdGNvbnN0IGZpcnN0ID0gbmFtZXNbMF0gPz8gREVGQVVMVF9XRUJBUElfTkFNRTtcblx0XHRjb25zdCBmaWxlczogU291cmNlRmlsZVtdID0gW107XG5cblx0XHRpZiAoIXRoaXMub3B0aW9ucy5uYW1lZE9ubHkpIHtcblx0XHRcdGZpbGVzLnB1c2goe1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZG9ja2VyaWdub3JlXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IGRvY2tlcmlnbm9yZUNvbnRlbnQoKSxcblx0XHRcdH0pO1xuXHRcdFx0ZmlsZXMucHVzaCh7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIkRvY2tlcmZpbGVcIixcblx0XHRcdFx0Y29udGVudDogcmVuZGVyUHJvZHVjdGlvbkRvY2tlcmZpbGUoZmlyc3QsIFwic3RhcnRcIiksXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBlbWl0TmFtZWQgPVxuXHRcdFx0dGhpcy5vcHRpb25zLm5hbWVkT25seSB8fCBuYW1lcy5sZW5ndGggPiAxIHx8IGZpcnN0ICE9PSBERUZBVUxUX1dFQkFQSV9OQU1FO1xuXHRcdGlmIChlbWl0TmFtZWQpIHtcblx0XHRcdGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuXHRcdFx0XHRmaWxlcy5wdXNoKHtcblx0XHRcdFx0XHRmaWxlUGF0aDogYERvY2tlcmZpbGUuJHtuYW1lfWAsXG5cdFx0XHRcdFx0Y29udGVudDogcmVuZGVyUHJvZHVjdGlvbkRvY2tlcmZpbGUobmFtZSwgYHN0YXJ0OiR7bmFtZX1gKSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZpbGVzO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQcm9kdWN0aW9uRG9ja2VyZmlsZShhcGlOYW1lOiBzdHJpbmcsIHN0YXJ0U2NyaXB0OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBwcm9qZWN0RGlyID0gd2ViYXBpUHJvamVjdERpcihhcGlOYW1lKTtcblx0Y29uc3Qgc3RhcnRDbWQgPVxuXHRcdHN0YXJ0U2NyaXB0ID09PSBcInN0YXJ0XCJcblx0XHRcdD8gJ0NNRCBbXCJwbnBtXCIsIFwic3RhcnRcIl0nXG5cdFx0XHQ6IGBDTUQgW1wicG5wbVwiLCBcInJ1blwiLCBcIiR7c3RhcnRTY3JpcHR9XCJdYDtcblx0Y29uc3Qgc3RhcnRFbnRyeSA9IHdlYmFwaVJlbGVhc2VFbnRyeShhcGlOYW1lKTtcblx0Y29uc3QgZG9ja2VyZmlsZUZsYWcgPSBzdGFydFNjcmlwdCA9PT0gXCJzdGFydFwiID8gXCJcIiA6IGAuJHthcGlOYW1lfWA7XG5cblx0cmV0dXJuIGAjIHN5bnRheD1kb2NrZXIvZG9ja2VyZmlsZToxXG4jIFNlbGYtY29udGFpbmVkIHByb2R1Y3Rpb24gaW1hZ2U6IGluc3RhbGwgKyBmb3JnZSBidWlsZCBoYXBwZW4gaW5zaWRlIGRvY2tlciBidWlsZC5cbiMgSG9zdHMgKFJhaWx3YXkvRmx5L2V0Yy4pIGNsb25lIGdpdCBhbmQgcnVuIFxcYGRvY2tlciBidWlsZFxcYCDigJQgdGhleSBkbyBub3QgcmVjZWl2ZSBDSSBkaXN0Ly5cbiMgQnVpbGQgZnJvbSB0aGUgcmVwbyByb290OiBkb2NrZXIgYnVpbGQgLWYgRG9ja2VyZmlsZSR7ZG9ja2VyZmlsZUZsYWd9IC5cbiNcbiMgUnVudGltZSBub2RlX21vZHVsZXMgYXJlIGEgcHJvZHVjdGlvbi1vbmx5IGluc3RhbGwgKHByb2QtZGVwcykuIFRoZSBidWlsZCBzdGFnZSdzXG4jIGZ1bGwgaW5zdGFsbCAoRm9yZ2UsIFR5cGVTY3JpcHQsIEJpb21lLCBWaXRlc3QpIGlzIG5vdCBjb3BpZWQgaW50byB0aGUgcnVuIGltYWdlLlxuI1xuIyBQcml2YXRlIEBkZWNvaGVyZS8qIHBhY2thZ2VzOiBwYXNzIGEgQnVpbGRLaXQgc2VjcmV0IG5hbWVkIG5wbV90b2tlbiAobnBtIGF1dGggdG9rZW4pLCBlLmcuXG4jICAgZG9ja2VyIGJ1aWxkIC0tc2VjcmV0IGlkPW5wbV90b2tlbixlbnY9Tk9ERV9BVVRIX1RPS0VOIC5cbiMgT3Igc2V0IE5PREVfQVVUSF9UT0tFTiBhcyBhIGJ1aWxkLWFyZyBvbiBob3N0cyB0aGF0IG9ubHkgc3VwcG9ydCBidWlsZC1hcmdzLlxuXG5GUk9NIG5vZGU6MjQtYm9va3dvcm0gQVMgYnVpbGRcbldPUktESVIgL2FwcFxuUlVOIGNvcmVwYWNrIGVuYWJsZSAmJiBjb3JlcGFjayBwcmVwYXJlIHBucG1AMTAgLS1hY3RpdmF0ZVxuXG5DT1BZIHBhY2thZ2UuanNvbiAuL1xuQ09QWSBwbnBtLWxvY2sueWFtbCogLi9cbkNPUFkgdHNjb25maWcuanNvbiBiaW9tZS5qc29uIC4vXG5DT1BZIGNvbmZpZyAuL2NvbmZpZ1xuQ09QWSAke3Byb2plY3REaXJ9IC4vJHtwcm9qZWN0RGlyfVxuXG4ke3JlbmRlclBucG1JbnN0YWxsKFwiYWxsXCIpfVxuXG5SVU4gcG5wbSBydW4gYnVpbGRcblxuRlJPTSBub2RlOjI0LWJvb2t3b3JtIEFTIHByb2QtZGVwc1xuV09SS0RJUiAvYXBwXG5FTlYgTk9ERV9FTlY9cHJvZHVjdGlvblxuUlVOIGNvcmVwYWNrIGVuYWJsZSAmJiBjb3JlcGFjayBwcmVwYXJlIHBucG1AMTAgLS1hY3RpdmF0ZVxuXG5DT1BZIHBhY2thZ2UuanNvbiAuL1xuQ09QWSBwbnBtLWxvY2sueWFtbCogLi9cbkNPUFkgJHtwcm9qZWN0RGlyfS9wYWNrYWdlLmpzb24gLi8ke3Byb2plY3REaXJ9L3BhY2thZ2UuanNvblxuXG4ke3JlbmRlclBucG1JbnN0YWxsKFwicHJvZFwiKX1cblxuRlJPTSBub2RlOjI0LWJvb2t3b3JtLXNsaW0gQVMgcnVuXG5XT1JLRElSIC9hcHBcbkVOViBOT0RFX0VOVj1wcm9kdWN0aW9uXG5SVU4gY29yZXBhY2sgZW5hYmxlICYmIGNvcmVwYWNrIHByZXBhcmUgcG5wbUAxMCAtLWFjdGl2YXRlXG5cbkNPUFkgLS1mcm9tPXByb2QtZGVwcyAvYXBwL3BhY2thZ2UuanNvbiAuL1xuQ09QWSAtLWZyb209cHJvZC1kZXBzIC9hcHAvcG5wbS1sb2NrLnlhbWwqIC4vXG5DT1BZIC0tZnJvbT1idWlsZCAvYXBwL2NvbmZpZyAuL2NvbmZpZ1xuQ09QWSAtLWZyb209YnVpbGQgL2FwcC9kaXN0IC4vZGlzdFxuQ09QWSAtLWZyb209cHJvZC1kZXBzIC9hcHAvbm9kZV9tb2R1bGVzIC4vbm9kZV9tb2R1bGVzXG5DT1BZIC0tZnJvbT1wcm9kLWRlcHMgL2FwcC8ke3Byb2plY3REaXJ9L3BhY2thZ2UuanNvbiAuLyR7cHJvamVjdERpcn0vcGFja2FnZS5qc29uXG5cbkVYUE9TRSAzMDAwXG4ke3N0YXJ0Q21kfVxuIyBFbnRyeSByZXNvbHZlZCBieSBwYWNrYWdlLmpzb24gXCIke3N0YXJ0U2NyaXB0fVwiIOKGkiBub2RlICR7c3RhcnRFbnRyeX1cbmA7XG59XG5cbi8qKiBucG0gYXV0aCArIHBucG0gaW5zdGFsbC4gVG9rZW4gaXMgcmVxdWlyZWQgYWdhaW4gaW4gcHJvZC1kZXBzIChzZXBhcmF0ZSBzdGFnZSwgbm8gc3RvcmUpLiAqL1xuZnVuY3Rpb24gcmVuZGVyUG5wbUluc3RhbGwobW9kZTogXCJhbGxcIiB8IFwicHJvZFwiKTogc3RyaW5nIHtcblx0Y29uc3QgZmxhZ3MgPSBtb2RlID09PSBcInByb2RcIiA/IFwiIC0tcHJvZFwiIDogXCJcIjtcblx0cmV0dXJuIGBBUkcgTk9ERV9BVVRIX1RPS0VOPVxuUlVOIC0tbW91bnQ9dHlwZT1zZWNyZXQsaWQ9bnBtX3Rva2VuLHJlcXVpcmVkPWZhbHNlIFxcXFxcblx0aWYgWyAtZiAvcnVuL3NlY3JldHMvbnBtX3Rva2VuIF07IHRoZW4gXFxcXFxuXHRcdFRPS0VOPVwiJChjYXQgL3J1bi9zZWNyZXRzL25wbV90b2tlbilcIjsgXFxcXFxuXHRlbHNlIFxcXFxcblx0XHRUT0tFTj1cIlxcJHtOT0RFX0FVVEhfVE9LRU59XCI7IFxcXFxcblx0Zmk7IFxcXFxcblx0aWYgWyAtbiBcIiRUT0tFTlwiIF07IHRoZW4gXFxcXFxuXHRcdGVjaG8gXCIvL3JlZ2lzdHJ5Lm5wbWpzLm9yZy86X2F1dGhUb2tlbj1cXCR7VE9LRU59XCIgPiAubnBtcmM7IFxcXFxcblx0Zmk7IFxcXFxcblx0aWYgWyAtZiBwbnBtLWxvY2sueWFtbCBdOyB0aGVuIFxcXFxcblx0XHRwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUke2ZsYWdzfTsgXFxcXFxuXHRlbHNlIFxcXFxcblx0XHRwbnBtIGluc3RhbGwke2ZsYWdzfTsgXFxcXFxuXHRmaTsgXFxcXFxuXHRybSAtZiAubnBtcmNgO1xufVxuXG5mdW5jdGlvbiBkb2NrZXJpZ25vcmVDb250ZW50KCk6IHN0cmluZyB7XG5cdHJldHVybiBbXG5cdFx0XCJub2RlX21vZHVsZXNcIixcblx0XHRcImRpc3RcIixcblx0XHRcIi5naXRcIixcblx0XHRcIi5kZXZjb250YWluZXJcIixcblx0XHRcIi52c2NvZGVcIixcblx0XHRcIi5naXRodWJcIixcblx0XHRcInBvc3RtYW5cIixcblx0XHRcIi5wb3N0bWFuXCIsXG5cdFx0XCIuZW52XCIsXG5cdFx0XCIuZW52LipcIixcblx0XHRcIiEuZW52LmV4YW1wbGVcIixcblx0XHRcImNvdmVyYWdlXCIsXG5cdFx0XCIqKi8qLnNwZWMudHNcIixcblx0XHRcIioqLyoudGVzdC50c1wiLFxuXHRcdFwiXCIsXG5cdF0uam9pbihcIlxcblwiKTtcbn1cbiJdLCJuYW1lcyI6WyJXRUxMX0tOT1dOX0ZJTEVTIiwiREVGQVVMVF9XRUJBUElfTkFNRSIsIndlYmFwaVByb2plY3REaXIiLCJ3ZWJhcGlSZWxlYXNlRW50cnkiLCJXZWJhcGlQcm9kdWN0aW9uRG9ja2VyZmlsZSIsImtleSIsIlBST0RVQ1RJT05fRE9DS0VSRklMRSIsImFwaU5hbWVzIiwib3B0aW9ucyIsImZpbGVzIiwibmFtZXMiLCJsZW5ndGgiLCJmaXJzdCIsIm5hbWVkT25seSIsInB1c2giLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJkb2NrZXJpZ25vcmVDb250ZW50IiwicmVuZGVyUHJvZHVjdGlvbkRvY2tlcmZpbGUiLCJlbWl0TmFtZWQiLCJuYW1lIiwiYXBpTmFtZSIsInN0YXJ0U2NyaXB0IiwicHJvamVjdERpciIsInN0YXJ0Q21kIiwic3RhcnRFbnRyeSIsImRvY2tlcmZpbGVGbGFnIiwicmVuZGVyUG5wbUluc3RhbGwiLCJtb2RlIiwiZmxhZ3MiLCJqb2luIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxnQkFBZ0IsUUFBUSx3QkFBd0I7QUFFekQsU0FBU0MsbUJBQW1CLEVBQUVDLGdCQUFnQixFQUFFQyxrQkFBa0IsUUFBUSxjQUFjO0FBT3hGOzs7Ozs7Ozs7Q0FTQyxHQUNELE9BQU8sTUFBTUM7OztJQUNJQyxNQUFNTCxpQkFBaUJNLHFCQUFxQixDQUFDO0lBRTdELFlBQ0MsQUFBaUJDLFdBQThCO1FBQUNOO0tBQW9CLEVBQ3BFLEFBQWlCTyxVQUF1QyxDQUFDLENBQUMsQ0FDekQ7YUFGZ0JELFdBQUFBO2FBQ0FDLFVBQUFBO0lBQ2Y7SUFFSUMsUUFBc0I7UUFDNUIsTUFBTUMsUUFBUSxJQUFJLENBQUNILFFBQVEsQ0FBQ0ksTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDSixRQUFRLEdBQUc7WUFBQ047U0FBb0I7UUFDOUUsTUFBTVcsUUFBUUYsS0FBSyxDQUFDLEVBQUUsSUFBSVQ7UUFDMUIsTUFBTVEsUUFBc0IsRUFBRTtRQUU5QixJQUFJLENBQUMsSUFBSSxDQUFDRCxPQUFPLENBQUNLLFNBQVMsRUFBRTtZQUM1QkosTUFBTUssSUFBSSxDQUFDO2dCQUNWQyxVQUFVO2dCQUNWQyxTQUFTQztZQUNWO1lBQ0FSLE1BQU1LLElBQUksQ0FBQztnQkFDVkMsVUFBVTtnQkFDVkMsU0FBU0UsMkJBQTJCTixPQUFPO1lBQzVDO1FBQ0Q7UUFFQSxNQUFNTyxZQUNMLElBQUksQ0FBQ1gsT0FBTyxDQUFDSyxTQUFTLElBQUlILE1BQU1DLE1BQU0sR0FBRyxLQUFLQyxVQUFVWDtRQUN6RCxJQUFJa0IsV0FBVztZQUNkLEtBQUssTUFBTUMsUUFBUVYsTUFBTztnQkFDekJELE1BQU1LLElBQUksQ0FBQztvQkFDVkMsVUFBVSxDQUFDLFdBQVcsRUFBRUssTUFBTTtvQkFDOUJKLFNBQVNFLDJCQUEyQkUsTUFBTSxDQUFDLE1BQU0sRUFBRUEsTUFBTTtnQkFDMUQ7WUFDRDtRQUNEO1FBRUEsT0FBT1g7SUFDUjtBQUNEO0FBRUEsT0FBTyxTQUFTUywyQkFBMkJHLE9BQWUsRUFBRUMsV0FBbUI7SUFDOUUsTUFBTUMsYUFBYXJCLGlCQUFpQm1CO0lBQ3BDLE1BQU1HLFdBQ0xGLGdCQUFnQixVQUNiLDBCQUNBLENBQUMscUJBQXFCLEVBQUVBLFlBQVksRUFBRSxDQUFDO0lBQzNDLE1BQU1HLGFBQWF0QixtQkFBbUJrQjtJQUN0QyxNQUFNSyxpQkFBaUJKLGdCQUFnQixVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUVELFNBQVM7SUFFbkUsT0FBTyxDQUFDOzs7c0RBRzZDLEVBQUVLLGVBQWU7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBaUJsRSxFQUFFSCxXQUFXLEdBQUcsRUFBRUEsV0FBVzs7QUFFbEMsRUFBRUksa0JBQWtCLE9BQU87Ozs7Ozs7Ozs7O0tBV3RCLEVBQUVKLFdBQVcsZ0JBQWdCLEVBQUVBLFdBQVc7O0FBRS9DLEVBQUVJLGtCQUFrQixRQUFROzs7Ozs7Ozs7Ozs7MkJBWUQsRUFBRUosV0FBVyxnQkFBZ0IsRUFBRUEsV0FBVzs7O0FBR3JFLEVBQUVDLFNBQVM7a0NBQ3VCLEVBQUVGLFlBQVksU0FBUyxFQUFFRyxXQUFXO0FBQ3RFLENBQUM7QUFDRDtBQUVBLDhGQUE4RixHQUM5RixTQUFTRSxrQkFBa0JDLElBQW9CO0lBQzlDLE1BQU1DLFFBQVFELFNBQVMsU0FBUyxZQUFZO0lBQzVDLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Z0NBV3VCLEVBQUVDLE1BQU07O2NBRTFCLEVBQUVBLE1BQU07O2FBRVQsQ0FBQztBQUNkO0FBRUEsU0FBU1o7SUFDUixPQUFPO1FBQ047UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO0tBQ0EsQ0FBQ2EsSUFBSSxDQUFDO0FBQ1IifQ==
@@ -1,8 +1,8 @@
1
1
  const SAMPLE_CONFIG_CONTENT = `export class SampleConfig {\n\tpublic greeting: string = "";\n}\n`;
2
2
  const SAMPLE_SERVICE_CONTENT = [
3
3
  `import { inject, injectable } from "@decohere/crucible/decorators";`,
4
- `import { ConfigurationServiceToken } from "@decohere/core/configuration";`,
5
- `import type { IConfigurationService } from "@decohere/core/configuration";`,
4
+ `import { ConfigurationServiceToken } from "@decohere/nexus/configuration";`,
5
+ `import type { IConfigurationService } from "@decohere/nexus/configuration";`,
6
6
  `import { SampleConfig } from "../sample.config.js";`,
7
7
  ``,
8
8
  `@injectable()`,
@@ -38,3 +38,5 @@ export class SampleServiceModel {
38
38
  ];
39
39
  }
40
40
  }
41
+
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvbW9kZWxzL3NhbXBsZS1maWxlcy5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNvdXJjZUZpbGUsIFNvdXJjZUZpbGVQcm92aWRlciB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc291cmNlLWZpbGUuanNcIjtcblxuY29uc3QgU0FNUExFX0NPTkZJR19DT05URU5UID0gYGV4cG9ydCBjbGFzcyBTYW1wbGVDb25maWcge1xcblxcdHB1YmxpYyBncmVldGluZzogc3RyaW5nID0gXCJcIjtcXG59XFxuYDtcblxuY29uc3QgU0FNUExFX1NFUlZJQ0VfQ09OVEVOVCA9IFtcblx0YGltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO2AsXG5cdGBpbXBvcnQgeyBDb25maWd1cmF0aW9uU2VydmljZVRva2VuIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb25maWd1cmF0aW9uXCI7YCxcblx0YGltcG9ydCB0eXBlIHsgSUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb25maWd1cmF0aW9uXCI7YCxcblx0YGltcG9ydCB7IFNhbXBsZUNvbmZpZyB9IGZyb20gXCIuLi9zYW1wbGUuY29uZmlnLmpzXCI7YCxcblx0YGAsXG5cdGBAaW5qZWN0YWJsZSgpYCxcblx0YGV4cG9ydCBjbGFzcyBTYW1wbGVTZXJ2aWNlIHtgLFxuXHRgXFx0cHVibGljIGNvbnN0cnVjdG9yKGAsXG5cdGBcXHRcXHRAaW5qZWN0KENvbmZpZ3VyYXRpb25TZXJ2aWNlVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBJQ29uZmlndXJhdGlvblNlcnZpY2UsYCxcblx0YFxcdCkge31gLFxuXHRgYCxcblx0YFxcdHB1YmxpYyBhc3luYyBnZXRHcmVldGluZygpOiBQcm9taXNlPHN0cmluZz4ge2AsXG5cdGBcXHRcXHRjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXQoU2FtcGxlQ29uZmlnKTtgLFxuXHRgXFx0XFx0cmV0dXJuIGNvbmZpZy5ncmVldGluZztgLFxuXHRgXFx0fWAsXG5cdGB9YCxcblx0YGAsXG5dLmpvaW4oXCJcXG5cIik7XG5cbmV4cG9ydCBjbGFzcyBTYW1wbGVDb25maWdNb2RlbCBpbXBsZW1lbnRzIFNvdXJjZUZpbGVQcm92aWRlciB7XG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9zYW1wbGUuY29uZmlnLnRzXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IFNBTVBMRV9DT05GSUdfQ09OVEVOVCxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgU2FtcGxlU2VydmljZU1vZGVsIGltcGxlbWVudHMgU291cmNlRmlsZVByb3ZpZGVyIHtcblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwic3JjL3NlcnZpY2VzL3NhbXBsZS5zZXJ2aWNlLnRzXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IFNBTVBMRV9TRVJWSUNFX0NPTlRFTlQsXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJTQU1QTEVfQ09ORklHX0NPTlRFTlQiLCJTQU1QTEVfU0VSVklDRV9DT05URU5UIiwiam9pbiIsIlNhbXBsZUNvbmZpZ01vZGVsIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJTYW1wbGVTZXJ2aWNlTW9kZWwiXSwibWFwcGluZ3MiOiJBQUVBLE1BQU1BLHdCQUF3QixDQUFDLGlFQUFpRSxDQUFDO0FBRWpHLE1BQU1DLHlCQUF5QjtJQUM5QixDQUFDLG1FQUFtRSxDQUFDO0lBQ3JFLENBQUMsMEVBQTBFLENBQUM7SUFDNUUsQ0FBQywyRUFBMkUsQ0FBQztJQUM3RSxDQUFDLG1EQUFtRCxDQUFDO0lBQ3JELEVBQUU7SUFDRixDQUFDLGFBQWEsQ0FBQztJQUNmLENBQUMsNEJBQTRCLENBQUM7SUFDOUIsQ0FBQyxxQkFBcUIsQ0FBQztJQUN2QixDQUFDLHNGQUFzRixDQUFDO0lBQ3hGLENBQUMsTUFBTSxDQUFDO0lBQ1IsRUFBRTtJQUNGLENBQUMsK0NBQStDLENBQUM7SUFDakQsQ0FBQyx1REFBdUQsQ0FBQztJQUN6RCxDQUFDLDJCQUEyQixDQUFDO0lBQzdCLENBQUMsR0FBRyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxFQUFFO0NBQ0YsQ0FBQ0MsSUFBSSxDQUFDO0FBRVAsT0FBTyxNQUFNQztJQUNMQyxRQUFzQjtRQUM1QixPQUFPO1lBQ047Z0JBQ0NDLFVBQVU7Z0JBQ1ZDLFNBQVNOO1lBQ1Y7U0FDQTtJQUNGO0FBQ0Q7QUFFQSxPQUFPLE1BQU1PO0lBQ0xILFFBQXNCO1FBQzVCLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVkMsU0FBU0w7WUFDVjtTQUNBO0lBQ0Y7QUFDRCJ9
@@ -16,3 +16,5 @@ import { CREATE_VERSION, DEVCONTAINER_IMAGE_REPOSITORY } from "../../version.js"
16
16
  ];
17
17
  }
18
18
  }
19
+
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvbW9kZWxzL3dlYmFwaS1pbWFnZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb2NrZXJmaWxlTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RvY2tlci1pbWFnZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQ1JFQVRFX1ZFUlNJT04sIERFVkNPTlRBSU5FUl9JTUFHRV9SRVBPU0lUT1JZIH0gZnJvbSBcIi4uLy4uL3ZlcnNpb24uanNcIjtcblxuLyoqXG4gKiBTY2FmZm9sZGVkIGFwcCBgLmRldmNvbnRhaW5lci9Eb2NrZXJmaWxlYCDigJQgdGhpbiBgRlJPTWAgdGhlIHB1Ymxpc2hlZCBiYXNlIGltYWdlLlxuICogT3B0aW9uYWwgZmVhdHVyZSBsYXllcnMgKGUuZy4gcG9zdGdyZXNxbC1jbGllbnQpIGFwcGVuZCB2aWEgYGFkZExheWVyYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdlYmFwaURldkNvbnRhaW5lciBleHRlbmRzIERvY2tlcmZpbGVNb2RlbCB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihiYXNlSW1hZ2UgPSBgJHtERVZDT05UQUlORVJfSU1BR0VfUkVQT1NJVE9SWX06JHtDUkVBVEVfVkVSU0lPTn1gKSB7XG5cdFx0c3VwZXIoYmFzZUltYWdlKTtcblx0fVxuXG5cdHB1YmxpYyBmaWxlcygpIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZGV2Y29udGFpbmVyL0RvY2tlcmZpbGVcIixcblx0XHRcdFx0Y29udGVudDogdGhpcy5idWlsZCgpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiRG9ja2VyZmlsZU1vZGVsIiwiQ1JFQVRFX1ZFUlNJT04iLCJERVZDT05UQUlORVJfSU1BR0VfUkVQT1NJVE9SWSIsIldlYmFwaURldkNvbnRhaW5lciIsImJhc2VJbWFnZSIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiYnVpbGQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGVBQWUsUUFBUSxxQ0FBcUM7QUFDckUsU0FBU0MsY0FBYyxFQUFFQyw2QkFBNkIsUUFBUSxtQkFBbUI7QUFFakY7OztDQUdDLEdBQ0QsT0FBTyxNQUFNQywyQkFBMkJIO0lBQ3ZDLFlBQW1CSSxZQUFZLEdBQUdGLDhCQUE4QixDQUFDLEVBQUVELGdCQUFnQixDQUFFO1FBQ3BGLEtBQUssQ0FBQ0c7SUFDUDtJQUVPQyxRQUFRO1FBQ2QsT0FBTztZQUNOO2dCQUNDQyxVQUFVO2dCQUNWQyxTQUFTLElBQUksQ0FBQ0MsS0FBSztZQUNwQjtTQUNBO0lBQ0Y7QUFDRCJ9
@@ -164,3 +164,5 @@
164
164
  }
165
165
  };
166
166
  }
167
+
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvcG9zdG1hbi9oZWxsby1vcGVuYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBNaW5pbWFsIE9wZW5BUEkgMyBkb2N1bWVudCBzaGFwZSB1c2VkIGZvciBQb3N0bWFuIGNvbnZlcnNpb24uICovXG5leHBvcnQgdHlwZSBTY2FmZm9sZE9wZW5BcGlEb2N1bWVudCA9IHtcblx0b3BlbmFwaTogXCIzLjAuM1wiO1xuXHRpbmZvOiB7IHRpdGxlOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfTtcblx0c2VydmVycz86IEFycmF5PHsgdXJsOiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nIH0+O1xuXHRwYXRoczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufTtcblxuLyoqXG4gKiBDYW5vbmljYWwgSGVsbG8gV2ViQVBJIE9wZW5BUEkgZG9jdW1lbnQgdXNlZCB0byBnZW5lcmF0ZSBQb3N0bWFuIHJlcXVlc3RzLlxuICogS2VlcCBwYXRocyBhbGlnbmVkIHdpdGggc2NhZmZvbGRlZCBIZWxsb0NvbnRyb2xsZXIgKGAvaGVsbG9gLCBgL2hlbGxvL3tpZH1gKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSGVsbG9PcGVuQXBpRG9jdW1lbnQocHJvamVjdE5hbWU6IHN0cmluZyk6IFNjYWZmb2xkT3BlbkFwaURvY3VtZW50IHtcblx0cmV0dXJuIHtcblx0XHRvcGVuYXBpOiBcIjMuMC4zXCIsXG5cdFx0aW5mbzoge1xuXHRcdFx0dGl0bGU6IGAke3Byb2plY3ROYW1lfSBXZWJBUElgLFxuXHRcdFx0dmVyc2lvbjogXCIxLjAuMFwiLFxuXHRcdFx0ZGVzY3JpcHRpb246XG5cdFx0XHRcdFwiR2VuZXJhdGVkIGZyb20gT3BlbkFQSSBmb3IgUG9zdG1hbi4gQXV0aC9lbnYgb3ZlcmxheXMgYXJlIGFwcGxpZWQgc2VwYXJhdGVseS5cIixcblx0XHR9LFxuXHRcdHNlcnZlcnM6IFt7IHVybDogXCJ7e2Jhc2VVcmx9fVwiIH1dLFxuXHRcdHBhdGhzOiB7XG5cdFx0XHRcIi9oZWxsb1wiOiB7XG5cdFx0XHRcdGdldDoge1xuXHRcdFx0XHRcdG9wZXJhdGlvbklkOiBcIkhlbGxvQ29udHJvbGxlci5nZXRBbGxcIixcblx0XHRcdFx0XHRzdW1tYXJ5OiBcIkxpc3QgKGFub255bW91cylcIixcblx0XHRcdFx0XHR0YWdzOiBbXCJIZWxsb1wiXSxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiZmlsdGVyXCIsIGluOiBcInF1ZXJ5XCIsIHJlcXVpcmVkOiBmYWxzZSwgc2NoZW1hOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0cmVzcG9uc2VzOiB7IFwiMjAwXCI6IHsgZGVzY3JpcHRpb246IFwiU3VjY2Vzc2Z1bCByZXNwb25zZVwiIH0gfSxcblx0XHRcdFx0fSxcblx0XHRcdFx0cG9zdDoge1xuXHRcdFx0XHRcdG9wZXJhdGlvbklkOiBcIkhlbGxvQ29udHJvbGxlci5jcmVhdGVcIixcblx0XHRcdFx0XHRzdW1tYXJ5OiBcIkNyZWF0ZVwiLFxuXHRcdFx0XHRcdHRhZ3M6IFtcIkhlbGxvXCJdLFxuXHRcdFx0XHRcdHJlcXVlc3RCb2R5OiB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0XHRcdFx0XCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRzY2hlbWE6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwib2JqZWN0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0aWVzOiB7IG1lc3NhZ2U6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZDogW1wibWVzc2FnZVwiXSxcblx0XHRcdFx0XHRcdFx0XHRcdGV4YW1wbGU6IHsgbWVzc2FnZTogXCJoZWxsb1wiIH0sXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZXNwb25zZXM6IHsgXCIyMDBcIjogeyBkZXNjcmlwdGlvbjogXCJTdWNjZXNzZnVsIHJlc3BvbnNlXCIgfSB9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdFwiL2hlbGxvL3tpZH1cIjoge1xuXHRcdFx0XHRnZXQ6IHtcblx0XHRcdFx0XHRvcGVyYXRpb25JZDogXCJIZWxsb0NvbnRyb2xsZXIuZ2V0T25lXCIsXG5cdFx0XHRcdFx0c3VtbWFyeTogXCJHZXQgYnkgaWRcIixcblx0XHRcdFx0XHR0YWdzOiBbXCJIZWxsb1wiXSxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBbeyBuYW1lOiBcImlkXCIsIGluOiBcInBhdGhcIiwgcmVxdWlyZWQ6IHRydWUsIHNjaGVtYTogeyB0eXBlOiBcInN0cmluZ1wiIH0gfV0sXG5cdFx0XHRcdFx0cmVzcG9uc2VzOiB7IFwiMjAwXCI6IHsgZGVzY3JpcHRpb246IFwiU3VjY2Vzc2Z1bCByZXNwb25zZVwiIH0gfSxcblx0XHRcdFx0fSxcblx0XHRcdFx0cHV0OiB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uSWQ6IFwiSGVsbG9Db250cm9sbGVyLnVwZGF0ZVwiLFxuXHRcdFx0XHRcdHN1bW1hcnk6IFwiVXBkYXRlXCIsXG5cdFx0XHRcdFx0dGFnczogW1wiSGVsbG9cIl0sXG5cdFx0XHRcdFx0cGFyYW1ldGVyczogW3sgbmFtZTogXCJpZFwiLCBpbjogXCJwYXRoXCIsIHJlcXVpcmVkOiB0cnVlLCBzY2hlbWE6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH1dLFxuXHRcdFx0XHRcdHJlcXVlc3RCb2R5OiB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0XHRcdFx0XCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRzY2hlbWE6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwib2JqZWN0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0aWVzOiB7IG1lc3NhZ2U6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZDogW1wibWVzc2FnZVwiXSxcblx0XHRcdFx0XHRcdFx0XHRcdGV4YW1wbGU6IHsgbWVzc2FnZTogXCJ1cGRhdGVkXCIgfSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlc3BvbnNlczogeyBcIjIwMFwiOiB7IGRlc2NyaXB0aW9uOiBcIlN1Y2Nlc3NmdWwgcmVzcG9uc2VcIiB9IH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRlbGV0ZToge1xuXHRcdFx0XHRcdG9wZXJhdGlvbklkOiBcIkhlbGxvQ29udHJvbGxlci5yZW1vdmVcIixcblx0XHRcdFx0XHRzdW1tYXJ5OiBcIkRlbGV0ZVwiLFxuXHRcdFx0XHRcdHRhZ3M6IFtcIkhlbGxvXCJdLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM6IFt7IG5hbWU6IFwiaWRcIiwgaW46IFwicGF0aFwiLCByZXF1aXJlZDogdHJ1ZSwgc2NoZW1hOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9XSxcblx0XHRcdFx0XHRyZXNwb25zZXM6IHsgXCIyMDBcIjogeyBkZXNjcmlwdGlvbjogXCJTdWNjZXNzZnVsIHJlc3BvbnNlXCIgfSB9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9O1xufVxuIl0sIm5hbWVzIjpbImJ1aWxkSGVsbG9PcGVuQXBpRG9jdW1lbnQiLCJwcm9qZWN0TmFtZSIsIm9wZW5hcGkiLCJpbmZvIiwidGl0bGUiLCJ2ZXJzaW9uIiwiZGVzY3JpcHRpb24iLCJzZXJ2ZXJzIiwidXJsIiwicGF0aHMiLCJnZXQiLCJvcGVyYXRpb25JZCIsInN1bW1hcnkiLCJ0YWdzIiwicGFyYW1ldGVycyIsIm5hbWUiLCJpbiIsInJlcXVpcmVkIiwic2NoZW1hIiwidHlwZSIsInJlc3BvbnNlcyIsInBvc3QiLCJyZXF1ZXN0Qm9keSIsImNvbnRlbnQiLCJwcm9wZXJ0aWVzIiwibWVzc2FnZSIsImV4YW1wbGUiLCJwdXQiLCJkZWxldGUiXSwibWFwcGluZ3MiOiJBQUFBLGtFQUFrRSxHQVFsRTs7O0NBR0MsR0FDRCxPQUFPLFNBQVNBLDBCQUEwQkMsV0FBbUI7SUFDNUQsT0FBTztRQUNOQyxTQUFTO1FBQ1RDLE1BQU07WUFDTEMsT0FBTyxHQUFHSCxZQUFZLE9BQU8sQ0FBQztZQUM5QkksU0FBUztZQUNUQyxhQUNDO1FBQ0Y7UUFDQUMsU0FBUztZQUFDO2dCQUFFQyxLQUFLO1lBQWM7U0FBRTtRQUNqQ0MsT0FBTztZQUNOLFVBQVU7Z0JBQ1RDLEtBQUs7b0JBQ0pDLGFBQWE7b0JBQ2JDLFNBQVM7b0JBQ1RDLE1BQU07d0JBQUM7cUJBQVE7b0JBQ2ZDLFlBQVk7d0JBQ1g7NEJBQUVDLE1BQU07NEJBQVVDLElBQUk7NEJBQVNDLFVBQVU7NEJBQU9DLFFBQVE7Z0NBQUVDLE1BQU07NEJBQVM7d0JBQUU7cUJBQzNFO29CQUNEQyxXQUFXO3dCQUFFLE9BQU87NEJBQUVkLGFBQWE7d0JBQXNCO29CQUFFO2dCQUM1RDtnQkFDQWUsTUFBTTtvQkFDTFYsYUFBYTtvQkFDYkMsU0FBUztvQkFDVEMsTUFBTTt3QkFBQztxQkFBUTtvQkFDZlMsYUFBYTt3QkFDWkwsVUFBVTt3QkFDVk0sU0FBUzs0QkFDUixvQkFBb0I7Z0NBQ25CTCxRQUFRO29DQUNQQyxNQUFNO29DQUNOSyxZQUFZO3dDQUFFQyxTQUFTOzRDQUFFTixNQUFNO3dDQUFTO29DQUFFO29DQUMxQ0YsVUFBVTt3Q0FBQztxQ0FBVTtvQ0FDckJTLFNBQVM7d0NBQUVELFNBQVM7b0NBQVE7Z0NBQzdCOzRCQUNEO3dCQUNEO29CQUNEO29CQUNBTCxXQUFXO3dCQUFFLE9BQU87NEJBQUVkLGFBQWE7d0JBQXNCO29CQUFFO2dCQUM1RDtZQUNEO1lBQ0EsZUFBZTtnQkFDZEksS0FBSztvQkFDSkMsYUFBYTtvQkFDYkMsU0FBUztvQkFDVEMsTUFBTTt3QkFBQztxQkFBUTtvQkFDZkMsWUFBWTt3QkFBQzs0QkFBRUMsTUFBTTs0QkFBTUMsSUFBSTs0QkFBUUMsVUFBVTs0QkFBTUMsUUFBUTtnQ0FBRUMsTUFBTTs0QkFBUzt3QkFBRTtxQkFBRTtvQkFDcEZDLFdBQVc7d0JBQUUsT0FBTzs0QkFBRWQsYUFBYTt3QkFBc0I7b0JBQUU7Z0JBQzVEO2dCQUNBcUIsS0FBSztvQkFDSmhCLGFBQWE7b0JBQ2JDLFNBQVM7b0JBQ1RDLE1BQU07d0JBQUM7cUJBQVE7b0JBQ2ZDLFlBQVk7d0JBQUM7NEJBQUVDLE1BQU07NEJBQU1DLElBQUk7NEJBQVFDLFVBQVU7NEJBQU1DLFFBQVE7Z0NBQUVDLE1BQU07NEJBQVM7d0JBQUU7cUJBQUU7b0JBQ3BGRyxhQUFhO3dCQUNaTCxVQUFVO3dCQUNWTSxTQUFTOzRCQUNSLG9CQUFvQjtnQ0FDbkJMLFFBQVE7b0NBQ1BDLE1BQU07b0NBQ05LLFlBQVk7d0NBQUVDLFNBQVM7NENBQUVOLE1BQU07d0NBQVM7b0NBQUU7b0NBQzFDRixVQUFVO3dDQUFDO3FDQUFVO29DQUNyQlMsU0FBUzt3Q0FBRUQsU0FBUztvQ0FBVTtnQ0FDL0I7NEJBQ0Q7d0JBQ0Q7b0JBQ0Q7b0JBQ0FMLFdBQVc7d0JBQUUsT0FBTzs0QkFBRWQsYUFBYTt3QkFBc0I7b0JBQUU7Z0JBQzVEO2dCQUNBc0IsUUFBUTtvQkFDUGpCLGFBQWE7b0JBQ2JDLFNBQVM7b0JBQ1RDLE1BQU07d0JBQUM7cUJBQVE7b0JBQ2ZDLFlBQVk7d0JBQUM7NEJBQUVDLE1BQU07NEJBQU1DLElBQUk7NEJBQVFDLFVBQVU7NEJBQU1DLFFBQVE7Z0NBQUVDLE1BQU07NEJBQVM7d0JBQUU7cUJBQUU7b0JBQ3BGQyxXQUFXO3dCQUFFLE9BQU87NEJBQUVkLGFBQWE7d0JBQXNCO29CQUFFO2dCQUM1RDtZQUNEO1FBQ0Q7SUFDRDtBQUNEIn0=
@@ -165,3 +165,5 @@ function requestUrlForLocalView(request) {
165
165
  function sanitizeFileName(name) {
166
166
  return name.replace(/[^\w\s()-]+/g, "").trim() || "Request";
167
167
  }
168
+
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvcG9zdG1hbi9sb2NhbC12aWV3LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7XG5cdHR5cGUgQXV0aDBFbnYsXG5cdG9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbixcblx0dHlwZSBQb3N0bWFuQ29sbGVjdGlvbixcblx0dHlwZSBQb3N0bWFuSXRlbSxcblx0dHlwZSBQb3N0bWFuUmVxdWVzdCxcbn0gZnJvbSBcIi4vb3BlbmFwaS10by1wb3N0bWFuLmpzXCI7XG5cbmZ1bmN0aW9uIHlhbWxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0aWYgKC9bOiN7fVtcXF0sJio/fDw+PSElQGBdLy50ZXN0KHZhbHVlKSB8fCB2YWx1ZS5pbmNsdWRlcyhcIlxcblwiKSB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKiogTG9jYWwgVmlldyAvIE5hdGl2ZSBHaXQgZW52aXJvbm1lbnQgKFlBTUwpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW52aXJvbm1lbnRZYW1sKFxuXHRuYW1lOiBzdHJpbmcsXG5cdGF1dGg6IEF1dGgwRW52IHwgdW5kZWZpbmVkLFxuXHRvcHRpb25zOiB7IGNhbGxiYWNrczogcmVhZG9ubHkgc3RyaW5nW107IHNjb3Blczogc3RyaW5nIH0sXG4pOiBzdHJpbmcge1xuXHRjb25zdCB2YWx1ZXM6IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4gPSBbXG5cdFx0eyBrZXk6IFwiYmFzZVVybFwiLCB2YWx1ZTogXCJodHRwOi8vbG9jYWxob3N0OjMwMDBcIiB9LFxuXHRdO1xuXHRpZiAoYXV0aD8uYXV0aDBEb21haW4pIHtcblx0XHR2YWx1ZXMucHVzaChcblx0XHRcdHsga2V5OiBcImF1dGgwRG9tYWluXCIsIHZhbHVlOiBhdXRoLmF1dGgwRG9tYWluIH0sXG5cdFx0XHR7IGtleTogXCJhdXRoMEF1ZGllbmNlXCIsIHZhbHVlOiBhdXRoLmF1dGgwQXVkaWVuY2UgPz8gXCJcIiB9LFxuXHRcdFx0eyBrZXk6IFwiYXV0aDBDbGllbnRJZFwiLCB2YWx1ZTogYXV0aC5hdXRoMENsaWVudElkID8/IFwiXCIgfSxcblx0XHRcdHtcblx0XHRcdFx0a2V5OiBcImF1dGhVcmxcIixcblx0XHRcdFx0dmFsdWU6IGBodHRwczovLyR7YXV0aC5hdXRoMERvbWFpbn0vYXV0aG9yaXplP2F1ZGllbmNlPSR7YXV0aC5hdXRoMEF1ZGllbmNlID8/IFwiXCJ9YCxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGtleTogXCJhY2Nlc3NUb2tlblVybFwiLFxuXHRcdFx0XHR2YWx1ZTogYGh0dHBzOi8vJHthdXRoLmF1dGgwRG9tYWlufS9vYXV0aC90b2tlbmAsXG5cdFx0XHR9LFxuXHRcdFx0eyBrZXk6IFwiY2FsbGJhY2tVcmxcIiwgdmFsdWU6IG9wdGlvbnMuY2FsbGJhY2tzWzBdIH0sXG5cdFx0XHR7IGtleTogXCJzY29wZVwiLCB2YWx1ZTogb3B0aW9ucy5zY29wZXMgfSxcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgbGluZXMgPSBbYG5hbWU6ICR7eWFtbFF1b3RlKG5hbWUpfWAsIFwidmFsdWVzOlwiXTtcblx0Zm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuXHRcdGxpbmVzLnB1c2goYCAgLSBrZXk6ICR7di5rZXl9YCk7XG5cdFx0bGluZXMucHVzaChgICAgIHZhbHVlOiAke3lhbWxRdW90ZSh2LnZhbHVlKX1gKTtcblx0XHRsaW5lcy5wdXNoKFwiICAgIGVuYWJsZWQ6IHRydWVcIik7XG5cdH1cblx0cmV0dXJuIGAke2xpbmVzLmpvaW4oXCJcXG5cIil9XFxuYDtcbn1cblxuLyoqXG4gKiBCdWlsZCBQb3N0bWFuIExvY2FsIFZpZXcgbXVsdGktZmlsZSBZQU1MIGZyb20gYSB2Mi4xIGNvbGxlY3Rpb24gKHJvdXRlcylcbiAqIHBsdXMgaGFuZC1hdXRob3JlZCBBdXRoMCBvdmVybGF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMb2NhbFZpZXdGaWxlc0Zyb21Db2xsZWN0aW9uKFxuXHRjb2xsZWN0aW9uOiBQb3N0bWFuQ29sbGVjdGlvbixcblx0cHJvamVjdE5hbWU6IHN0cmluZyxcblx0YXV0aDogQXV0aDBFbnYgfCB1bmRlZmluZWQsXG5cdG9wdGlvbnM6IHsgY2FsbGJhY2tzOiByZWFkb25seSBzdHJpbmdbXTsgc2NvcGVzOiBzdHJpbmcgfSxcbik6IEFycmF5PHsgZmlsZVBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+IHtcblx0Y29uc3QgY29sbGVjdGlvbkRpciA9IGBwb3N0bWFuL2NvbGxlY3Rpb25zLyR7cHJvamVjdE5hbWV9IFdlYkFQSWA7XG5cdGNvbnN0IGZpbGVzOiBBcnJheTx7IGZpbGVQYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9PiA9IFtdO1xuXG5cdGNvbnN0IGF1dGhCbG9jayA9IGF1dGg/LmF1dGgwRG9tYWluXG5cdFx0PyBbXG5cdFx0XHRcdFwiYXV0aDpcIixcblx0XHRcdFx0YCAgLSBpZDogJHtyYW5kb21VVUlEKCl9YCxcblx0XHRcdFx0XCIgICAgdHlwZTogb2F1dGgyXCIsXG5cdFx0XHRcdFwiICAgIG5hbWU6IE9BdXRoIDIuMFwiLFxuXHRcdFx0XHRcIiAgICBjcmVkZW50aWFsczpcIixcblx0XHRcdFx0XCIgICAgICBhZGRUb2tlblRvOiBoZWFkZXJcIixcblx0XHRcdFx0XCIgICAgICBncmFudF90eXBlOiBhdXRob3JpemF0aW9uX2NvZGVfd2l0aF9wa2NlXCIsXG5cdFx0XHRcdGAgICAgICBhdXRoVXJsOiBodHRwczovLyR7YXV0aC5hdXRoMERvbWFpbn0vYXV0aG9yaXplP2F1ZGllbmNlPSR7YXV0aC5hdXRoMEF1ZGllbmNlID8/IFwiXCJ9YCxcblx0XHRcdFx0YCAgICAgIGFjY2Vzc1Rva2VuVXJsOiBodHRwczovLyR7YXV0aC5hdXRoMERvbWFpbn0vb2F1dGgvdG9rZW5gLFxuXHRcdFx0XHRgICAgICAgY2xpZW50SWQ6ICR7eWFtbFF1b3RlKGF1dGguYXV0aDBDbGllbnRJZCA/PyBcIlwiKX1gLFxuXHRcdFx0XHRgICAgICAgc2NvcGU6ICR7eWFtbFF1b3RlKG9wdGlvbnMuc2NvcGVzKX1gLFxuXHRcdFx0XHRgICAgICAgcmVkaXJlY3RfdXJpOiAke29wdGlvbnMuY2FsbGJhY2tzWzBdfWAsXG5cdFx0XHRcdFwiICAgICAgdXNlQnJvd3NlcjogdHJ1ZVwiLFxuXHRcdFx0XHRcIiAgICAgIGNoYWxsZW5nZUFsZ29yaXRobTogUzI1NlwiLFxuXHRcdFx0XHRcIiAgICAgIGNsaWVudF9hdXRoZW50aWNhdGlvbjogYm9keVwiLFxuXHRcdFx0XHQnICAgICAgY2xpZW50U2VjcmV0OiBcIlwiJyxcblx0XHRcdFx0YCAgICAgIHRva2VuTmFtZTogJHt5YW1sUXVvdGUoYCR7cHJvamVjdE5hbWV9IEFjY2VzcyBUb2tlbmApfWAsXG5cdFx0XHRcdFwiXCIsXG5cdFx0XHRdLmpvaW4oXCJcXG5cIilcblx0XHQ6IFwiXCI7XG5cblx0ZmlsZXMucHVzaCh7XG5cdFx0ZmlsZVBhdGg6IGAke2NvbGxlY3Rpb25EaXJ9Ly5yZXNvdXJjZXMvZGVmaW5pdGlvbi55YW1sYCxcblx0XHRjb250ZW50OiBbXG5cdFx0XHRcIiRraW5kOiBjb2xsZWN0aW9uXCIsXG5cdFx0XHRgbmFtZTogJHt5YW1sUXVvdGUoYCR7cHJvamVjdE5hbWV9IFdlYkFQSWApfWAsXG5cdFx0XHRcInNjaGVtYVZlcnNpb246ICczLjAnXCIsXG5cdFx0XHRcImRlc2NyaXB0aW9uOiA+LVwiLFxuXHRcdFx0XCIgIE9wZW4gdGhpcyBwcm9qZWN0IHJvb3QgaW4gUG9zdG1hbiBMb2NhbCBWaWV3IChGaWxlcyDihpIgT3BlbiBmb2xkZXIpLlwiLFxuXHRcdFx0XCIgIFNlbGVjdCB0aGUgTG9jYWwgZW52aXJvbm1lbnQsIHRoZW4gQXV0aG9yaXphdGlvbiDihpIgR2V0IE5ldyBBY2Nlc3MgVG9rZW4gKFBLQ0UpLlwiLFxuXHRcdFx0XCIgIFJvdXRlIHJlcXVlc3RzIGFyZSBnZW5lcmF0ZWQgZnJvbSBPcGVuQVBJOyBBdXRoMCBvdmVybGF5IGlzIGhhbmQtYXV0aG9yZWQuXCIsXG5cdFx0XHRhdXRoQmxvY2ssXG5cdFx0XVxuXHRcdFx0LmZpbHRlcigobCkgPT4gbCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0LmpvaW4oXCJcXG5cIilcblx0XHRcdC5yZXBsYWNlKC9cXG4rJC8sIFwiXFxuXCIpLFxuXHR9KTtcblxuXHRsZXQgZm9sZGVyT3JkZXIgPSAxMDAwO1xuXHRmb3IgKGNvbnN0IGZvbGRlciBvZiBjb2xsZWN0aW9uLml0ZW0gPz8gW10pIHtcblx0XHRpZiAoZm9sZGVyLml0ZW0gPT0gbnVsbCkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IGZvbGRlck5hbWUgPSBmb2xkZXIubmFtZSA/PyBcIlJlcXVlc3RzXCI7XG5cdFx0ZmlsZXMucHVzaCh7XG5cdFx0XHRmaWxlUGF0aDogYCR7Y29sbGVjdGlvbkRpcn0vJHtmb2xkZXJOYW1lfS8ucmVzb3VyY2VzL2RlZmluaXRpb24ueWFtbGAsXG5cdFx0XHRjb250ZW50OiBbXG5cdFx0XHRcdFwiJGtpbmQ6IGZvbGRlclwiLFxuXHRcdFx0XHRgbmFtZTogJHt5YW1sUXVvdGUoZm9sZGVyTmFtZSl9YCxcblx0XHRcdFx0YG9yZGVyOiAke2ZvbGRlck9yZGVyfWAsXG5cdFx0XHRcdFwiXCIsXG5cdFx0XHRdLmpvaW4oXCJcXG5cIiksXG5cdFx0fSk7XG5cdFx0Zm9sZGVyT3JkZXIgKz0gMTAwMDtcblxuXHRcdGxldCByZXF1ZXN0T3JkZXIgPSAxMDAwO1xuXHRcdGZvciAoY29uc3QgY2hpbGQgb2YgZm9sZGVyLml0ZW0pIHtcblx0XHRcdGNvbnN0IHlhbWwgPSByZXF1ZXN0VG9Mb2NhbFZpZXdZYW1sKGNoaWxkLCByZXF1ZXN0T3JkZXIpO1xuXHRcdFx0aWYgKHlhbWwgPT0gbnVsbCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGZpbGVOYW1lID0gYCR7c2FuaXRpemVGaWxlTmFtZShjaGlsZC5uYW1lID8/IFwiUmVxdWVzdFwiKX0ucmVxdWVzdC55YW1sYDtcblx0XHRcdGZpbGVzLnB1c2goe1xuXHRcdFx0XHRmaWxlUGF0aDogYCR7Y29sbGVjdGlvbkRpcn0vJHtmb2xkZXJOYW1lfS8ke2ZpbGVOYW1lfWAsXG5cdFx0XHRcdGNvbnRlbnQ6IHlhbWwsXG5cdFx0XHR9KTtcblx0XHRcdHJlcXVlc3RPcmRlciArPSAxMDAwO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmaWxlcztcbn1cblxuZnVuY3Rpb24gcmVxdWVzdFRvTG9jYWxWaWV3WWFtbChpdGVtOiBQb3N0bWFuSXRlbSwgb3JkZXI6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuXHRjb25zdCByZXF1ZXN0ID0gaXRlbS5yZXF1ZXN0O1xuXHRpZiAocmVxdWVzdCA9PSBudWxsKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgbWV0aG9kID0gKHJlcXVlc3QubWV0aG9kID8/IFwiR0VUXCIpLnRvVXBwZXJDYXNlKCk7XG5cdGNvbnN0IHVybCA9IHJlcXVlc3RVcmxGb3JMb2NhbFZpZXcocmVxdWVzdCk7XG5cdGNvbnN0IGxpbmVzID0gW1xuXHRcdFwiJGtpbmQ6IGh0dHAtcmVxdWVzdFwiLFxuXHRcdGBuYW1lOiAke3lhbWxRdW90ZShpdGVtLm5hbWUgPz8gbWV0aG9kKX1gLFxuXHRcdGBtZXRob2Q6ICR7bWV0aG9kfWAsXG5cdFx0YHVybDogJHt5YW1sUXVvdGUodXJsKX1gLFxuXHRdO1xuXG5cdGlmIChyZXF1ZXN0LmF1dGg/LnR5cGUgPT09IFwibm9hdXRoXCIpIHtcblx0XHRsaW5lcy5wdXNoKFwiYXV0aDpcIiwgXCIgIHR5cGU6IG5vYXV0aFwiKTtcblx0fVxuXG5cdGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxdWVzdC5oZWFkZXI/LmZpbmQoXG5cdFx0KGgpID0+IGgua2V5LnRvTG93ZXJDYXNlKCkgPT09IFwiY29udGVudC10eXBlXCIsXG5cdCk/LnZhbHVlO1xuXHRjb25zdCByYXdCb2R5ID0gcmVxdWVzdC5ib2R5Py5yYXc/LnRyaW0oKTtcblx0aWYgKHJhd0JvZHkpIHtcblx0XHRsaW5lcy5wdXNoKFwiaGVhZGVyczpcIik7XG5cdFx0bGluZXMucHVzaChgICBDb250ZW50LVR5cGU6ICR7Y29udGVudFR5cGUgPz8gXCJhcHBsaWNhdGlvbi9qc29uXCJ9YCk7XG5cdFx0bGluZXMucHVzaChcImJvZHk6XCIpO1xuXHRcdGxpbmVzLnB1c2goXCIgIHR5cGU6IGpzb25cIik7XG5cdFx0bGluZXMucHVzaChcIiAgY29udGVudDogfC1cIik7XG5cdFx0Zm9yIChjb25zdCBib2R5TGluZSBvZiByYXdCb2R5LnNwbGl0KFwiXFxuXCIpKSB7XG5cdFx0XHRsaW5lcy5wdXNoKGAgICAgJHtib2R5TGluZX1gKTtcblx0XHR9XG5cdH1cblxuXHRsaW5lcy5wdXNoKGBvcmRlcjogJHtvcmRlcn1gLCBcIlwiKTtcblx0cmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RVcmxGb3JMb2NhbFZpZXcocmVxdWVzdDogUG9zdG1hblJlcXVlc3QpOiBzdHJpbmcge1xuXHRjb25zdCB1cmwgPSByZXF1ZXN0LnVybDtcblx0aWYgKHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gb3BlbkFwaVBhdGhQYXJhbXNUb0NvbG9uKHVybCk7XG5cdH1cblx0aWYgKHVybD8ucmF3KSB7XG5cdFx0cmV0dXJuIG9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbih1cmwucmF3KTtcblx0fVxuXHRjb25zdCBob3N0ID0gdXJsPy5ob3N0Py5bMF0gPz8gXCJ7e2Jhc2VVcmx9fVwiO1xuXHRjb25zdCBwYXRoID0gKHVybD8ucGF0aCA/PyBbXSlcblx0XHQubWFwKChzZWdtZW50KSA9PiBvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24oU3RyaW5nKHNlZ21lbnQpKSlcblx0XHQuam9pbihcIi9cIik7XG5cdHJldHVybiBwYXRoID8gYCR7aG9zdH0vJHtwYXRofWAgOiBob3N0O1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUZpbGVOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBuYW1lLnJlcGxhY2UoL1teXFx3XFxzKCktXSsvZywgXCJcIikudHJpbSgpIHx8IFwiUmVxdWVzdFwiO1xufVxuIl0sIm5hbWVzIjpbInJhbmRvbVVVSUQiLCJvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24iLCJ5YW1sUXVvdGUiLCJ2YWx1ZSIsInRlc3QiLCJpbmNsdWRlcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJidWlsZEVudmlyb25tZW50WWFtbCIsIm5hbWUiLCJhdXRoIiwib3B0aW9ucyIsInZhbHVlcyIsImtleSIsImF1dGgwRG9tYWluIiwicHVzaCIsImF1dGgwQXVkaWVuY2UiLCJhdXRoMENsaWVudElkIiwiY2FsbGJhY2tzIiwic2NvcGVzIiwibGluZXMiLCJ2Iiwiam9pbiIsImJ1aWxkTG9jYWxWaWV3RmlsZXNGcm9tQ29sbGVjdGlvbiIsImNvbGxlY3Rpb24iLCJwcm9qZWN0TmFtZSIsImNvbGxlY3Rpb25EaXIiLCJmaWxlcyIsImF1dGhCbG9jayIsImZpbGVQYXRoIiwiY29udGVudCIsImZpbHRlciIsImwiLCJ1bmRlZmluZWQiLCJyZXBsYWNlIiwiZm9sZGVyT3JkZXIiLCJmb2xkZXIiLCJpdGVtIiwiZm9sZGVyTmFtZSIsInJlcXVlc3RPcmRlciIsImNoaWxkIiwieWFtbCIsInJlcXVlc3RUb0xvY2FsVmlld1lhbWwiLCJmaWxlTmFtZSIsInNhbml0aXplRmlsZU5hbWUiLCJvcmRlciIsInJlcXVlc3QiLCJtZXRob2QiLCJ0b1VwcGVyQ2FzZSIsInVybCIsInJlcXVlc3RVcmxGb3JMb2NhbFZpZXciLCJ0eXBlIiwiY29udGVudFR5cGUiLCJoZWFkZXIiLCJmaW5kIiwiaCIsInRvTG93ZXJDYXNlIiwicmF3Qm9keSIsImJvZHkiLCJyYXciLCJ0cmltIiwiYm9keUxpbmUiLCJzcGxpdCIsImhvc3QiLCJwYXRoIiwibWFwIiwic2VnbWVudCIsIlN0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsVUFBVSxRQUFRLGNBQWM7QUFDekMsU0FFQ0Msd0JBQXdCLFFBSWxCLDBCQUEwQjtBQUVqQyxTQUFTQyxVQUFVQyxLQUFhO0lBQy9CLElBQUksd0JBQXdCQyxJQUFJLENBQUNELFVBQVVBLE1BQU1FLFFBQVEsQ0FBQyxTQUFTRixVQUFVLElBQUk7UUFDaEYsT0FBT0csS0FBS0MsU0FBUyxDQUFDSjtJQUN2QjtJQUNBLE9BQU9BO0FBQ1I7QUFFQSxnREFBZ0QsR0FDaEQsT0FBTyxTQUFTSyxxQkFDZkMsSUFBWSxFQUNaQyxJQUEwQixFQUMxQkMsT0FBeUQ7SUFFekQsTUFBTUMsU0FBZ0Q7UUFDckQ7WUFBRUMsS0FBSztZQUFXVixPQUFPO1FBQXdCO0tBQ2pEO0lBQ0QsSUFBSU8sTUFBTUksYUFBYTtRQUN0QkYsT0FBT0csSUFBSSxDQUNWO1lBQUVGLEtBQUs7WUFBZVYsT0FBT08sS0FBS0ksV0FBVztRQUFDLEdBQzlDO1lBQUVELEtBQUs7WUFBaUJWLE9BQU9PLEtBQUtNLGFBQWEsSUFBSTtRQUFHLEdBQ3hEO1lBQUVILEtBQUs7WUFBaUJWLE9BQU9PLEtBQUtPLGFBQWEsSUFBSTtRQUFHLEdBQ3hEO1lBQ0NKLEtBQUs7WUFDTFYsT0FBTyxDQUFDLFFBQVEsRUFBRU8sS0FBS0ksV0FBVyxDQUFDLG9CQUFvQixFQUFFSixLQUFLTSxhQUFhLElBQUksSUFBSTtRQUNwRixHQUNBO1lBQ0NILEtBQUs7WUFDTFYsT0FBTyxDQUFDLFFBQVEsRUFBRU8sS0FBS0ksV0FBVyxDQUFDLFlBQVksQ0FBQztRQUNqRCxHQUNBO1lBQUVELEtBQUs7WUFBZVYsT0FBT1EsUUFBUU8sU0FBUyxDQUFDLEVBQUU7UUFBQyxHQUNsRDtZQUFFTCxLQUFLO1lBQVNWLE9BQU9RLFFBQVFRLE1BQU07UUFBQztJQUV4QztJQUVBLE1BQU1DLFFBQVE7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
@@ -1,7 +1,5 @@
1
- async function convertAsync(data, options) {
2
- // Loaded here, not at the top: the converter pulls in about 700 modules (lodash, faker, ajv,
3
- // …), which every scaffolder run paid for even with `--postman none`.
4
- const { default: converter } = await import("openapi-to-postmanv2");
1
+ import converter from "openapi-to-postmanv2";
2
+ function convertAsync(data, options) {
5
3
  return new Promise((resolve, reject)=>{
6
4
  converter.convert({
7
5
  type: "json",
@@ -177,3 +175,5 @@ function normalizePath(rawUrl) {
177
175
  path: segments
178
176
  };
179
177
  }
178
+
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvcG9zdG1hbi9vcGVuYXBpLXRvLXBvc3RtYW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbnZlcnRlciBmcm9tIFwib3BlbmFwaS10by1wb3N0bWFudjJcIjtcbmltcG9ydCB0eXBlIHsgU2NhZmZvbGRPcGVuQXBpRG9jdW1lbnQgfSBmcm9tIFwiLi9oZWxsby1vcGVuYXBpLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFBvc3RtYW5Db2xsZWN0aW9uID0ge1xuXHRpbmZvOiB7XG5cdFx0X3Bvc3RtYW5faWQ/OiBzdHJpbmc7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdHNjaGVtYTogc3RyaW5nO1xuXHRcdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHR9O1xuXHRhdXRoPzogdW5rbm93bjtcblx0aXRlbT86IFBvc3RtYW5JdGVtW107XG5cdHZhcmlhYmxlPzogQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9Pjtcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIFBvc3RtYW5JdGVtID0ge1xuXHRuYW1lPzogc3RyaW5nO1xuXHRpdGVtPzogUG9zdG1hbkl0ZW1bXTtcblx0cmVxdWVzdD86IFBvc3RtYW5SZXF1ZXN0O1xuXHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgUG9zdG1hblJlcXVlc3QgPSB7XG5cdG1ldGhvZD86IHN0cmluZztcblx0aGVhZGVyPzogQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9Pjtcblx0Ym9keT86IHsgbW9kZT86IHN0cmluZzsgcmF3Pzogc3RyaW5nIH07XG5cdHVybD86IHN0cmluZyB8IHsgcmF3Pzogc3RyaW5nOyBob3N0Pzogc3RyaW5nW107IHBhdGg/OiBzdHJpbmdbXTsgdmFyaWFibGU/OiB1bmtub3duW10gfTtcblx0YXV0aD86IHsgdHlwZTogc3RyaW5nOyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBBdXRoMEVudiA9IHtcblx0YXV0aDBEb21haW4/OiBzdHJpbmc7XG5cdGF1dGgwQXVkaWVuY2U/OiBzdHJpbmc7XG5cdGF1dGgwQ2xpZW50SWQ/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvbnZlcnRSZXN1bHQgPSB7XG5cdHJlc3VsdDogYm9vbGVhbjtcblx0cmVhc29uPzogc3RyaW5nO1xuXHRvdXRwdXQ/OiBBcnJheTx7IHR5cGU6IHN0cmluZzsgZGF0YTogUG9zdG1hbkNvbGxlY3Rpb24gfT47XG59O1xuXG5mdW5jdGlvbiBjb252ZXJ0QXN5bmMoXG5cdGRhdGE6IFNjYWZmb2xkT3BlbkFwaURvY3VtZW50LFxuXHRvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFByb21pc2U8Q29udmVydFJlc3VsdD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGNvbnZlcnRlci5jb252ZXJ0KFxuXHRcdFx0eyB0eXBlOiBcImpzb25cIiwgZGF0YSB9LFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdChlcnI6IEVycm9yIHwgbnVsbCwgcmVzdWx0OiBDb252ZXJ0UmVzdWx0KSA9PiB7XG5cdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRyZWplY3QoZXJyKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0fSxcblx0XHQpO1xuXHR9KTtcbn1cblxuLyoqIENvbnZlcnQgYW4gT3BlbkFQSSBkb2N1bWVudCB0byBhIFBvc3RtYW4gQ29sbGVjdGlvbiB2Mi4xIHZpYSBvcGVuYXBpLXRvLXBvc3RtYW52Mi4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuQXBpVG9Qb3N0bWFuQ29sbGVjdGlvbihcblx0ZG9jdW1lbnQ6IFNjYWZmb2xkT3BlbkFwaURvY3VtZW50LFxuKTogUHJvbWlzZTxQb3N0bWFuQ29sbGVjdGlvbj4ge1xuXHRjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0QXN5bmMoZG9jdW1lbnQsIHtcblx0XHRmb2xkZXJTdHJhdGVneTogXCJUYWdzXCIsXG5cdFx0cmVxdWVzdE5hbWVTb3VyY2U6IFwiRmFsbGJhY2tcIixcblx0XHRpbmNsdWRlQXV0aEluZm9JbkV4YW1wbGU6IGZhbHNlLFxuXHR9KTtcblx0aWYgKCFyZXN1bHQucmVzdWx0IHx8IHJlc3VsdC5vdXRwdXQ/LlswXT8uZGF0YSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKHJlc3VsdC5yZWFzb24gPz8gXCJvcGVuYXBpLXRvLXBvc3RtYW52MiBjb252ZXJzaW9uIGZhaWxlZFwiKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0Lm91dHB1dFswXS5kYXRhO1xufVxuXG4vKipcbiAqIE92ZXJsYXkgQXV0aDAgT0F1dGgyIChQS0NFKSBjb2xsZWN0aW9uIGF1dGggYW5kIGZpeCBMb2NhbCBWaWV3LWZyaWVuZGx5IFVSTHMuXG4gKiBSb3V0ZSBpdGVtcyBjb21lIGZyb20gT3BlbkFQSTsgYXV0aC9lbnYgcmVtYWluIGhhbmQtYXV0aG9yZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVBvc3RtYW5BdXRoT3ZlcmxheShcblx0Y29sbGVjdGlvbjogUG9zdG1hbkNvbGxlY3Rpb24sXG5cdHByb2plY3ROYW1lOiBzdHJpbmcsXG5cdGF1dGg6IEF1dGgwRW52IHwgdW5kZWZpbmVkLFxuXHRvcHRpb25zOiB7XG5cdFx0Y2FsbGJhY2tzOiByZWFkb25seSBzdHJpbmdbXTtcblx0XHRzY29wZXM6IHN0cmluZztcblx0XHRkZXNjcmlwdGlvbjogc3RyaW5nO1xuXHR9LFxuKTogUG9zdG1hbkNvbGxlY3Rpb24ge1xuXHRjb25zdCBuZXh0OiBQb3N0bWFuQ29sbGVjdGlvbiA9IHtcblx0XHQuLi5jb2xsZWN0aW9uLFxuXHRcdGluZm86IHtcblx0XHRcdC4uLmNvbGxlY3Rpb24uaW5mbyxcblx0XHRcdG5hbWU6IGAke3Byb2plY3ROYW1lfSBXZWJBUElgLFxuXHRcdFx0ZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24sXG5cdFx0XHRzY2hlbWE6XG5cdFx0XHRcdGNvbGxlY3Rpb24uaW5mby5zY2hlbWEgPz9cblx0XHRcdFx0XCJodHRwczovL3NjaGVtYS5nZXRwb3N0bWFuLmNvbS9qc29uL2NvbGxlY3Rpb24vdjIuMS4wL2NvbGxlY3Rpb24uanNvblwiLFxuXHRcdH0sXG5cdH07XG5cblx0aWYgKGF1dGg/LmF1dGgwRG9tYWluKSB7XG5cdFx0bmV4dC5hdXRoID0ge1xuXHRcdFx0dHlwZTogXCJvYXV0aDJcIixcblx0XHRcdG9hdXRoMjogW1xuXHRcdFx0XHR7IGtleTogXCJncmFudF90eXBlXCIsIHZhbHVlOiBcImF1dGhvcml6YXRpb25fY29kZV93aXRoX3BrY2VcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5OiBcImF1dGhVcmxcIixcblx0XHRcdFx0XHR2YWx1ZTogXCJodHRwczovL3t7YXV0aDBEb21haW59fS9hdXRob3JpemU/YXVkaWVuY2U9e3thdXRoMEF1ZGllbmNlfX1cIixcblx0XHRcdFx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5OiBcImFjY2Vzc1Rva2VuVXJsXCIsXG5cdFx0XHRcdFx0dmFsdWU6IFwiaHR0cHM6Ly97e2F1dGgwRG9tYWlufX0vb2F1dGgvdG9rZW5cIixcblx0XHRcdFx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7IGtleTogXCJjbGllbnRJZFwiLCB2YWx1ZTogXCJ7e2F1dGgwQ2xpZW50SWR9fVwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdHsga2V5OiBcInNjb3BlXCIsIHZhbHVlOiBvcHRpb25zLnNjb3BlcywgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHR7IGtleTogXCJyZWRpcmVjdF91cmlcIiwgdmFsdWU6IG9wdGlvbnMuY2FsbGJhY2tzWzBdLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdHsga2V5OiBcInVzZUJyb3dzZXJcIiwgdmFsdWU6IFwidHJ1ZVwiLCB0eXBlOiBcImJvb2xlYW5cIiB9LFxuXHRcdFx0XHR7IGtleTogXCJhZGRUb2tlblRvXCIsIHZhbHVlOiBcImhlYWRlclwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdHsga2V5OiBcImNoYWxsZW5nZUFsZ29yaXRobVwiLCB2YWx1ZTogXCJTMjU2XCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0eyBrZXk6IFwiY2xpZW50X2F1dGhlbnRpY2F0aW9uXCIsIHZhbHVlOiBcImJvZHlcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHR7IGtleTogXCJjbGllbnRTZWNyZXRcIiwgdmFsdWU6IFwiXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0eyBrZXk6IFwidG9rZW5OYW1lXCIsIHZhbHVlOiBgJHtwcm9qZWN0TmFtZX0gQWNjZXNzIFRva2VuYCwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XSxcblx0XHR9O1xuXHR9XG5cblx0bmV4dC5pdGVtID0gcmV3cml0ZUNvbGxlY3Rpb25JdGVtcyhjb2xsZWN0aW9uLml0ZW0gPz8gW10sIHtcblx0XHRtYXJrTGlzdEFub255bW91czogdHJ1ZSxcblx0fSk7XG5cdHJldHVybiBuZXh0O1xufVxuXG5mdW5jdGlvbiByZXdyaXRlQ29sbGVjdGlvbkl0ZW1zKFxuXHRpdGVtczogUG9zdG1hbkl0ZW1bXSxcblx0b3B0czogeyBtYXJrTGlzdEFub255bW91czogYm9vbGVhbiB9LFxuKTogUG9zdG1hbkl0ZW1bXSB7XG5cdHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+IHtcblx0XHRpZiAoaXRlbS5pdGVtICE9IG51bGwpIHtcblx0XHRcdHJldHVybiB7IC4uLml0ZW0sIGl0ZW06IHJld3JpdGVDb2xsZWN0aW9uSXRlbXMoaXRlbS5pdGVtLCBvcHRzKSB9O1xuXHRcdH1cblx0XHRjb25zdCByZXF1ZXN0ID0gaXRlbS5yZXF1ZXN0O1xuXHRcdGlmIChyZXF1ZXN0ID09IG51bGwpIHtcblx0XHRcdHJldHVybiBpdGVtO1xuXHRcdH1cblx0XHRjb25zdCBtZXRob2QgPSAocmVxdWVzdC5tZXRob2QgPz8gXCJHRVRcIikudG9VcHBlckNhc2UoKTtcblx0XHRjb25zdCByYXdVcmwgPSByZXF1ZXN0VXJsUmF3KHJlcXVlc3QpO1xuXHRcdGNvbnN0IG5leHRSZXF1ZXN0OiBQb3N0bWFuUmVxdWVzdCA9IHtcblx0XHRcdC4uLnJlcXVlc3QsXG5cdFx0XHR1cmw6IHRvUG9zdG1hblVybChyYXdVcmwpLFxuXHRcdH07XG5cdFx0Ly8gTGlzdCBIZWxsbyBzdGF5cyBhbm9ueW1vdXMgKG1hdGNoZXMgc2NhZmZvbGQgQWxsb3dBbm9ueW1vdXMgb24gR0VUIC9oZWxsbykuXG5cdFx0aWYgKFxuXHRcdFx0b3B0cy5tYXJrTGlzdEFub255bW91cyAmJlxuXHRcdFx0bWV0aG9kID09PSBcIkdFVFwiICYmXG5cdFx0XHRub3JtYWxpemVQYXRoKHJhd1VybCkgPT09IFwiL2hlbGxvXCIgJiZcblx0XHRcdCFyYXdVcmwuaW5jbHVkZXMoXCIvOlwiKVxuXHRcdCkge1xuXHRcdFx0bmV4dFJlcXVlc3QuYXV0aCA9IHsgdHlwZTogXCJub2F1dGhcIiB9O1xuXHRcdH1cblx0XHRyZXR1cm4geyAuLi5pdGVtLCByZXF1ZXN0OiBuZXh0UmVxdWVzdCB9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdFVybFJhdyhyZXF1ZXN0OiBQb3N0bWFuUmVxdWVzdCk6IHN0cmluZyB7XG5cdGNvbnN0IHVybCA9IHJlcXVlc3QudXJsO1xuXHRpZiAodHlwZW9mIHVybCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiB1cmw7XG5cdH1cblx0aWYgKHVybD8ucmF3KSB7XG5cdFx0cmV0dXJuIHVybC5yYXc7XG5cdH1cblx0Y29uc3QgaG9zdCA9IHVybD8uaG9zdD8uWzBdID8/IFwie3tiYXNlVXJsfX1cIjtcblx0Y29uc3QgcGF0aCA9ICh1cmw/LnBhdGggPz8gW10pLmpvaW4oXCIvXCIpO1xuXHRyZXR1cm4gcGF0aCA/IGAke2hvc3R9LyR7cGF0aH1gIDogaG9zdDtcbn1cblxuLyoqIE9wZW5BUEkgYHtpZH1gIOKGkiBQb3N0bWFuIGA6aWRgLCB3aXRob3V0IHRvdWNoaW5nIGB7e3ZhcmlhYmxlc319YC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24odXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gdXJsLnJlcGxhY2UoLyg/PCFcXHspXFx7KFtBLVphLXpfXVtcXHddKilcXH0oPyFcXH0pL2csIFwiOiQxXCIpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHJhd1VybDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3Qgd2l0aG91dEJhc2UgPSByYXdVcmwucmVwbGFjZSgvXFx7XFx7YmFzZVVybFxcfVxcfS9nLCBcIlwiKS5zcGxpdChcIj9cIilbMF0gPz8gXCJcIjtcblx0Y29uc3Qgd2l0aFNsYXNoID0gd2l0aG91dEJhc2Uuc3RhcnRzV2l0aChcIi9cIikgPyB3aXRob3V0QmFzZSA6IGAvJHt3aXRob3V0QmFzZX1gO1xuXHRyZXR1cm4gb3BlbkFwaVBhdGhQYXJhbXNUb0NvbG9uKHdpdGhTbGFzaCk7XG59XG5cbi8qKiBQcmVmZXIgUG9zdG1hbiB0ZW1wbGF0ZSBVUkwgc2hhcGUgdXNlZCBieSBleGlzdGluZyBMb2NhbCBWaWV3IC8gQVBJIHVwbG9hZHMuICovXG5mdW5jdGlvbiB0b1Bvc3RtYW5VcmwocmF3VXJsOiBzdHJpbmcpOiBQb3N0bWFuUmVxdWVzdFtcInVybFwiXSB7XG5cdGxldCBwYXRoUGFydCA9IHJhd1VybC5yZXBsYWNlKC9cXHtcXHtiYXNlVXJsXFx9XFx9L2csIFwiXCIpO1xuXHRpZiAoIXBhdGhQYXJ0LnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0cGF0aFBhcnQgPSBgLyR7cGF0aFBhcnR9YDtcblx0fVxuXHQvLyBvcGVuYXBpLXRvLXBvc3RtYW4gdXNlcyB7aWR9OyBMb2NhbCBWaWV3IC8gcHJpb3IgY29sbGVjdGlvbnMgdXNlIDppZFxuXHRwYXRoUGFydCA9IG9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbihwYXRoUGFydCk7XG5cdGNvbnN0IHNlZ21lbnRzID0gcGF0aFBhcnQuc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcblx0cmV0dXJuIHtcblx0XHRyYXc6IGB7e2Jhc2VVcmx9fSR7cGF0aFBhcnR9YCxcblx0XHRob3N0OiBbXCJ7e2Jhc2VVcmx9fVwiXSxcblx0XHRwYXRoOiBzZWdtZW50cyxcblx0fTtcbn1cbiJdLCJuYW1lcyI6WyJjb252ZXJ0ZXIiLCJjb252ZXJ0QXN5bmMiLCJkYXRhIiwib3B0aW9ucyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiY29udmVydCIsInR5cGUiLCJlcnIiLCJyZXN1bHQiLCJvcGVuQXBpVG9Qb3N0bWFuQ29sbGVjdGlvbiIsImRvY3VtZW50IiwiZm9sZGVyU3RyYXRlZ3kiLCJyZXF1ZXN0TmFtZVNvdXJjZSIsImluY2x1ZGVBdXRoSW5mb0luRXhhbXBsZSIsIm91dHB1dCIsIkVycm9yIiwicmVhc29uIiwiYXBwbHlQb3N0bWFuQXV0aE92ZXJsYXkiLCJjb2xsZWN0aW9uIiwicHJvamVjdE5hbWUiLCJhdXRoIiwibmV4dCIsImluZm8iLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJzY2hlbWEiLCJhdXRoMERvbWFpbiIsIm9hdXRoMiIsImtleSIsInZhbHVlIiwic2NvcGVzIiwiY2FsbGJhY2tzIiwiaXRlbSIsInJld3JpdGVDb2xsZWN0aW9uSXRlbXMiLCJtYXJrTGlzdEFub255bW91cyIsIml0ZW1zIiwib3B0cyIsIm1hcCIsInJlcXVlc3QiLCJtZXRob2QiLCJ0b1VwcGVyQ2FzZSIsInJhd1VybCIsInJlcXVlc3RVcmxSYXciLCJuZXh0UmVxdWVzdCIsInVybCIsInRvUG9zdG1hblVybCIsIm5vcm1hbGl6ZVBhdGgiLCJpbmNsdWRlcyIsInJhdyIsImhvc3QiLCJwYXRoIiwiam9pbiIsIm9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbiIsInJlcGxhY2UiLCJ3aXRob3V0QmFzZSIsInNwbGl0Iiwid2l0aFNsYXNoIiwic3RhcnRzV2l0aCIsInBhdGhQYXJ0Iiwic2VnbWVudHMiLCJmaWx0ZXIiLCJCb29sZWFuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxlQUFlLHVCQUF1QjtBQTRDN0MsU0FBU0MsYUFDUkMsSUFBNkIsRUFDN0JDLE9BQWdDO0lBRWhDLE9BQU8sSUFBSUMsUUFBUSxDQUFDQyxTQUFTQztRQUM1Qk4sVUFBVU8sT0FBTyxDQUNoQjtZQUFFQyxNQUFNO1lBQVFOO1FBQUssR0FDckJDLFNBQ0EsQ0FBQ00sS0FBbUJDO1lBQ25CLElBQUlELEtBQUs7Z0JBQ1JILE9BQU9HO2dCQUNQO1lBQ0Q7WUFDQUosUUFBUUs7UUFDVDtJQUVGO0FBQ0Q7QUFFQSx1RkFBdUYsR0FDdkYsT0FBTyxlQUFlQywyQkFDckJDLFFBQWlDO0lBRWpDLE1BQU1GLFNBQVMsTUFBTVQsYUFBYVcsVUFBVTtRQUMzQ0MsZ0JBQWdCO1FBQ2hCQyxtQkFBbUI7UUFDbkJDLDBCQUEwQjtJQUMzQjtJQUNBLElBQUksQ0FBQ0wsT0FBT0EsTUFBTSxJQUFJQSxPQUFPTSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUVkLFFBQVEsTUFBTTtRQUN2RCxNQUFNLElBQUllLE1BQU1QLE9BQU9RLE1BQU0sSUFBSTtJQUNsQztJQUNBLE9BQU9SLE9BQU9NLE1BQU0sQ0FBQyxFQUFFLENBQUNkLElBQUk7QUFDN0I7QUFFQTs7O0NBR0MsR0FDRCxPQUFPLFNBQVNpQix3QkFDZkMsVUFBNkIsRUFDN0JDLFdBQW1CLEVBQ25CQyxJQUEwQixFQUMxQm5CLE9BSUM7SUFFRCxNQUFNb0IsT0FBMEI7UUFDL0IsR0FBR0gsVUFBVTtRQUNiSSxNQUFNO1lBQ0wsR0FBR0osV0FBV0ksSUFBSTtZQUNsQkMsTUFBTSxHQUFHSixZ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
@@ -29,8 +29,7 @@ import { apiNameFromProjectDir, listExistingApiNames } from "./api-name.js";
29
29
  "```bash",
30
30
  "pnpm dev # Flux HMR (first API)",
31
31
  "pnpm start # run the compiled first API",
32
- "pnpm run build # forge release build",
33
- "pnpm run package # release build + .package/ for each API (what Docker copies)"
32
+ "pnpm run build # forge release build"
34
33
  ];
35
34
  for (const name of apis){
36
35
  lines.push(`pnpm run dev:${name} # HMR for ${name}`);
@@ -41,10 +40,10 @@ import { apiNameFromProjectDir, listExistingApiNames } from "./api-name.js";
41
40
  if (hasPostgres) {
42
41
  lines.push("## Database", "", "Postgres runs via Dev Container Compose:", "", "```bash", "pnpm db:up", "pnpm db:down", "pnpm db:reset", "```", "");
43
42
  }
44
- lines.push("## Deploy", "", "Each API has its own `projects/<name>/Dockerfile`. It copies `.package/`, which `forge package`", "writes before Docker runs: the API's compiled code, the workspace libraries it imports, and", "a plain `node_modules` of the third-party packages it uses (no symlinks). The image build", "installs nothing and needs no npm token.", "", "```bash", "pnpm run package # release build, then .package/ in every API", `docker build -t ${projectName} projects/api`, "```", "", "One API: `pnpm run package:<name>`, then `docker build projects/<name>`.", "A host that builds from a git clone does not have `.package/`; build and push the image", "from CI instead (`forge docker` after `pnpm run package`).", "");
43
+ lines.push("## Deploy", "", "PaaS hosts (`docker build` from the repo root) use the scaffolded `Dockerfile`.", "The runtime image installs production dependencies only (`pnpm install --prod`);", "Forge, TypeScript, Biome, and Vitest stay in the build stage.", "", "```bash", `docker build -t ${projectName} .`, "```", "", "Extra APIs: `docker build -f Dockerfile.<name> .`", "");
45
44
  lines.push("## Add another API", "", "```bash", "decohere add api <name>", "```", "", "Example: `decohere add api billing`", "");
46
45
  if (hasAuth0) {
47
- lines.push("## Auth0", "", "JWT auth is wired from `.env` (`AUTH0_ISSUER_BASE_URL`, `AUTH0_AUDIENCE`).", 'After you add a controller, `@Authorize("read", "Invoice")` becomes the Auth0 permission `read:Invoice`.', "Sync the Auth0 API, admin grants, and Postman token scopes without re-scaffolding:", "", "```bash", "npx @decohere/create auth0 login # once / when the CLI token expires", "npx @decohere/create auth0 configure # after new @Authorize decorators", "```", "");
46
+ lines.push("## Auth0", "", "JWT auth is wired from `.env` (`AUTH0_ISSUER_BASE_URL`, `AUTH0_AUDIENCE`).", "Set those values (or re-run scaffold with `--auth auth0`) before calling protected routes.", "");
48
47
  }
49
48
  if (hasPostman) {
50
49
  lines.push("## Postman", "", "Open this **project root** in Postman Local View (Files → Open folder), not the `postman/` subfolder.", "Select the Local environment, then Authorization → Get New Access Token when Auth0 is enabled.", "");
@@ -86,3 +85,5 @@ function mergeApiNames(existing, added) {
86
85
  ...added.filter((name)=>!seen.has(name))
87
86
  ];
88
87
  }
88
+
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvd29ya3NwYWNlLXJlYWRtZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnZGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9lbnYtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiB9IGZyb20gXCIuLi9tb2RlbHMvcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVNjYWZmb2xkIH0gZnJvbSBcIi4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBhcGlOYW1lRnJvbVByb2plY3REaXIsIGxpc3RFeGlzdGluZ0FwaU5hbWVzIH0gZnJvbSBcIi4vYXBpLW5hbWUuanNcIjtcblxuZXhwb3J0IHR5cGUgV29ya3NwYWNlUmVhZG1lT3B0aW9ucyA9IHtcblx0YWRkPzogYm9vbGVhbjtcblx0ZGF0YWJhc2VQcm92aWRlcj86IFwibm9uZVwiIHwgXCJwb3N0Z3Jlcy90eXBlb3JtXCI7XG5cdGF1dGhQcm92aWRlcj86IFwiYXV0aDBcIiB8IFwibm9uZVwiO1xuXHRwb3N0bWFuUHJvdmlkZXI/OiBcImFwaVwiIHwgXCJsb2NhbFwiIHwgXCJub25lXCI7XG59O1xuXG5leHBvcnQgdHlwZSBXb3Jrc3BhY2VSZWFkbWVJbnB1dCA9IHtcblx0cHJvamVjdE5hbWU6IHN0cmluZztcblx0YXBpTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXHRoYXNQb3N0Z3JlczogYm9vbGVhbjtcblx0aGFzQXV0aDA6IGJvb2xlYW47XG5cdGhhc1Bvc3RtYW46IGJvb2xlYW47XG59O1xuXG4vKiogUHVyZSByZW5kZXJlciDigJQga2VlcCBmZWF0dXJlIHNlY3Rpb25zIHNob3J0IGFuZCBjb3B5LXBhc3RlIHJlYWR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcldvcmtzcGFjZVJlYWRtZShpbnB1dDogV29ya3NwYWNlUmVhZG1lSW5wdXQpOiBzdHJpbmcge1xuXHRjb25zdCB7IHByb2plY3ROYW1lLCBhcGlOYW1lcywgaGFzUG9zdGdyZXMsIGhhc0F1dGgwLCBoYXNQb3N0bWFuIH0gPSBpbnB1dDtcblx0Y29uc3QgYXBpcyA9IGFwaU5hbWVzLmxlbmd0aCA+IDAgPyBhcGlOYW1lcyA6IFtcImFwaVwiXTtcblx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuXHRcdGAjICR7cHJvamVjdE5hbWV9YCxcblx0XHRcIlwiLFxuXHRcdFwiRGVjb2hlcmUgd2ViIEFQSSB3b3Jrc3BhY2UuIFNjYWZmb2xkZWQgd2l0aCBbYEBkZWNvaGVyZS9jcmVhdGVgXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AZGVjb2hlcmUvY3JlYXRlKS5cIixcblx0XHRcIlwiLFxuXHRcdFwiIyMgR2V0IHN0YXJ0ZWRcIixcblx0XHRcIlwiLFxuXHRcdFwiMS4gT3BlbiB0aGlzIGZvbGRlciBpbiBWUyBDb2RlIC8gQ3Vyc29yLlwiLFxuXHRcdFwiMi4gKipSZW9wZW4gaW4gQ29udGFpbmVyKiogKG9yIHJlYnVpbGQgdGhlIERldiBDb250YWluZXIpLlwiLFxuXHRcdFwiICAgSG9zdCBgaW5pdGlhbGl6ZS5zaGAgYW5kIGNvbnRhaW5lciBgcG9zdC1zdGFydC5zaGAgYXNrIHkvTiAoVFRZIG9ubHkpIGJlZm9yZSBucG0gYXV0aCBvciBjb2RlYmFzZSBSQUcgTUNQLlwiLFxuXHRcdFwiICAgU2tpcCBvciBkZWNsaW5lOyBtaXNzaW5nIFRUWSBza2lwcy4gUkFHIGNyZWRlbnRpYWxzIGxhbmQgaW4gYC5jdXJzb3IvYCAoZ2l0aWdub3JlZCkuXCIsXG5cdFx0XCIzLiBJbnN0YWxsIGRlcGVuZGVuY2llcyBpZiBuZWVkZWQ6XCIsXG5cdFx0XCJcIixcblx0XHRcImBgYGJhc2hcIixcblx0XHRcInBucG0gaW5zdGFsbFwiLFxuXHRcdFwiYGBgXCIsXG5cdFx0XCJcIixcblx0XHRcIiMjIERldmVsb3BcIixcblx0XHRcIlwiLFxuXHRcdFwiYGBgYmFzaFwiLFxuXHRcdFwicG5wbSBkZXYgICAgICAgICAgICAgICMgRmx1eCBITVIgKGZpcnN0IEFQSSlcIixcblx0XHRcInBucG0gc3RhcnQgICAgICAgICAgICAjIHJ1biB0aGUgY29tcGlsZWQgZmlyc3QgQVBJXCIsXG5cdFx0XCJwbnBtIHJ1biBidWlsZCAgICAgICAgIyBmb3JnZSByZWxlYXNlIGJ1aWxkXCIsXG5cdF07XG5cblx0Zm9yIChjb25zdCBuYW1lIG9mIGFwaXMpIHtcblx0XHRsaW5lcy5wdXNoKGBwbnBtIHJ1biBkZXY6JHtuYW1lfSAgICAgIyBITVIgZm9yICR7bmFtZX1gKTtcblx0XHRsaW5lcy5wdXNoKGBwbnBtIHJ1biBzdGFydDoke25hbWV9ICAgIyBwcm9kdWN0aW9uIGVudHJ5IGZvciAke25hbWV9YCk7XG5cdH1cblxuXHRsaW5lcy5wdXNoKFwiYGBgXCIsIFwiXCIpO1xuXG5cdGxpbmVzLnB1c2goXG5cdFx0XCIjIyBMb2dnaW5nXCIsXG5cdFx0XCJcIixcblx0XHRcIkluIGRldmVsb3BtZW50LCBTY3JpYmUgdXNlcyBwaW5vLXByZXR0eSBhbmQgcm9sbGluZyBmaWxlcyB1bmRlciBgbG9ncy9gIChnaXRpZ25vcmVkKS5cIixcblx0XHRcIldoZW4gYE5PREVfRU5WPXByb2R1Y3Rpb25gLCB0aGUgcHJvY2VzcyB3cml0ZXMgc3RydWN0dXJlZCBKU09OIHRvIHN0ZG91dCBhbmQgZG9lcyBub3Qgcm90YXRlIGZpbGVzLlwiLFxuXHRcdFwiU2hpcCBhbmQgcmV0YWluIHRob3NlIHN0cmVhbXMgb3V0c2lkZSB0aGUgYXBwIChwbGF0Zm9ybSBsb2dzLCBhIHNpZGVjYXIsIG9yIGEgbG9nIGFnZW50KSBzbyBzaGlwcGluZyBjYW4gY2hhbmdlIHdpdGhvdXQgcmVidWlsZGluZy5cIixcblx0XHRcIlwiLFxuXHRcdFwiT3ZlcnJpZGUgcm9sbCBwYXRoIGFuZCByb3RhdGlvbiB3aXRob3V0IGNoYW5naW5nIGFwcCBjb2RlOlwiLFxuXHRcdFwiYFNDUklCRV9MT0dfRklMRWAsIGBTQ1JJQkVfTE9HX1NJWkVgLCBgU0NSSUJFX0xPR19GUkVRVUVOQ1lgLCBgU0NSSUJFX0xPR19LRUVQYC5cIixcblx0XHRcIlwiLFxuXHRcdCdPcHQgaW50byBpbi1wcm9jZXNzIHByZXR0eSBvciByb2xsIGluIHByb2R1Y3Rpb24gb25seSB3aXRoIGB7IHdoZW46IFwiYWx3YXlzXCIgfWAgb24gYHNjcmliZS53aXRoUGlub1ByZXR0eWAgLyBgc2NyaWJlLndpdGhQaW5vUm9sbGAuJyxcblx0XHRcIlwiLFxuXHQpO1xuXG5cdGlmIChoYXNQb3N0Z3Jlcykge1xuXHRcdGxpbmVzLnB1c2goXG5cdFx0XHRcIiMjIERhdGFiYXNlXCIsXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJQb3N0Z3JlcyBydW5zIHZpYSBEZXYgQ29udGFpbmVyIENvbXBvc2U6XCIsXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJgYGBiYXNoXCIsXG5cdFx0XHRcInBucG0gZGI6dXBcIixcblx0XHRcdFwicG5wbSBkYjpkb3duXCIsXG5cdFx0XHRcInBucG0gZGI6cmVzZXRcIixcblx0XHRcdFwiYGBgXCIsXG5cdFx0XHRcIlwiLFxuXHRcdCk7XG5cdH1cblxuXHRsaW5lcy5wdXNoKFxuXHRcdFwiIyMgRGVwbG95XCIsXG5cdFx0XCJcIixcblx0XHRcIlBhYVMgaG9zdHMgKGBkb2NrZXIgYnVpbGRgIGZyb20gdGhlIHJlcG8gcm9vdCkgdXNlIHRoZSBzY2FmZm9sZGVkIGBEb2NrZXJmaWxlYC5cIixcblx0XHRcIlRoZSBydW50aW1lIGltYWdlIGluc3RhbGxzIHByb2R1Y3Rpb24gZGVwZW5kZW5jaWVzIG9ubHkgKGBwbnBtIGluc3RhbGwgLS1wcm9kYCk7XCIsXG5cdFx0XCJGb3JnZSwgVHlwZVNjcmlwdCwgQmlvbWUsIGFuZCBWaXRlc3Qgc3RheSBpbiB0aGUgYnVpbGQgc3RhZ2UuXCIsXG5cdFx0XCJcIixcblx0XHRcImBgYGJhc2hcIixcblx0XHRgZG9ja2VyIGJ1aWxkIC10ICR7cHJvamVjdE5hbWV9IC5gLFxuXHRcdFwiYGBgXCIsXG5cdFx0XCJcIixcblx0XHRcIkV4dHJhIEFQSXM6IGBkb2NrZXIgYnVpbGQgLWYgRG9ja2VyZmlsZS48bmFtZT4gLmBcIixcblx0XHRcIlwiLFxuXHQpO1xuXG5cdGxpbmVzLnB1c2goXG5cdFx0XCIjIyBBZGQgYW5vdGhlciBBUElcIixcblx0XHRcIlwiLFxuXHRcdFwiYGBgYmFzaFwiLFxuXHRcdFwiZGVjb2hlcmUgYWRkIGFwaSA8bmFtZT5cIixcblx0XHRcImBgYFwiLFxuXHRcdFwiXCIsXG5cdFx0XCJFeGFtcGxlOiBgZGVjb2hlcmUgYWRkIGFwaSBiaWxsaW5nYFwiLFxuXHRcdFwiXCIsXG5cdCk7XG5cblx0aWYgKGhhc0F1dGgwKSB7XG5cdFx0bGluZXMucHVzaChcblx0XHRcdFwiIyMgQXV0aDBcIixcblx0XHRcdFwiXCIsXG5cdFx0XHRcIkpXVCBhdXRoIGlzIHdpcmVkIGZyb20gYC5lbnZgIChgQVVUSDBfSVNTVUVSX0JBU0VfVVJMYCwgYEFVVEgwX0FVRElFTkNFYCkuXCIsXG5cdFx0XHRcIlNldCB0aG9zZSB2YWx1ZXMgKG9yIHJlLXJ1biBzY2FmZm9sZCB3aXRoIGAtLWF1dGggYXV0aDBgKSBiZWZvcmUgY2FsbGluZyBwcm90ZWN0ZWQgcm91dGVzLlwiLFxuXHRcdFx0XCJcIixcblx0XHQpO1xuXHR9XG5cblx0aWYgKGhhc1Bvc3RtYW4pIHtcblx0XHRsaW5lcy5wdXNoKFxuXHRcdFx0XCIjIyBQb3N0bWFuXCIsXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJPcGVuIHRoaXMgKipwcm9qZWN0IHJvb3QqKiBpbiBQb3N0bWFuIExvY2FsIFZpZXcgKEZpbGVzIOKGkiBPcGVuIGZvbGRlciksIG5vdCB0aGUgYHBvc3RtYW4vYCBzdWJmb2xkZXIuXCIsXG5cdFx0XHRcIlNlbGVjdCB0aGUgTG9jYWwgZW52aXJvbm1lbnQsIHRoZW4gQXV0aG9yaXphdGlvbiDihpIgR2V0IE5ldyBBY2Nlc3MgVG9rZW4gd2hlbiBBdXRoMCBpcyBlbmFibGVkLlwiLFxuXHRcdFx0XCJcIixcblx0XHQpO1xuXHR9XG5cblx0bGluZXMucHVzaChcblx0XHRcIiMjIE1vcmVcIixcblx0XHRcIlwiLFxuXHRcdFwiLSBQYWNrYWdlIGRvY3M6IGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0BkZWNvaGVyZS9jcmVhdGVcIixcblx0XHRcIi0gQWZ0ZXIgYGRlY29oZXJlIGFkZCBhcGlgLCB0aGlzIFJFQURNRSBpcyByZWZyZXNoZWQgc28gc2NyaXB0cyBhbmQgQVBJcyBzdGF5IGFjY3VyYXRlLlwiLFxuXHRcdFwiXCIsXG5cdCk7XG5cblx0cmV0dXJuIGAke2xpbmVzLmpvaW4oXCJcXG5cIil9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VSZWFkbWVJbnB1dChcblx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0b3B0aW9uczogV29ya3NwYWNlUmVhZG1lT3B0aW9ucyxcbik6IFdvcmtzcGFjZVJlYWRtZUlucHV0IHtcblx0Y29uc3QgbmV3TmFtZXMgPSB3b3Jrc3BhY2Vcblx0XHQuZ2V0UHJvamVjdHMoKVxuXHRcdC5tYXAoKHByb2plY3QpID0+IGFwaU5hbWVGcm9tUHJvamVjdERpcihwcm9qZWN0LmRpcikpO1xuXHRjb25zdCBhcGlOYW1lcyA9IG9wdGlvbnMuYWRkXG5cdFx0PyBtZXJnZUFwaU5hbWVzKGxpc3RFeGlzdGluZ0FwaU5hbWVzKHdvcmtzcGFjZS50YXJnZXREaXIpLCBuZXdOYW1lcylcblx0XHQ6IG5ld05hbWVzO1xuXG5cdGNvbnN0IHBrZyA9IHdvcmtzcGFjZS5nZXRNb2RlbDxQYWNrYWdlSnNvbj4oV0VMTF9LTk9XTl9GSUxFUy5QQUNLQUdFX0pTT04pO1xuXHRjb25zdCBlbnYgPSB3b3Jrc3BhY2UuZ2V0TW9kZWw8RW52RmlsZT4oV0VMTF9LTk9XTl9GSUxFUy5FTlZfRklMRSk7XG5cblx0Y29uc3QgaGFzUG9zdGdyZXMgPVxuXHRcdG9wdGlvbnMuZGF0YWJhc2VQcm92aWRlciA9PT0gXCJwb3N0Z3Jlcy90eXBlb3JtXCIgfHwgQm9vbGVhbihwa2c/Lmhhc1NjcmlwdChcImRiOnVwXCIpKTtcblx0Y29uc3QgaGFzQXV0aDAgPVxuXHRcdG9wdGlvbnMuYXV0aFByb3ZpZGVyID09PSBcImF1dGgwXCIgfHwgQm9vbGVhbihlbnY/Lmhhc0VudHJ5KFwiQVVUSDBfSVNTVUVSX0JBU0VfVVJMXCIpKTtcblx0Y29uc3QgaGFzUG9zdG1hbiA9XG5cdFx0b3B0aW9ucy5wb3N0bWFuUHJvdmlkZXIgPT09IFwibG9jYWxcIiB8fFxuXHRcdG9wdGlvbnMucG9zdG1hblByb3ZpZGVyID09PSBcImFwaVwiIHx8XG5cdFx0ZXhpc3RzU3luYyhqb2luKHdvcmtzcGFjZS50YXJnZXREaXIsIFwicG9zdG1hblwiKSkgfHxcblx0XHRleGlzdHNTeW5jKGpvaW4od29ya3NwYWNlLnRhcmdldERpciwgXCIucG9zdG1hblwiKSk7XG5cblx0cmV0dXJuIHtcblx0XHRwcm9qZWN0TmFtZTogd29ya3NwYWNlLm5hbWUsXG5cdFx0YXBpTmFtZXMsXG5cdFx0aGFzUG9zdGdyZXMsXG5cdFx0aGFzQXV0aDAsXG5cdFx0aGFzUG9zdG1hbixcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlV29ya3NwYWNlUmVhZG1lKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRvcHRpb25zOiBXb3Jrc3BhY2VSZWFkbWVPcHRpb25zLFxuKTogdm9pZCB7XG5cdGNvbnN0IGNvbnRlbnQgPSByZW5kZXJXb3Jrc3BhY2VSZWFkbWUocmVzb2x2ZVdvcmtzcGFjZVJlYWRtZUlucHV0KHdvcmtzcGFjZSwgb3B0aW9ucykpO1xuXHR3b3Jrc3BhY2UuYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFt7IGZpbGVQYXRoOiBcIlJFQURNRS5tZFwiLCBjb250ZW50IH1dLFxuXHR9KTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VBcGlOYW1lcyhleGlzdGluZzogcmVhZG9ubHkgc3RyaW5nW10sIGFkZGVkOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcblx0Y29uc3Qgc2VlbiA9IG5ldyBTZXQoZXhpc3RpbmcpO1xuXHRyZXR1cm4gWy4uLmV4aXN0aW5nLCAuLi5hZGRlZC5maWx0ZXIoKG5hbWUpID0+ICFzZWVuLmhhcyhuYW1lKSldO1xufVxuIl0sIm5hbWVzIjpbImV4aXN0c1N5bmMiLCJqb2luIiwiV0VMTF9LTk9XTl9GSUxFUyIsImFwaU5hbWVGcm9tUHJvamVjdERpciIsImxpc3RFeGlzdGluZ0FwaU5hbWVzIiwicmVuZGVyV29ya3NwYWNlUmVhZG1lIiwiaW5wdXQiLCJwcm9qZWN0TmFtZSIsImFwaU5hbWVzIiwiaGFzUG9zdGdyZXMiLCJoYXNBdXRoMCIsImhhc1Bvc3RtYW4iLCJhcGlzIiwibGVuZ3RoIiwibGluZXMiLCJuYW1lIiwicHVzaCIsInJlc29sdmVXb3Jrc3BhY2VSZWFkbWVJbnB1dCIsIndvcmtzcGFjZSIsIm9wdGlvbnMiLCJuZXdOYW1lcyIsImdldFByb2plY3RzIiwibWFwIiwicHJvamVjdCIsImRpciIsImFkZCIsIm1lcmdlQXBpTmFtZXMiLCJ0YXJnZXREaXIiLCJwa2ciLCJnZXRNb2RlbCIsIlBBQ0tBR0VfSlNPTiIsImVudiIsIkVOVl9GSUxFIiwiZGF0YWJhc2VQcm92aWRlciIsIkJvb2xlYW4iLCJoYXNTY3JpcHQiLCJhdXRoUHJvdmlkZXIiLCJoYXNFbnRyeSIsInBvc3RtYW5Qcm92aWRlciIsIndyaXRlV29ya3NwYWNlUmVhZG1lIiwiY29udGVudCIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiZXhpc3RpbmciLCJhZGRlZCIsInNlZW4iLCJTZXQiLCJmaWx0ZXIiLCJoYXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFVBQVUsUUFBUSxVQUFV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
@@ -5,7 +5,7 @@ function _ts_decorate(decorators, target, key, desc) {
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  }
7
7
  import { injectable } from "@decohere/crucible/decorators";
8
- import { ActionResponse } from "@decohere/devkit/cli";
8
+ import { ActionResponse } from "@decohere/nexus/cli";
9
9
  import { runScaffoldApi, toApiOptions } from "./webapi/cli-options.js";
10
10
  export class WebapiAction {
11
11
  async run(options) {
@@ -16,3 +16,5 @@ export class WebapiAction {
16
16
  WebapiAction = _ts_decorate([
17
17
  injectable()
18
18
  ], WebapiAction);
19
+
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkuYWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IHR5cGUgQWN0aW9uLCBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBydW5TY2FmZm9sZEFwaSwgdG9BcGlPcHRpb25zIH0gZnJvbSBcIi4vd2ViYXBpL2NsaS1vcHRpb25zLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFdlYmFwaU9wdGlvbnMgPSB7XG5cdGRpcmVjdG9yeT86IHN0cmluZztcblx0ZD86IHN0cmluZztcblx0bmFtZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuXHRkYXRhYmFzZT86IHN0cmluZztcblx0YXV0aD86IHN0cmluZztcblx0cG9zdG1hbj86IHN0cmluZztcblx0eWVzPzogYm9vbGVhbjtcblx0aW5zdGFsbD86IHN0cmluZztcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBXZWJhcGlBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb248V2ViYXBpT3B0aW9ucz4ge1xuXHRwdWJsaWMgYXN5bmMgcnVuKG9wdGlvbnM6IFdlYmFwaU9wdGlvbnMpOiBQcm9taXNlPEFjdGlvblJlc3BvbnNlPiB7XG5cdFx0YXdhaXQgcnVuU2NhZmZvbGRBcGkodG9BcGlPcHRpb25zKG9wdGlvbnMuZGlyZWN0b3J5LCBvcHRpb25zKSk7XG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoXCJ3ZWJhcGlcIik7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJpbmplY3RhYmxlIiwiQWN0aW9uUmVzcG9uc2UiLCJydW5TY2FmZm9sZEFwaSIsInRvQXBpT3B0aW9ucyIsIldlYmFwaUFjdGlvbiIsInJ1biIsIm9wdGlvbnMiLCJkaXJlY3RvcnkiLCJTdWNjZXNzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxTQUFTQSxVQUFVLFFBQVEsZ0NBQWdDO0FBQzNELFNBQXNCQyxjQUFjLFFBQVEsc0JBQXNCO0FBQ2xFLFNBQVNDLGNBQWMsRUFBRUMsWUFBWSxRQUFRLDBCQUEwQjtBQWN2RSxPQUFPLE1BQU1DO0lBQ1osTUFBYUMsSUFBSUMsT0FBc0IsRUFBMkI7UUFDakUsTUFBTUosZUFBZUMsYUFBYUcsUUFBUUMsU0FBUyxFQUFFRDtRQUNyRCxPQUFPTCxlQUFlTyxPQUFPLENBQUM7SUFDL0I7QUFDRCJ9
@@ -1,4 +1,4 @@
1
- import { DecohereCommand } from "@decohere/devkit/cli";
1
+ import { DecohereCommand } from "@decohere/nexus/cli";
2
2
  import { addWebapiFeatureOptions, collectName } from "./webapi/cli-options.js";
3
3
  import { WebapiAction } from "./webapi.action.js";
4
4
  export class WebapiCommand extends DecohereCommand {
@@ -9,7 +9,7 @@ export class WebapiCommand extends DecohereCommand {
9
9
  }
10
10
  constructor(name){
11
11
  super(name);
12
- this.description("Scaffold a web API workspace");
12
+ this.description("Scaffold a Cortex web API workspace");
13
13
  this.argument("[directory]", "Target directory (default: -d or current directory)");
14
14
  this.option("-d <directory>", "Target directory (default: current directory)", ".");
15
15
  this.option("--name <slug>", "API name under projects/ (repeatable; default: api)", collectName, []);
@@ -31,3 +31,5 @@ export class WebapiCommand extends DecohereCommand {
31
31
  });
32
32
  }
33
33
  }
34
+
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkuY29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZWNvaGVyZUNvbW1hbmQgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHR5cGUgeyBPcHRpb25WYWx1ZXMgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucywgY29sbGVjdE5hbWUgfSBmcm9tIFwiLi93ZWJhcGkvY2xpLW9wdGlvbnMuanNcIjtcbmltcG9ydCB7IFdlYmFwaUFjdGlvbiB9IGZyb20gXCIuL3dlYmFwaS5hY3Rpb24uanNcIjtcblxuZXhwb3J0IGNsYXNzIFdlYmFwaUNvbW1hbmQgZXh0ZW5kcyBEZWNvaGVyZUNvbW1hbmQge1xuXHRwdWJsaWMgb3ZlcnJpZGUgZ2V0IGFjdGlvbnMoKSB7XG5cdFx0cmV0dXJuIFtXZWJhcGlBY3Rpb25dO1xuXHR9XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuXHRcdHN1cGVyKG5hbWUpO1xuXHRcdHRoaXMuZGVzY3JpcHRpb24oXCJTY2FmZm9sZCBhIENvcnRleCB3ZWIgQVBJIHdvcmtzcGFjZVwiKTtcblx0XHR0aGlzLmFyZ3VtZW50KFwiW2RpcmVjdG9yeV1cIiwgXCJUYXJnZXQgZGlyZWN0b3J5IChkZWZhdWx0OiAtZCBvciBjdXJyZW50IGRpcmVjdG9yeSlcIik7XG5cdFx0dGhpcy5vcHRpb24oXCItZCA8ZGlyZWN0b3J5PlwiLCBcIlRhcmdldCBkaXJlY3RvcnkgKGRlZmF1bHQ6IGN1cnJlbnQgZGlyZWN0b3J5KVwiLCBcIi5cIik7XG5cdFx0dGhpcy5vcHRpb24oXG5cdFx0XHRcIi0tbmFtZSA8c2x1Zz5cIixcblx0XHRcdFwiQVBJIG5hbWUgdW5kZXIgcHJvamVjdHMvIChyZXBlYXRhYmxlOyBkZWZhdWx0OiBhcGkpXCIsXG5cdFx0XHRjb2xsZWN0TmFtZSxcblx0XHRcdFtdIGFzIHN0cmluZ1tdLFxuXHRcdCk7XG5cdFx0YWRkV2ViYXBpRmVhdHVyZU9wdGlvbnModGhpcyk7XG5cdH1cblxuXHQvKipcblx0ICogQ29tbWFuZGVyIHBhc3NlcyBwb3NpdGlvbmFsIGFyZ3MgYmVmb3JlIG9wdGlvbnMgd2hlbiBgW2RpcmVjdG9yeV1gIGlzIGRlY2xhcmVkLlxuXHQgKiBNb2R1bGVGYWN0b3J5IGV4cGVjdHMgYChvcHRzLCBjbWQpYCDigJQgc3Rhc2ggdGhlIGRpcmVjdG9yeSBvbiB0aGUgY29tbWFuZC5cblx0ICovXG5cdHB1YmxpYyBvdmVycmlkZSBhY3Rpb24oZm46ICguLi5hcmdzOiB1bmtub3duW10pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KTogdGhpcyB7XG5cdFx0cmV0dXJuIHN1cGVyLmFjdGlvbigoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG5cdFx0XHRjb25zdCBjbWQgPSBhcmdzLmF0KC0xKSBhcyBEZWNvaGVyZUNvbW1hbmQ7XG5cdFx0XHRjb25zdCBmaXJzdCA9IGFyZ3NbMF07XG5cdFx0XHRjb25zdCBoYXNQb3NpdGlvbmFsID0gdHlwZW9mIGZpcnN0ID09PSBcInN0cmluZ1wiIHx8IGZpcnN0ID09PSB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBvcHRzID0gaGFzUG9zaXRpb25hbCA/IChhcmdzWzFdIGFzIE9wdGlvblZhbHVlcykgOiAoYXJnc1swXSBhcyBPcHRpb25WYWx1ZXMpO1xuXHRcdFx0aWYgKHR5cGVvZiBmaXJzdCA9PT0gXCJzdHJpbmdcIiAmJiBmaXJzdCAhPT0gXCJcIikge1xuXHRcdFx0XHRjbWQuc2V0T3B0aW9uVmFsdWUoXCJkaXJlY3RvcnlcIiwgZmlyc3QpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZuKG9wdHMsIGNtZCk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJEZWNvaGVyZUNvbW1hbmQiLCJhZGRXZWJhcGlGZWF0dXJlT3B0aW9ucyIsImNvbGxlY3ROYW1lIiwiV2ViYXBpQWN0aW9uIiwiV2ViYXBpQ29tbWFuZCIsImFjdGlvbnMiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJhcmd1bWVudCIsIm9wdGlvbiIsImFjdGlvbiIsImZuIiwiYXJncyIsImNtZCIsImF0IiwiZmlyc3QiLCJoYXNQb3NpdGlvbmFsIiwidW5kZWZpbmVkIiwib3B0cyIsInNldE9wdGlvblZhbHVlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxlQUFlLFFBQVEsc0JBQXNCO0FBRXRELFNBQVNDLHVCQUF1QixFQUFFQyxXQUFXLFFBQVEsMEJBQTBCO0FBQy9FLFNBQVNDLFlBQVksUUFBUSxxQkFBcUI7QUFFbEQsT0FBTyxNQUFNQyxzQkFBc0JKO0lBQ2xDLElBQW9CSyxVQUFVO1FBQzdCLE9BQU87WUFBQ0Y7U0FBYTtJQUN0QjtJQUVBLFlBQW1CRyxJQUFZLENBQUU7UUFDaEMsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0MsV0FBVyxDQUFDO1FBQ2pCLElBQUksQ0FBQ0MsUUFBUSxDQUFDLGVBQWU7UUFDN0IsSUFBSSxDQUFDQyxNQUFNLENBQUMsa0JBQWtCLGlEQUFpRDtRQUMvRSxJQUFJLENBQUNBLE1BQU0sQ0FDVixpQkFDQSx1REFDQVAsYUFDQSxFQUFFO1FBRUhELHdCQUF3QixJQUFJO0lBQzdCO0lBRUE7OztFQUdDLEdBQ0QsQUFBZ0JTLE9BQU9DLEVBQWdELEVBQVE7UUFDOUUsT0FBTyxLQUFLLENBQUNELE9BQU8sQ0FBQyxHQUFHRTtZQUN2QixNQUFNQyxNQUFNRCxLQUFLRSxFQUFFLENBQUMsQ0FBQztZQUNyQixNQUFNQyxRQUFRSCxJQUFJLENBQUMsRUFBRTtZQUNyQixNQUFNSSxnQkFBZ0IsT0FBT0QsVUFBVSxZQUFZQSxVQUFVRTtZQUM3RCxNQUFNQyxPQUFPRixnQkFBaUJKLElBQUksQ0FBQyxFQUFFLEdBQXFCQSxJQUFJLENBQUMsRUFBRTtZQUNqRSxJQUFJLE9BQU9HLFVBQVUsWUFBWUEsVUFBVSxJQUFJO2dCQUM5Q0YsSUFBSU0sY0FBYyxDQUFDLGFBQWFKO1lBQ2pDO1lBQ0EsT0FBT0osR0FBR08sTUFBTUw7UUFDakI7SUFDRDtBQUNEIn0=
package/package.json CHANGED
@@ -1,20 +1,11 @@
1
1
  {
2
2
  "name": "@decohere/scaffold",
3
- "version": "0.0.1-dev.126",
3
+ "version": "0.0.1-dev.80",
4
4
  "description": "Decohere project scaffolder (runs inside ghcr.io/typesmiths/decohere/create)",
5
5
  "keywords": [
6
6
  "decohere",
7
7
  "scaffold"
8
8
  ],
9
- "homepage": "https://github.com/typesmiths/decohere/tree/main/projects/scaffold#readme",
10
- "bugs": {
11
- "url": "https://github.com/typesmiths/decohere/issues"
12
- },
13
- "repository": {
14
- "type": "git",
15
- "url": "git+https://github.com/typesmiths/decohere.git",
16
- "directory": "projects/scaffold"
17
- },
18
9
  "license": "ISC",
19
10
  "author": "Typesmiths",
20
11
  "type": "module",
@@ -31,11 +22,10 @@
31
22
  "test": "echo \"Error: no test specified\" && exit 1"
32
23
  },
33
24
  "dependencies": {
34
- "@decohere/crucible": "0.0.1-dev.126",
35
- "@decohere/devkit": "0.0.1-dev.126",
25
+ "@decohere/crucible": "0.0.1-dev.80",
26
+ "@decohere/nexus": "0.0.1-dev.80",
36
27
  "commander": "^13.1.0",
37
- "openapi-to-postmanv2": "^5.0.0",
38
- "yaml": "^2.9.1"
28
+ "openapi-to-postmanv2": "^5.0.0"
39
29
  },
40
30
  "devDependencies": {},
41
31
  "decohere": {
@@ -1,4 +1,4 @@
1
- import { type Action, ActionResponse } from "@decohere/devkit/cli";
1
+ import { type Action, ActionResponse } from "@decohere/nexus/cli";
2
2
  export type AddApiOptions = {
3
3
  apiName?: string;
4
4
  d?: string;
@@ -1,4 +1,4 @@
1
- import { DecohereCommand } from "@decohere/devkit/cli";
1
+ import { DecohereCommand } from "@decohere/nexus/cli";
2
2
  import { AddApiAction } from "./add-api.action.js";
3
3
  export declare class AddApiCommand extends DecohereCommand {
4
4
  get actions(): (typeof AddApiAction)[];
@@ -1,5 +1,5 @@
1
- import type { Actions } from "@decohere/devkit/cli";
2
- import { type CommandHandler, type CommandResponse, type CommandType, DecohereCommand } from "@decohere/devkit/cli";
1
+ import type { Actions } from "@decohere/nexus/cli";
2
+ import { type CommandHandler, type CommandResponse, type CommandType, DecohereCommand } from "@decohere/nexus/cli";
3
3
  export declare class AddCommand extends DecohereCommand {
4
4
  constructor(commands: Record<string, CommandType>, handler: CommandHandler);
5
5
  run(_actions: Actions, _options: never): Promise<CommandResponse>;
@@ -1,4 +1,4 @@
1
- import { ModuleManifest } from "@decohere/devkit/cli";
1
+ import { ModuleManifest } from "@decohere/nexus/cli";
2
2
  import { AddCommand } from "./add.command.js";
3
3
  import { AddApiAction } from "./add-api.action.js";
4
4
  import { AddApiCommand } from "./add-api.command.js";
@@ -1,5 +1,5 @@
1
- import type { Actions } from "@decohere/devkit/cli";
2
- import { type CommandHandler, type CommandResponse, type CommandType, DecohereCommand } from "@decohere/devkit/cli";
1
+ import type { Actions } from "@decohere/nexus/cli";
2
+ import { type CommandHandler, type CommandResponse, type CommandType, DecohereCommand } from "@decohere/nexus/cli";
3
3
  export declare class CreateCommand extends DecohereCommand {
4
4
  constructor(commands: Record<string, CommandType>, handler: CommandHandler);
5
5
  run(_actions: Actions, _options: never): Promise<CommandResponse>;
@@ -1,4 +1,4 @@
1
- import { ModuleManifest } from "@decohere/devkit/cli";
1
+ import { ModuleManifest } from "@decohere/nexus/cli";
2
2
  import { CreateCommand } from "./create.command.js";
3
3
  import { WebapiAction } from "./webapi.action.js";
4
4
  import { WebapiCommand } from "./webapi.command.js";
@@ -1,10 +1,6 @@
1
1
  export { AddModule } from "./add.module.js";
2
2
  export type { AddApiOptions } from "./add-api.action.js";
3
3
  export { AddApiAction } from "./add-api.action.js";
4
- export { Auth0Module } from "./auth0.module.js";
5
- export type { Auth0ConfigureOptions } from "./auth0-configure.action.js";
6
- export { Auth0ConfigureAction } from "./auth0-configure.action.js";
7
- export { Auth0LoginAction } from "./auth0-login.action.js";
8
4
  export { CreateModule } from "./create.module.js";
9
5
  export { runCli } from "./program.js";
10
6
  export type { ApiOptions } from "./webapi/create-api.js";
@@ -39,8 +39,6 @@ export type ComposeNetwork = {
39
39
  * Live builder for `docker-compose.yml`.
40
40
  *
41
41
  * Features call `addService` / `addVolume` / `addNetwork` in their scaffold phases.
42
- * Loaded with `fromFile` (`decohere add api`), additions merge into the existing file:
43
- * services, networks and volumes already there are left untouched, comments kept.
44
42
  */
45
43
  export declare class DockerCompose implements KeyedModel {
46
44
  readonly key: string;
@@ -49,12 +47,6 @@ export declare class DockerCompose implements KeyedModel {
49
47
  private readonly _services;
50
48
  private readonly _volumes;
51
49
  private readonly _networks;
52
- private readonly _envFiles;
53
- private _existing;
54
- /** Load an existing compose file so `decohere add api` can merge into it. */
55
- static fromFile(absolutePath: string): DockerCompose;
56
- /** True when the service is defined (in the loaded file or added since). */
57
- hasService(name: string): boolean;
58
50
  /** Compose project name (`name:` top-level) — isolates containers/volumes. */
59
51
  setProjectName(name: string): this;
60
52
  /** File-level `#` comments rendered above `name:` / `services:`. */
@@ -69,5 +61,4 @@ export declare class DockerCompose implements KeyedModel {
69
61
  /** Append an env_file path to an existing service. */
70
62
  addEnvFile(serviceName: string, filePath: string): this;
71
63
  getContent(): string;
72
- private mergeIntoExisting;
73
64
  }
@@ -16,24 +16,14 @@ export declare class DevContainer implements KeyedModel {
16
16
  private readonly _extensions;
17
17
  private readonly _ports;
18
18
  private readonly _portAttributes;
19
- private _mounts;
20
- private _workspaceFolder;
19
+ private readonly _mounts;
21
20
  private _postCreateCommand?;
22
21
  private _updateContentCommand?;
23
22
  private _postStartCommand?;
24
23
  private _initializeCommand?;
25
24
  private _remoteUser;
26
25
  private _useCompose;
27
- private _existing;
28
- /**
29
- * Load an existing devcontainer.json so `decohere add api` can merge into it.
30
- * Only extensions, forwarded ports and port attributes are merged; everything else is kept.
31
- */
32
- static fromFile(absolutePath: string): DevContainer;
33
26
  constructor();
34
- /** In-container path Cursor/VS Code opens (Agents window uses the basename). */
35
- setWorkspaceFolder(folder: string): this;
36
- private bindMount;
37
27
  addExtension(...ids: string[]): this;
38
28
  forwardPort(...ports: number[]): this;
39
29
  setPortAttributes(port: number, attrs: PortAttributes): this;
@@ -44,6 +34,4 @@ export declare class DevContainer implements KeyedModel {
44
34
  setRemoteUser(user: string): this;
45
35
  useCompose(): this;
46
36
  files(): SourceFile[];
47
- private mergeIntoExisting;
48
- private build;
49
37
  }