@decohere/scaffold 0.0.1-dev.18 → 0.0.1-dev.81

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 (240) hide show
  1. package/commonjs/src/add-api.action.js +39 -0
  2. package/commonjs/src/add-api.command.js +41 -0
  3. package/commonjs/src/add.command.js +24 -0
  4. package/commonjs/src/add.module.js +26 -0
  5. package/commonjs/src/cli.js +9 -0
  6. package/commonjs/src/create.command.js +24 -0
  7. package/commonjs/src/create.module.js +26 -0
  8. package/commonjs/src/domain/prompt.js +64 -0
  9. package/commonjs/src/index.js +38 -0
  10. package/commonjs/src/models/compose.model.js +150 -0
  11. package/commonjs/src/models/config-yaml.model.js +88 -0
  12. package/commonjs/src/models/const.js +32 -0
  13. package/commonjs/src/models/dev-container.model.js +116 -0
  14. package/commonjs/src/models/docker-image.model.js +259 -0
  15. package/commonjs/src/models/env-file.model.js +50 -0
  16. package/commonjs/src/models/gitignore.model.js +43 -0
  17. package/commonjs/src/models/launch-json.model.js +74 -0
  18. package/commonjs/src/models/package-json.model.js +149 -0
  19. package/commonjs/src/models/project.model.js +134 -0
  20. package/commonjs/src/models/source-file.js +6 -0
  21. package/commonjs/src/models/tsconfig.model.js +34 -0
  22. package/commonjs/src/models/vitest-config.model.js +35 -0
  23. package/commonjs/src/models/vscode-settings.model.js +31 -0
  24. package/commonjs/src/program.js +57 -0
  25. package/commonjs/src/resolve-target-dir.js +19 -0
  26. package/commonjs/src/services/scaffold.service.js +62 -0
  27. package/commonjs/src/version.js +57 -0
  28. package/commonjs/src/webapi/api-name.js +95 -0
  29. package/commonjs/src/webapi/cli-options.js +101 -0
  30. package/commonjs/src/webapi/const.js +50 -0
  31. package/commonjs/src/webapi/create-api.js +237 -0
  32. package/commonjs/src/webapi/devcontainer/codebase-rag-mcp.js +166 -0
  33. package/commonjs/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
  34. package/commonjs/src/webapi/devcontainer/host-scripts.js +52 -0
  35. package/commonjs/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
  36. package/commonjs/src/webapi/devcontainer/templates/initialize.sh +169 -0
  37. package/commonjs/src/webapi/devcontainer/templates/post-create.sh +35 -0
  38. package/commonjs/src/webapi/devcontainer/templates/post-start.sh +65 -0
  39. package/commonjs/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
  40. package/commonjs/src/webapi/features/auth.feature.js +441 -0
  41. package/commonjs/src/webapi/features/auth0-cli.js +435 -0
  42. package/commonjs/src/webapi/features/biome-format.js +49 -0
  43. package/commonjs/src/webapi/features/database.feature.js +433 -0
  44. package/commonjs/src/webapi/features/finalize.feature.js +95 -0
  45. package/commonjs/src/webapi/features/postman.feature.js +324 -0
  46. package/commonjs/src/webapi/models/api-package-json.model.js +60 -0
  47. package/commonjs/src/webapi/models/auth-config.model.js +26 -0
  48. package/commonjs/src/webapi/models/controller-source-file.model.js +193 -0
  49. package/commonjs/src/webapi/models/github-ci.model.js +193 -0
  50. package/commonjs/src/webapi/models/main-source-file.model.js +167 -0
  51. package/commonjs/src/webapi/models/production-dockerfile.model.js +157 -0
  52. package/commonjs/src/webapi/models/sample-files.model.js +60 -0
  53. package/commonjs/src/webapi/models/webapi-image.model.js +27 -0
  54. package/commonjs/src/webapi/postman/hello-openapi.js +175 -0
  55. package/commonjs/src/webapi/postman/local-view.js +184 -0
  56. package/commonjs/src/webapi/postman/openapi-to-postman.js +202 -0
  57. package/commonjs/src/webapi/workspace-readme.js +110 -0
  58. package/commonjs/src/webapi.action.js +30 -0
  59. package/commonjs/src/webapi.command.js +45 -0
  60. package/es6/src/add-api.action.js +29 -0
  61. package/es6/src/add-api.command.js +31 -0
  62. package/es6/src/add.command.js +14 -0
  63. package/es6/src/add.module.js +16 -0
  64. package/es6/src/cli.js +5 -0
  65. package/es6/src/create.command.js +14 -0
  66. package/es6/src/create.module.js +16 -0
  67. package/es6/src/domain/prompt.js +43 -0
  68. package/es6/src/index.js +8 -0
  69. package/es6/src/models/compose.model.js +144 -0
  70. package/es6/src/models/config-yaml.model.js +76 -0
  71. package/es6/src/models/const.js +22 -0
  72. package/es6/src/models/dev-container.model.js +106 -0
  73. package/es6/src/models/docker-image.model.js +217 -0
  74. package/es6/src/models/env-file.model.js +46 -0
  75. package/es6/src/models/gitignore.model.js +33 -0
  76. package/es6/src/models/launch-json.model.js +64 -0
  77. package/es6/src/models/package-json.model.js +137 -0
  78. package/es6/src/models/project.model.js +119 -0
  79. package/es6/src/models/source-file.js +3 -0
  80. package/es6/src/models/tsconfig.model.js +24 -0
  81. package/es6/src/models/vitest-config.model.js +25 -0
  82. package/es6/src/models/vscode-settings.model.js +21 -0
  83. package/es6/src/program.js +39 -0
  84. package/es6/src/resolve-target-dir.js +9 -0
  85. package/es6/src/services/scaffold.service.js +52 -0
  86. package/es6/src/version.js +36 -0
  87. package/es6/src/webapi/api-name.js +59 -0
  88. package/es6/src/webapi/cli-options.js +36 -0
  89. package/es6/src/webapi/const.js +20 -0
  90. package/es6/src/webapi/create-api.js +217 -0
  91. package/es6/src/webapi/devcontainer/codebase-rag-mcp.js +156 -0
  92. package/es6/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
  93. package/es6/src/webapi/devcontainer/host-scripts.js +31 -0
  94. package/es6/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
  95. package/es6/src/webapi/devcontainer/templates/initialize.sh +169 -0
  96. package/es6/src/webapi/devcontainer/templates/post-create.sh +35 -0
  97. package/es6/src/webapi/devcontainer/templates/post-start.sh +65 -0
  98. package/es6/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
  99. package/es6/src/webapi/features/auth.feature.js +390 -0
  100. package/es6/src/webapi/features/auth0-cli.js +375 -0
  101. package/es6/src/webapi/features/biome-format.js +42 -0
  102. package/es6/src/webapi/features/database.feature.js +423 -0
  103. package/es6/src/webapi/features/finalize.feature.js +85 -0
  104. package/es6/src/webapi/features/postman.feature.js +258 -0
  105. package/es6/src/webapi/models/api-package-json.model.js +55 -0
  106. package/es6/src/webapi/models/auth-config.model.js +22 -0
  107. package/es6/src/webapi/models/controller-source-file.model.js +184 -0
  108. package/es6/src/webapi/models/github-ci.model.js +186 -0
  109. package/es6/src/webapi/models/main-source-file.model.js +163 -0
  110. package/es6/src/webapi/models/production-dockerfile.model.js +148 -0
  111. package/es6/src/webapi/models/sample-files.model.js +42 -0
  112. package/es6/src/webapi/models/webapi-image.model.js +20 -0
  113. package/es6/src/webapi/postman/hello-openapi.js +168 -0
  114. package/es6/src/webapi/postman/local-view.js +169 -0
  115. package/es6/src/webapi/postman/openapi-to-postman.js +179 -0
  116. package/es6/src/webapi/workspace-readme.js +89 -0
  117. package/es6/src/webapi.action.js +20 -0
  118. package/es6/src/webapi.command.js +35 -0
  119. package/package.json +8 -8
  120. package/types/src/add-api.action.d.ts +13 -0
  121. package/types/src/add-api.command.d.ts +7 -0
  122. package/types/src/add.command.d.ts +6 -0
  123. package/types/src/add.module.d.ts +14 -0
  124. package/types/src/cli.d.ts +2 -0
  125. package/types/src/create.command.d.ts +6 -0
  126. package/types/src/create.module.d.ts +14 -0
  127. package/types/src/domain/prompt.d.ts +4 -0
  128. package/types/src/models/compose.model.d.ts +64 -0
  129. package/types/src/models/config-yaml.model.d.ts +27 -0
  130. package/types/src/models/const.d.ts +20 -0
  131. package/types/src/models/dev-container.model.d.ts +37 -0
  132. package/types/src/models/docker-image.model.d.ts +84 -0
  133. package/types/src/models/env-file.model.d.ts +16 -0
  134. package/types/src/models/gitignore.model.d.ts +7 -0
  135. package/types/src/models/launch-json.model.d.ts +7 -0
  136. package/types/src/models/package-json.model.d.ts +35 -0
  137. package/types/src/models/project.model.d.ts +60 -0
  138. package/{src/models/source-file.ts → types/src/models/source-file.d.ts} +4 -6
  139. package/types/src/models/tsconfig.model.d.ts +5 -0
  140. package/types/src/models/vitest-config.model.d.ts +5 -0
  141. package/types/src/models/vscode-settings.model.d.ts +7 -0
  142. package/types/src/program.d.ts +3 -0
  143. package/{src/resolve-target-dir.ts → types/src/resolve-target-dir.d.ts} +1 -4
  144. package/types/src/services/scaffold.service.d.ts +22 -0
  145. package/types/src/version.d.ts +6 -0
  146. package/types/src/webapi/api-name.d.ts +14 -0
  147. package/types/src/webapi/cli-options.d.ts +6 -0
  148. package/{src/webapi/const.ts → types/src/webapi/const.d.ts} +7 -21
  149. package/types/src/webapi/create-api.d.ts +15 -0
  150. package/types/src/webapi/devcontainer/codebase-rag-mcp.d.ts +32 -0
  151. package/types/src/webapi/devcontainer/codebase-rag-mcp.ts +182 -0
  152. package/types/src/webapi/devcontainer/host-scripts.d.ts +7 -0
  153. package/types/src/webapi/devcontainer/templates/codebase-rag.env.example +3 -0
  154. package/types/src/webapi/devcontainer/templates/initialize.sh +169 -0
  155. package/types/src/webapi/devcontainer/templates/post-create.sh +35 -0
  156. package/types/src/webapi/devcontainer/templates/post-start.sh +65 -0
  157. package/types/src/webapi/devcontainer/templates/tty-prompt.sh +38 -0
  158. package/types/src/webapi/features/auth.feature.d.ts +10 -0
  159. package/types/src/webapi/features/auth0-cli.d.ts +80 -0
  160. package/types/src/webapi/features/biome-format.d.ts +5 -0
  161. package/types/src/webapi/features/database.feature.d.ts +7 -0
  162. package/types/src/webapi/features/finalize.feature.d.ts +2 -0
  163. package/types/src/webapi/features/postman.feature.d.ts +16 -0
  164. package/types/src/webapi/models/api-package-json.model.d.ts +18 -0
  165. package/types/src/webapi/models/auth-config.model.d.ts +26 -0
  166. package/types/src/webapi/models/controller-source-file.model.d.ts +46 -0
  167. package/types/src/webapi/models/github-ci.model.d.ts +9 -0
  168. package/types/src/webapi/models/main-source-file.model.d.ts +54 -0
  169. package/types/src/webapi/models/production-dockerfile.model.d.ts +23 -0
  170. package/types/src/webapi/models/sample-files.model.d.ts +7 -0
  171. package/types/src/webapi/models/webapi-image.model.d.ts +12 -0
  172. package/types/src/webapi/postman/hello-openapi.d.ts +19 -0
  173. package/types/src/webapi/postman/local-view.d.ts +17 -0
  174. package/types/src/webapi/postman/openapi-to-postman.d.ts +62 -0
  175. package/types/src/webapi/workspace-readme.d.ts +18 -0
  176. package/types/src/webapi.action.d.ts +14 -0
  177. package/types/src/webapi.command.d.ts +11 -0
  178. package/src/add-api.action.ts +0 -25
  179. package/src/add-api.command.ts +0 -31
  180. package/src/add.command.ts +0 -20
  181. package/src/add.module.ts +0 -11
  182. package/src/cli.ts +0 -4
  183. package/src/create.command.ts +0 -20
  184. package/src/create.module.ts +0 -11
  185. package/src/domain/prompt.ts +0 -50
  186. package/src/models/compose.model.ts +0 -205
  187. package/src/models/config-yaml.model.ts +0 -83
  188. package/src/models/const.ts +0 -20
  189. package/src/models/dev-container.model.ts +0 -136
  190. package/src/models/docker-image.model.ts +0 -343
  191. package/src/models/env-file.model.ts +0 -45
  192. package/src/models/gitignore.model.ts +0 -35
  193. package/src/models/launch-json.model.ts +0 -60
  194. package/src/models/package-json.model.ts +0 -169
  195. package/src/models/project.model.ts +0 -141
  196. package/src/models/tsconfig.model.ts +0 -29
  197. package/src/models/vitest-config.model.ts +0 -26
  198. package/src/models/vscode-settings.model.ts +0 -24
  199. package/src/program.ts +0 -63
  200. package/src/services/scaffold.service.ts +0 -89
  201. package/src/version.ts +0 -56
  202. package/src/webapi/api-name.ts +0 -73
  203. package/src/webapi/cli-options.ts +0 -56
  204. package/src/webapi/create-api.ts +0 -275
  205. package/src/webapi/devcontainer/host-scripts.ts +0 -35
  206. package/src/webapi/features/auth.feature.ts +0 -454
  207. package/src/webapi/features/auth0-cli.ts +0 -421
  208. package/src/webapi/features/biome-format.ts +0 -34
  209. package/src/webapi/features/database.feature.ts +0 -522
  210. package/src/webapi/features/finalize.feature.ts +0 -112
  211. package/src/webapi/features/postman.feature.ts +0 -287
  212. package/src/webapi/models/api-package-json.model.ts +0 -60
  213. package/src/webapi/models/auth-config.model.ts +0 -36
  214. package/src/webapi/models/controller-source-file.model.ts +0 -232
  215. package/src/webapi/models/github-ci.model.ts +0 -188
  216. package/src/webapi/models/main-source-file.model.ts +0 -208
  217. package/src/webapi/models/production-dockerfile.model.ts +0 -162
  218. package/src/webapi/models/sample-files.model.ts +0 -45
  219. package/src/webapi/models/webapi-image.model.ts +0 -21
  220. package/src/webapi/postman/hello-openapi.ts +0 -92
  221. package/src/webapi/postman/local-view.ts +0 -195
  222. package/src/webapi/postman/openapi-to-postman.ts +0 -208
  223. package/src/webapi/workspace-readme.ts +0 -192
  224. package/src/webapi.action.ts +0 -22
  225. package/src/webapi.command.ts +0 -41
  226. package/tests/auth-postman.wiring.spec.ts +0 -263
  227. package/tests/auth0-cli.spec.ts +0 -232
  228. package/tests/biome-format.spec.ts +0 -49
  229. package/tests/cli.integration.spec.ts +0 -658
  230. package/tests/compose.model.spec.ts +0 -51
  231. package/tests/container-image.model.spec.ts +0 -162
  232. package/tests/dev-container.model.spec.ts +0 -29
  233. package/tests/devcontainer-base-image.spec.ts +0 -32
  234. package/tests/hello-di-inject.scaffold.spec.ts +0 -18
  235. package/tests/hello-route.contract.spec.ts +0 -94
  236. package/tests/package-json.order.spec.ts +0 -59
  237. package/tests/postman-from-openapi.spec.ts +0 -197
  238. package/tests/seed-devcontainer-templates.ts +0 -40
  239. package/tests/webapi/devcontainer/codebase-rag-mcp.spec.ts +0 -96
  240. /package/{src/index.ts → types/src/index.d.ts} +0 -0
@@ -0,0 +1,157 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get WebapiProductionDockerfile () {
13
+ return WebapiProductionDockerfile;
14
+ },
15
+ get renderProductionDockerfile () {
16
+ return renderProductionDockerfile;
17
+ }
18
+ });
19
+ const _const = require("../../models/const.js");
20
+ const _const1 = require("../const.js");
21
+ class WebapiProductionDockerfile {
22
+ apiNames;
23
+ options;
24
+ key = _const.WELL_KNOWN_FILES.PRODUCTION_DOCKERFILE;
25
+ constructor(apiNames = [
26
+ _const1.DEFAULT_WEBAPI_NAME
27
+ ], options = {}){
28
+ this.apiNames = apiNames;
29
+ this.options = options;
30
+ }
31
+ files() {
32
+ const names = this.apiNames.length > 0 ? this.apiNames : [
33
+ _const1.DEFAULT_WEBAPI_NAME
34
+ ];
35
+ const first = names[0] ?? _const1.DEFAULT_WEBAPI_NAME;
36
+ const files = [];
37
+ if (!this.options.namedOnly) {
38
+ files.push({
39
+ filePath: ".dockerignore",
40
+ content: dockerignoreContent()
41
+ });
42
+ files.push({
43
+ filePath: "Dockerfile",
44
+ content: renderProductionDockerfile(first, "start")
45
+ });
46
+ }
47
+ const emitNamed = this.options.namedOnly || names.length > 1 || first !== _const1.DEFAULT_WEBAPI_NAME;
48
+ if (emitNamed) {
49
+ for (const name of names){
50
+ files.push({
51
+ filePath: `Dockerfile.${name}`,
52
+ content: renderProductionDockerfile(name, `start:${name}`)
53
+ });
54
+ }
55
+ }
56
+ return files;
57
+ }
58
+ }
59
+ function renderProductionDockerfile(apiName, startScript) {
60
+ const projectDir = (0, _const1.webapiProjectDir)(apiName);
61
+ const startCmd = startScript === "start" ? 'CMD ["pnpm", "start"]' : `CMD ["pnpm", "run", "${startScript}"]`;
62
+ const startEntry = (0, _const1.webapiReleaseEntry)(apiName);
63
+ const dockerfileFlag = startScript === "start" ? "" : `.${apiName}`;
64
+ return `# syntax=docker/dockerfile:1
65
+ # Self-contained production image: install + forge build happen inside docker build.
66
+ # Hosts (Railway/Fly/etc.) clone git and run \`docker build\` — they do not receive CI dist/.
67
+ # Build from the repo root: docker build -f Dockerfile${dockerfileFlag} .
68
+ #
69
+ # Runtime node_modules are a production-only install (prod-deps). The build stage's
70
+ # full install (Forge, TypeScript, Biome, Vitest) is not copied into the run image.
71
+ #
72
+ # Private @decohere/* packages: pass a BuildKit secret named npm_token (npm auth token), e.g.
73
+ # docker build --secret id=npm_token,env=NODE_AUTH_TOKEN .
74
+ # Or set NODE_AUTH_TOKEN as a build-arg on hosts that only support build-args.
75
+
76
+ FROM node:24-bookworm AS build
77
+ WORKDIR /app
78
+ RUN corepack enable && corepack prepare pnpm@10 --activate
79
+
80
+ COPY package.json ./
81
+ COPY pnpm-lock.yaml* ./
82
+ COPY tsconfig.json biome.json ./
83
+ COPY config ./config
84
+ COPY ${projectDir} ./${projectDir}
85
+
86
+ ${renderPnpmInstall("all")}
87
+
88
+ RUN pnpm run build
89
+
90
+ FROM node:24-bookworm AS prod-deps
91
+ WORKDIR /app
92
+ ENV NODE_ENV=production
93
+ RUN corepack enable && corepack prepare pnpm@10 --activate
94
+
95
+ COPY package.json ./
96
+ COPY pnpm-lock.yaml* ./
97
+ COPY ${projectDir}/package.json ./${projectDir}/package.json
98
+
99
+ ${renderPnpmInstall("prod")}
100
+
101
+ FROM node:24-bookworm-slim AS run
102
+ WORKDIR /app
103
+ ENV NODE_ENV=production
104
+ RUN corepack enable && corepack prepare pnpm@10 --activate
105
+
106
+ COPY --from=prod-deps /app/package.json ./
107
+ COPY --from=prod-deps /app/pnpm-lock.yaml* ./
108
+ COPY --from=build /app/config ./config
109
+ COPY --from=build /app/dist ./dist
110
+ COPY --from=prod-deps /app/node_modules ./node_modules
111
+ COPY --from=prod-deps /app/${projectDir}/package.json ./${projectDir}/package.json
112
+
113
+ EXPOSE 3000
114
+ ${startCmd}
115
+ # Entry resolved by package.json "${startScript}" → node ${startEntry}
116
+ `;
117
+ }
118
+ /** npm auth + pnpm install. Token is required again in prod-deps (separate stage, no store). */ function renderPnpmInstall(mode) {
119
+ const flags = mode === "prod" ? " --prod" : "";
120
+ return `ARG NODE_AUTH_TOKEN=
121
+ RUN --mount=type=secret,id=npm_token,required=false \\
122
+ if [ -f /run/secrets/npm_token ]; then \\
123
+ TOKEN="$(cat /run/secrets/npm_token)"; \\
124
+ else \\
125
+ TOKEN="\${NODE_AUTH_TOKEN}"; \\
126
+ fi; \\
127
+ if [ -n "$TOKEN" ]; then \\
128
+ echo "//registry.npmjs.org/:_authToken=\${TOKEN}" > .npmrc; \\
129
+ fi; \\
130
+ if [ -f pnpm-lock.yaml ]; then \\
131
+ pnpm install --frozen-lockfile${flags}; \\
132
+ else \\
133
+ pnpm install${flags}; \\
134
+ fi; \\
135
+ rm -f .npmrc`;
136
+ }
137
+ function dockerignoreContent() {
138
+ return [
139
+ "node_modules",
140
+ "dist",
141
+ ".git",
142
+ ".devcontainer",
143
+ ".vscode",
144
+ ".github",
145
+ "postman",
146
+ ".postman",
147
+ ".env",
148
+ ".env.*",
149
+ "!.env.example",
150
+ "coverage",
151
+ "**/*.spec.ts",
152
+ "**/*.test.ts",
153
+ ""
154
+ ].join("\n");
155
+ }
156
+
157
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvbW9kZWxzL3Byb2R1Y3Rpb24tZG9ja2VyZmlsZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uLy4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXllZE1vZGVsLCBTb3VyY2VGaWxlIH0gZnJvbSBcIi4uLy4uL21vZGVscy9zb3VyY2UtZmlsZS5qc1wiO1xuaW1wb3J0IHsgREVGQVVMVF9XRUJBUElfTkFNRSwgd2ViYXBpUHJvamVjdERpciwgd2ViYXBpUmVsZWFzZUVudHJ5IH0gZnJvbSBcIi4uL2NvbnN0LmpzXCI7XG5cbmV4cG9ydCB0eXBlIFByb2R1Y3Rpb25Eb2NrZXJmaWxlT3B0aW9ucyA9IHtcblx0LyoqIFdoZW4gdHJ1ZSwgb25seSB3cml0ZSBgRG9ja2VyZmlsZS48bmFtZT5gIChleGlzdGluZyB3b3Jrc3BhY2Ug4oCUIGRvIG5vdCByZXBsYWNlIHJvb3QgRG9ja2VyZmlsZSkuICovXG5cdG5hbWVkT25seT86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIFByb2R1Y3Rpb24gRG9ja2VyZmlsZXMgZm9yIFBhYVMgKFJhaWx3YXkvRmx5KSBhbmQgbG9jYWwgYGRvY2tlciBidWlsZGAuXG4gKlxuICogQ29udGV4dCBpcyBhbHdheXMgdGhlICoqcmVwbyByb290KiogKGBkb2NrZXIgYnVpbGQgLWYgRG9ja2VyZmlsZS5iaWxsaW5nIC5gKS5cbiAqIFJvb3QgYERvY2tlcmZpbGVgIGlzIHRoZSBmaXJzdCBBUEkgKGBwbnBtIHN0YXJ0YCkuIEV4dHJhIG9yIGN1c3RvbS1uYW1lZCBBUElzXG4gKiBhbHNvIGdldCBgRG9ja2VyZmlsZS48bmFtZT5gIHNvIGVhY2ggc2VydmljZSBjYW4gYmUgZGVwbG95ZWQgb24gaXRzIG93bi5cbiAqXG4gKiBSdW50aW1lIGBub2RlX21vZHVsZXNgIGNvbWUgZnJvbSBhICoqcHJvZC1kZXBzKiogc3RhZ2UgKGBwbnBtIGluc3RhbGwgLS1wcm9kYCksXG4gKiBub3QgdGhlIGZ1bGwgYnVpbGQgaW5zdGFsbCAoRm9yZ2UsIFR5cGVTY3JpcHQsIEJpb21lLCBWaXRlc3QpLlxuICovXG5leHBvcnQgY2xhc3MgV2ViYXBpUHJvZHVjdGlvbkRvY2tlcmZpbGUgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuUFJPRFVDVElPTl9ET0NLRVJGSUxFO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IGFwaU5hbWVzOiByZWFkb25seSBzdHJpbmdbXSA9IFtERUZBVUxUX1dFQkFQSV9OQU1FXSxcblx0XHRwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFByb2R1Y3Rpb25Eb2NrZXJmaWxlT3B0aW9ucyA9IHt9LFxuXHQpIHt9XG5cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgbmFtZXMgPSB0aGlzLmFwaU5hbWVzLmxlbmd0aCA+IDAgPyB0aGlzLmFwaU5hbWVzIDogW0RFRkFVTFRfV0VCQVBJX05BTUVdO1xuXHRcdGNvbnN0IGZpcnN0ID0gbmFtZXNbMF0gPz8gREVGQVVMVF9XRUJBUElfTkFNRTtcblx0XHRjb25zdCBmaWxlczogU291cmNlRmlsZVtdID0gW107XG5cblx0XHRpZiAoIXRoaXMub3B0aW9ucy5uYW1lZE9ubHkpIHtcblx0XHRcdGZpbGVzLnB1c2goe1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZG9ja2VyaWdub3JlXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IGRvY2tlcmlnbm9yZUNvbnRlbnQoKSxcblx0XHRcdH0pO1xuXHRcdFx0ZmlsZXMucHVzaCh7XG5cdFx0XHRcdGZpbGVQYXRoOiBcIkRvY2tlcmZpbGVcIixcblx0XHRcdFx0Y29udGVudDogcmVuZGVyUHJvZHVjdGlvbkRvY2tlcmZpbGUoZmlyc3QsIFwic3RhcnRcIiksXG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRjb25zdCBlbWl0TmFtZWQgPVxuXHRcdFx0dGhpcy5vcHRpb25zLm5hbWVkT25seSB8fCBuYW1lcy5sZW5ndGggPiAxIHx8IGZpcnN0ICE9PSBERUZBVUxUX1dFQkFQSV9OQU1FO1xuXHRcdGlmIChlbWl0TmFtZWQpIHtcblx0XHRcdGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuXHRcdFx0XHRmaWxlcy5wdXNoKHtcblx0XHRcdFx0XHRmaWxlUGF0aDogYERvY2tlcmZpbGUuJHtuYW1lfWAsXG5cdFx0XHRcdFx0Y29udGVudDogcmVuZGVyUHJvZHVjdGlvbkRvY2tlcmZpbGUobmFtZSwgYHN0YXJ0OiR7bmFtZX1gKSxcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZpbGVzO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQcm9kdWN0aW9uRG9ja2VyZmlsZShhcGlOYW1lOiBzdHJpbmcsIHN0YXJ0U2NyaXB0OiBzdHJpbmcpOiBzdHJpbmcge1xuXHRjb25zdCBwcm9qZWN0RGlyID0gd2ViYXBpUHJvamVjdERpcihhcGlOYW1lKTtcblx0Y29uc3Qgc3RhcnRDbWQgPVxuXHRcdHN0YXJ0U2NyaXB0ID09PSBcInN0YXJ0XCJcblx0XHRcdD8gJ0NNRCBbXCJwbnBtXCIsIFwic3RhcnRcIl0nXG5cdFx0XHQ6IGBDTUQgW1wicG5wbVwiLCBcInJ1blwiLCBcIiR7c3RhcnRTY3JpcHR9XCJdYDtcblx0Y29uc3Qgc3RhcnRFbnRyeSA9IHdlYmFwaVJlbGVhc2VFbnRyeShhcGlOYW1lKTtcblx0Y29uc3QgZG9ja2VyZmlsZUZsYWcgPSBzdGFydFNjcmlwdCA9PT0gXCJzdGFydFwiID8gXCJcIiA6IGAuJHthcGlOYW1lfWA7XG5cblx0cmV0dXJuIGAjIHN5bnRheD1kb2NrZXIvZG9ja2VyZmlsZToxXG4jIFNlbGYtY29udGFpbmVkIHByb2R1Y3Rpb24gaW1hZ2U6IGluc3RhbGwgKyBmb3JnZSBidWlsZCBoYXBwZW4gaW5zaWRlIGRvY2tlciBidWlsZC5cbiMgSG9zdHMgKFJhaWx3YXkvRmx5L2V0Yy4pIGNsb25lIGdpdCBhbmQgcnVuIFxcYGRvY2tlciBidWlsZFxcYCDigJQgdGhleSBkbyBub3QgcmVjZWl2ZSBDSSBkaXN0Ly5cbiMgQnVpbGQgZnJvbSB0aGUgcmVwbyByb290OiBkb2NrZXIgYnVpbGQgLWYgRG9ja2VyZmlsZSR7ZG9ja2VyZmlsZUZsYWd9IC5cbiNcbiMgUnVudGltZSBub2RlX21vZHVsZXMgYXJlIGEgcHJvZHVjdGlvbi1vbmx5IGluc3RhbGwgKHByb2QtZGVwcykuIFRoZSBidWlsZCBzdGFnZSdzXG4jIGZ1bGwgaW5zdGFsbCAoRm9yZ2UsIFR5cGVTY3JpcHQsIEJpb21lLCBWaXRlc3QpIGlzIG5vdCBjb3BpZWQgaW50byB0aGUgcnVuIGltYWdlLlxuI1xuIyBQcml2YXRlIEBkZWNvaGVyZS8qIHBhY2thZ2VzOiBwYXNzIGEgQnVpbGRLaXQgc2VjcmV0IG5hbWVkIG5wbV90b2tlbiAobnBtIGF1dGggdG9rZW4pLCBlLmcuXG4jICAgZG9ja2VyIGJ1aWxkIC0tc2VjcmV0IGlkPW5wbV90b2tlbixlbnY9Tk9ERV9BVVRIX1RPS0VOIC5cbiMgT3Igc2V0IE5PREVfQVVUSF9UT0tFTiBhcyBhIGJ1aWxkLWFyZyBvbiBob3N0cyB0aGF0IG9ubHkgc3VwcG9ydCBidWlsZC1hcmdzLlxuXG5GUk9NIG5vZGU6MjQtYm9va3dvcm0gQVMgYnVpbGRcbldPUktESVIgL2FwcFxuUlVOIGNvcmVwYWNrIGVuYWJsZSAmJiBjb3JlcGFjayBwcmVwYXJlIHBucG1AMTAgLS1hY3RpdmF0ZVxuXG5DT1BZIHBhY2thZ2UuanNvbiAuL1xuQ09QWSBwbnBtLWxvY2sueWFtbCogLi9cbkNPUFkgdHNjb25maWcuanNvbiBiaW9tZS5qc29uIC4vXG5DT1BZIGNvbmZpZyAuL2NvbmZpZ1xuQ09QWSAke3Byb2plY3REaXJ9IC4vJHtwcm9qZWN0RGlyfVxuXG4ke3JlbmRlclBucG1JbnN0YWxsKFwiYWxsXCIpfVxuXG5SVU4gcG5wbSBydW4gYnVpbGRcblxuRlJPTSBub2RlOjI0LWJvb2t3b3JtIEFTIHByb2QtZGVwc1xuV09SS0RJUiAvYXBwXG5FTlYgTk9ERV9FTlY9cHJvZHVjdGlvblxuUlVOIGNvcmVwYWNrIGVuYWJsZSAmJiBjb3JlcGFjayBwcmVwYXJlIHBucG1AMTAgLS1hY3RpdmF0ZVxuXG5DT1BZIHBhY2thZ2UuanNvbiAuL1xuQ09QWSBwbnBtLWxvY2sueWFtbCogLi9cbkNPUFkgJHtwcm9qZWN0RGlyfS9wYWNrYWdlLmpzb24gLi8ke3Byb2plY3REaXJ9L3BhY2thZ2UuanNvblxuXG4ke3JlbmRlclBucG1JbnN0YWxsKFwicHJvZFwiKX1cblxuRlJPTSBub2RlOjI0LWJvb2t3b3JtLXNsaW0gQVMgcnVuXG5XT1JLRElSIC9hcHBcbkVOViBOT0RFX0VOVj1wcm9kdWN0aW9uXG5SVU4gY29yZXBhY2sgZW5hYmxlICYmIGNvcmVwYWNrIHByZXBhcmUgcG5wbUAxMCAtLWFjdGl2YXRlXG5cbkNPUFkgLS1mcm9tPXByb2QtZGVwcyAvYXBwL3BhY2thZ2UuanNvbiAuL1xuQ09QWSAtLWZyb209cHJvZC1kZXBzIC9hcHAvcG5wbS1sb2NrLnlhbWwqIC4vXG5DT1BZIC0tZnJvbT1idWlsZCAvYXBwL2NvbmZpZyAuL2NvbmZpZ1xuQ09QWSAtLWZyb209YnVpbGQgL2FwcC9kaXN0IC4vZGlzdFxuQ09QWSAtLWZyb209cHJvZC1kZXBzIC9hcHAvbm9kZV9tb2R1bGVzIC4vbm9kZV9tb2R1bGVzXG5DT1BZIC0tZnJvbT1wcm9kLWRlcHMgL2FwcC8ke3Byb2plY3REaXJ9L3BhY2thZ2UuanNvbiAuLyR7cHJvamVjdERpcn0vcGFja2FnZS5qc29uXG5cbkVYUE9TRSAzMDAwXG4ke3N0YXJ0Q21kfVxuIyBFbnRyeSByZXNvbHZlZCBieSBwYWNrYWdlLmpzb24gXCIke3N0YXJ0U2NyaXB0fVwiIOKGkiBub2RlICR7c3RhcnRFbnRyeX1cbmA7XG59XG5cbi8qKiBucG0gYXV0aCArIHBucG0gaW5zdGFsbC4gVG9rZW4gaXMgcmVxdWlyZWQgYWdhaW4gaW4gcHJvZC1kZXBzIChzZXBhcmF0ZSBzdGFnZSwgbm8gc3RvcmUpLiAqL1xuZnVuY3Rpb24gcmVuZGVyUG5wbUluc3RhbGwobW9kZTogXCJhbGxcIiB8IFwicHJvZFwiKTogc3RyaW5nIHtcblx0Y29uc3QgZmxhZ3MgPSBtb2RlID09PSBcInByb2RcIiA/IFwiIC0tcHJvZFwiIDogXCJcIjtcblx0cmV0dXJuIGBBUkcgTk9ERV9BVVRIX1RPS0VOPVxuUlVOIC0tbW91bnQ9dHlwZT1zZWNyZXQsaWQ9bnBtX3Rva2VuLHJlcXVpcmVkPWZhbHNlIFxcXFxcblx0aWYgWyAtZiAvcnVuL3NlY3JldHMvbnBtX3Rva2VuIF07IHRoZW4gXFxcXFxuXHRcdFRPS0VOPVwiJChjYXQgL3J1bi9zZWNyZXRzL25wbV90b2tlbilcIjsgXFxcXFxuXHRlbHNlIFxcXFxcblx0XHRUT0tFTj1cIlxcJHtOT0RFX0FVVEhfVE9LRU59XCI7IFxcXFxcblx0Zmk7IFxcXFxcblx0aWYgWyAtbiBcIiRUT0tFTlwiIF07IHRoZW4gXFxcXFxuXHRcdGVjaG8gXCIvL3JlZ2lzdHJ5Lm5wbWpzLm9yZy86X2F1dGhUb2tlbj1cXCR7VE9LRU59XCIgPiAubnBtcmM7IFxcXFxcblx0Zmk7IFxcXFxcblx0aWYgWyAtZiBwbnBtLWxvY2sueWFtbCBdOyB0aGVuIFxcXFxcblx0XHRwbnBtIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUke2ZsYWdzfTsgXFxcXFxuXHRlbHNlIFxcXFxcblx0XHRwbnBtIGluc3RhbGwke2ZsYWdzfTsgXFxcXFxuXHRmaTsgXFxcXFxuXHRybSAtZiAubnBtcmNgO1xufVxuXG5mdW5jdGlvbiBkb2NrZXJpZ25vcmVDb250ZW50KCk6IHN0cmluZyB7XG5cdHJldHVybiBbXG5cdFx0XCJub2RlX21vZHVsZXNcIixcblx0XHRcImRpc3RcIixcblx0XHRcIi5naXRcIixcblx0XHRcIi5kZXZjb250YWluZXJcIixcblx0XHRcIi52c2NvZGVcIixcblx0XHRcIi5naXRodWJcIixcblx0XHRcInBvc3RtYW5cIixcblx0XHRcIi5wb3N0bWFuXCIsXG5cdFx0XCIuZW52XCIsXG5cdFx0XCIuZW52LipcIixcblx0XHRcIiEuZW52LmV4YW1wbGVcIixcblx0XHRcImNvdmVyYWdlXCIsXG5cdFx0XCIqKi8qLnNwZWMudHNcIixcblx0XHRcIioqLyoudGVzdC50c1wiLFxuXHRcdFwiXCIsXG5cdF0uam9pbihcIlxcblwiKTtcbn1cbiJdLCJuYW1lcyI6WyJXZWJhcGlQcm9kdWN0aW9uRG9ja2VyZmlsZSIsInJlbmRlclByb2R1Y3Rpb25Eb2NrZXJmaWxlIiwia2V5IiwiV0VMTF9LTk9XTl9GSUxFUyIsIlBST0RVQ1RJT05fRE9DS0VSRklMRSIsImFwaU5hbWVzIiwiREVGQVVMVF9XRUJBUElfTkFNRSIsIm9wdGlvbnMiLCJmaWxlcyIsIm5hbWVzIiwibGVuZ3RoIiwiZmlyc3QiLCJuYW1lZE9ubHkiLCJwdXNoIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiZG9ja2VyaWdub3JlQ29udGVudCIsImVtaXROYW1lZCIsIm5hbWUiLCJhcGlOYW1lIiwic3RhcnRTY3JpcHQiLCJwcm9qZWN0RGlyIiwid2ViYXBpUHJvamVjdERpciIsInN0YXJ0Q21kIiwic3RhcnRFbnRyeSIsIndlYmFwaVJlbGVhc2VFbnRyeSIsImRvY2tlcmZpbGVGbGFnIiwicmVuZGVyUG5wbUluc3RhbGwiLCJtb2RlIiwiZmxhZ3MiLCJqb2luIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQW1CYUE7ZUFBQUE7O1FBdUNHQztlQUFBQTs7O3VCQTFEaUI7d0JBRXlDO0FBaUJuRSxNQUFNRDs7O0lBQ0lFLE1BQU1DLHVCQUFnQixDQUFDQyxxQkFBcUIsQ0FBQztJQUU3RCxZQUNDLEFBQWlCQyxXQUE4QjtRQUFDQywyQkFBbUI7S0FBQyxFQUNwRSxBQUFpQkMsVUFBdUMsQ0FBQyxDQUFDLENBQ3pEO2FBRmdCRixXQUFBQTthQUNBRSxVQUFBQTtJQUNmO0lBRUlDLFFBQXNCO1FBQzVCLE1BQU1DLFFBQVEsSUFBSSxDQUFDSixRQUFRLENBQUNLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQ0wsUUFBUSxHQUFHO1lBQUNDLDJCQUFtQjtTQUFDO1FBQzlFLE1BQU1LLFFBQVFGLEtBQUssQ0FBQyxFQUFFLElBQUlILDJCQUFtQjtRQUM3QyxNQUFNRSxRQUFzQixFQUFFO1FBRTlCLElBQUksQ0FBQyxJQUFJLENBQUNELE9BQU8sQ0FBQ0ssU0FBUyxFQUFFO1lBQzVCSixNQUFNSyxJQUFJLENBQUM7Z0JBQ1ZDLFVBQVU7Z0JBQ1ZDLFNBQVNDO1lBQ1Y7WUFDQVIsTUFBTUssSUFBSSxDQUFDO2dCQUNWQyxVQUFVO2dCQUNWQyxTQUFTZCwyQkFBMkJVLE9BQU87WUFDNUM7UUFDRDtRQUVBLE1BQU1NLFlBQ0wsSUFBSSxDQUFDVixPQUFPLENBQUNLLFNBQVMsSUFBSUgsTUFBTUMsTUFBTSxHQUFHLEtBQUtDLFVBQVVMLDJCQUFtQjtRQUM1RSxJQUFJVyxXQUFXO1lBQ2QsS0FBSyxNQUFNQyxRQUFRVCxNQUFPO2dCQUN6QkQsTUFBTUssSUFBSSxDQUFDO29CQUNWQyxVQUFVLENBQUMsV0FBVyxFQUFFSSxNQUFNO29CQUM5QkgsU0FBU2QsMkJBQTJCaUIsTUFBTSxDQUFDLE1BQU0sRUFBRUEsTUFBTTtnQkFDMUQ7WUFDRDtRQUNEO1FBRUEsT0FBT1Y7SUFDUjtBQUNEO0FBRU8sU0FBU1AsMkJBQTJCa0IsT0FBZSxFQUFFQyxXQUFtQjtJQUM5RSxNQUFNQyxhQUFhQyxJQUFBQSx3QkFBZ0IsRUFBQ0g7SUFDcEMsTUFBTUksV0FDTEgsZ0JBQWdCLFVBQ2IsMEJBQ0EsQ0FBQyxxQkFBcUIsRUFBRUEsWUFBWSxFQUFFLENBQUM7SUFDM0MsTUFBTUksYUFBYUMsSUFBQUEsMEJBQWtCLEVBQUNOO0lBQ3RDLE1BQU1PLGlCQUFpQk4sZ0JBQWdCLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRUQsU0FBUztJQUVuRSxPQUFPLENBQUM7OztzREFHNkMsRUFBRU8sZUFBZTs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpQmxFLEVBQUVMLFdBQVcsR0FBRyxFQUFFQSxXQUFXOztBQUVsQyxFQUFFTSxrQkFBa0IsT0FBTzs7Ozs7Ozs7Ozs7S0FXdEIsRUFBRU4sV0FBVyxnQkFBZ0IsRUFBRUEsV0FBVzs7QUFFL0MsRUFBRU0sa0JBQWtCLFFBQVE7Ozs7Ozs7Ozs7OzsyQkFZRCxFQUFFTixXQUFXLGdCQUFnQixFQUFFQSxXQUFXOzs7QUFHckUsRUFBRUUsU0FBUztrQ0FDdUIsRUFBRUgsWUFBWSxTQUFTLEVBQUVJLFdBQVc7QUFDdEUsQ0FBQztBQUNEO0FBRUEsOEZBQThGLEdBQzlGLFNBQVNHLGtCQUFrQkMsSUFBb0I7SUFDOUMsTUFBTUMsUUFBUUQsU0FBUyxTQUFTLFlBQVk7SUFDNUMsT0FBTyxDQUFDOzs7Ozs7Ozs7OztnQ0FXdUIsRUFBRUMsTUFBTTs7Y0FFMUIsRUFBRUEsTUFBTTs7YUFFVCxDQUFDO0FBQ2Q7QUFFQSxTQUFTYjtJQUNSLE9BQU87UUFDTjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7S0FDQSxDQUFDYyxJQUFJLENBQUM7QUFDUiJ9
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get SampleConfigModel () {
13
+ return SampleConfigModel;
14
+ },
15
+ get SampleServiceModel () {
16
+ return SampleServiceModel;
17
+ }
18
+ });
19
+ const SAMPLE_CONFIG_CONTENT = `export class SampleConfig {\n\tpublic greeting: string = "";\n}\n`;
20
+ const SAMPLE_SERVICE_CONTENT = [
21
+ `import { inject, injectable } from "@decohere/crucible/decorators";`,
22
+ `import { ConfigurationServiceToken } from "@decohere/nexus/configuration";`,
23
+ `import type { IConfigurationService } from "@decohere/nexus/configuration";`,
24
+ `import { SampleConfig } from "../sample.config.js";`,
25
+ ``,
26
+ `@injectable()`,
27
+ `export class SampleService {`,
28
+ `\tpublic constructor(`,
29
+ `\t\t@inject(ConfigurationServiceToken) private readonly config: IConfigurationService,`,
30
+ `\t) {}`,
31
+ ``,
32
+ `\tpublic async getGreeting(): Promise<string> {`,
33
+ `\t\tconst config = await this.config.get(SampleConfig);`,
34
+ `\t\treturn config.greeting;`,
35
+ `\t}`,
36
+ `}`,
37
+ ``
38
+ ].join("\n");
39
+ class SampleConfigModel {
40
+ files() {
41
+ return [
42
+ {
43
+ filePath: "src/sample.config.ts",
44
+ content: SAMPLE_CONFIG_CONTENT
45
+ }
46
+ ];
47
+ }
48
+ }
49
+ class SampleServiceModel {
50
+ files() {
51
+ return [
52
+ {
53
+ filePath: "src/services/sample.service.ts",
54
+ content: SAMPLE_SERVICE_CONTENT
55
+ }
56
+ ];
57
+ }
58
+ }
59
+
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvbW9kZWxzL3NhbXBsZS1maWxlcy5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFNvdXJjZUZpbGUsIFNvdXJjZUZpbGVQcm92aWRlciB9IGZyb20gXCIuLi8uLi9tb2RlbHMvc291cmNlLWZpbGUuanNcIjtcblxuY29uc3QgU0FNUExFX0NPTkZJR19DT05URU5UID0gYGV4cG9ydCBjbGFzcyBTYW1wbGVDb25maWcge1xcblxcdHB1YmxpYyBncmVldGluZzogc3RyaW5nID0gXCJcIjtcXG59XFxuYDtcblxuY29uc3QgU0FNUExFX1NFUlZJQ0VfQ09OVEVOVCA9IFtcblx0YGltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gXCJAZGVjb2hlcmUvY3J1Y2libGUvZGVjb3JhdG9yc1wiO2AsXG5cdGBpbXBvcnQgeyBDb25maWd1cmF0aW9uU2VydmljZVRva2VuIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb25maWd1cmF0aW9uXCI7YCxcblx0YGltcG9ydCB0eXBlIHsgSUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb25maWd1cmF0aW9uXCI7YCxcblx0YGltcG9ydCB7IFNhbXBsZUNvbmZpZyB9IGZyb20gXCIuLi9zYW1wbGUuY29uZmlnLmpzXCI7YCxcblx0YGAsXG5cdGBAaW5qZWN0YWJsZSgpYCxcblx0YGV4cG9ydCBjbGFzcyBTYW1wbGVTZXJ2aWNlIHtgLFxuXHRgXFx0cHVibGljIGNvbnN0cnVjdG9yKGAsXG5cdGBcXHRcXHRAaW5qZWN0KENvbmZpZ3VyYXRpb25TZXJ2aWNlVG9rZW4pIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBJQ29uZmlndXJhdGlvblNlcnZpY2UsYCxcblx0YFxcdCkge31gLFxuXHRgYCxcblx0YFxcdHB1YmxpYyBhc3luYyBnZXRHcmVldGluZygpOiBQcm9taXNlPHN0cmluZz4ge2AsXG5cdGBcXHRcXHRjb25zdCBjb25maWcgPSBhd2FpdCB0aGlzLmNvbmZpZy5nZXQoU2FtcGxlQ29uZmlnKTtgLFxuXHRgXFx0XFx0cmV0dXJuIGNvbmZpZy5ncmVldGluZztgLFxuXHRgXFx0fWAsXG5cdGB9YCxcblx0YGAsXG5dLmpvaW4oXCJcXG5cIik7XG5cbmV4cG9ydCBjbGFzcyBTYW1wbGVDb25maWdNb2RlbCBpbXBsZW1lbnRzIFNvdXJjZUZpbGVQcm92aWRlciB7XG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInNyYy9zYW1wbGUuY29uZmlnLnRzXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IFNBTVBMRV9DT05GSUdfQ09OVEVOVCxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgU2FtcGxlU2VydmljZU1vZGVsIGltcGxlbWVudHMgU291cmNlRmlsZVByb3ZpZGVyIHtcblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0cmV0dXJuIFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwic3JjL3NlcnZpY2VzL3NhbXBsZS5zZXJ2aWNlLnRzXCIsXG5cdFx0XHRcdGNvbnRlbnQ6IFNBTVBMRV9TRVJWSUNFX0NPTlRFTlQsXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJTYW1wbGVDb25maWdNb2RlbCIsIlNhbXBsZVNlcnZpY2VNb2RlbCIsIlNBTVBMRV9DT05GSUdfQ09OVEVOVCIsIlNBTVBMRV9TRVJWSUNFX0NPTlRFTlQiLCJqb2luIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBd0JhQTtlQUFBQTs7UUFXQUM7ZUFBQUE7OztBQWpDYixNQUFNQyx3QkFBd0IsQ0FBQyxpRUFBaUUsQ0FBQztBQUVqRyxNQUFNQyx5QkFBeUI7SUFDOUIsQ0FBQyxtRUFBbUUsQ0FBQztJQUNyRSxDQUFDLDBFQUEwRSxDQUFDO0lBQzVFLENBQUMsMkVBQTJFLENBQUM7SUFDN0UsQ0FBQyxtREFBbUQsQ0FBQztJQUNyRCxFQUFFO0lBQ0YsQ0FBQyxhQUFhLENBQUM7SUFDZixDQUFDLDRCQUE0QixDQUFDO0lBQzlCLENBQUMscUJBQXFCLENBQUM7SUFDdkIsQ0FBQyxzRkFBc0YsQ0FBQztJQUN4RixDQUFDLE1BQU0sQ0FBQztJQUNSLEVBQUU7SUFDRixDQUFDLCtDQUErQyxDQUFDO0lBQ2pELENBQUMsdURBQXVELENBQUM7SUFDekQsQ0FBQywyQkFBMkIsQ0FBQztJQUM3QixDQUFDLEdBQUcsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsRUFBRTtDQUNGLENBQUNDLElBQUksQ0FBQztBQUVBLE1BQU1KO0lBQ0xLLFFBQXNCO1FBQzVCLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVkMsU0FBU0w7WUFDVjtTQUNBO0lBQ0Y7QUFDRDtBQUVPLE1BQU1EO0lBQ0xJLFFBQXNCO1FBQzVCLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVkMsU0FBU0o7WUFDVjtTQUNBO0lBQ0Y7QUFDRCJ9
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "WebapiDevContainer", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return WebapiDevContainer;
9
+ }
10
+ });
11
+ const _dockerimagemodel = require("../../models/docker-image.model.js");
12
+ const _version = require("../../version.js");
13
+ class WebapiDevContainer extends _dockerimagemodel.DockerfileModel {
14
+ constructor(baseImage = `${_version.DEVCONTAINER_IMAGE_REPOSITORY}:${_version.CREATE_VERSION}`){
15
+ super(baseImage);
16
+ }
17
+ files() {
18
+ return [
19
+ {
20
+ filePath: ".devcontainer/Dockerfile",
21
+ content: this.build()
22
+ }
23
+ ];
24
+ }
25
+ }
26
+
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvbW9kZWxzL3dlYmFwaS1pbWFnZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb2NrZXJmaWxlTW9kZWwgfSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RvY2tlci1pbWFnZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQ1JFQVRFX1ZFUlNJT04sIERFVkNPTlRBSU5FUl9JTUFHRV9SRVBPU0lUT1JZIH0gZnJvbSBcIi4uLy4uL3ZlcnNpb24uanNcIjtcblxuLyoqXG4gKiBTY2FmZm9sZGVkIGFwcCBgLmRldmNvbnRhaW5lci9Eb2NrZXJmaWxlYCDigJQgdGhpbiBgRlJPTWAgdGhlIHB1Ymxpc2hlZCBiYXNlIGltYWdlLlxuICogT3B0aW9uYWwgZmVhdHVyZSBsYXllcnMgKGUuZy4gcG9zdGdyZXNxbC1jbGllbnQpIGFwcGVuZCB2aWEgYGFkZExheWVyYC5cbiAqL1xuZXhwb3J0IGNsYXNzIFdlYmFwaURldkNvbnRhaW5lciBleHRlbmRzIERvY2tlcmZpbGVNb2RlbCB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihiYXNlSW1hZ2UgPSBgJHtERVZDT05UQUlORVJfSU1BR0VfUkVQT1NJVE9SWX06JHtDUkVBVEVfVkVSU0lPTn1gKSB7XG5cdFx0c3VwZXIoYmFzZUltYWdlKTtcblx0fVxuXG5cdHB1YmxpYyBmaWxlcygpIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZGV2Y29udGFpbmVyL0RvY2tlcmZpbGVcIixcblx0XHRcdFx0Y29udGVudDogdGhpcy5idWlsZCgpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiV2ViYXBpRGV2Q29udGFpbmVyIiwiRG9ja2VyZmlsZU1vZGVsIiwiYmFzZUltYWdlIiwiREVWQ09OVEFJTkVSX0lNQUdFX1JFUE9TSVRPUlkiLCJDUkVBVEVfVkVSU0lPTiIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiYnVpbGQiXSwibWFwcGluZ3MiOiI7Ozs7K0JBT2FBOzs7ZUFBQUE7OztrQ0FQbUI7eUJBQzhCO0FBTXZELE1BQU1BLDJCQUEyQkMsaUNBQWU7SUFDdEQsWUFBbUJDLFlBQVksR0FBR0Msc0NBQTZCLENBQUMsQ0FBQyxFQUFFQyx1QkFBYyxFQUFFLENBQUU7UUFDcEYsS0FBSyxDQUFDRjtJQUNQO0lBRU9HLFFBQVE7UUFDZCxPQUFPO1lBQ047Z0JBQ0NDLFVBQVU7Z0JBQ1ZDLFNBQVMsSUFBSSxDQUFDQyxLQUFLO1lBQ3BCO1NBQ0E7SUFDRjtBQUNEIn0=
@@ -0,0 +1,175 @@
1
+ /** Minimal OpenAPI 3 document shape used for Postman conversion. */ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "buildHelloOpenApiDocument", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return buildHelloOpenApiDocument;
9
+ }
10
+ });
11
+ function buildHelloOpenApiDocument(projectName) {
12
+ return {
13
+ openapi: "3.0.3",
14
+ info: {
15
+ title: `${projectName} WebAPI`,
16
+ version: "1.0.0",
17
+ description: "Generated from OpenAPI for Postman. Auth/env overlays are applied separately."
18
+ },
19
+ servers: [
20
+ {
21
+ url: "{{baseUrl}}"
22
+ }
23
+ ],
24
+ paths: {
25
+ "/hello": {
26
+ get: {
27
+ operationId: "HelloController.getAll",
28
+ summary: "List (anonymous)",
29
+ tags: [
30
+ "Hello"
31
+ ],
32
+ parameters: [
33
+ {
34
+ name: "filter",
35
+ in: "query",
36
+ required: false,
37
+ schema: {
38
+ type: "string"
39
+ }
40
+ }
41
+ ],
42
+ responses: {
43
+ "200": {
44
+ description: "Successful response"
45
+ }
46
+ }
47
+ },
48
+ post: {
49
+ operationId: "HelloController.create",
50
+ summary: "Create",
51
+ tags: [
52
+ "Hello"
53
+ ],
54
+ requestBody: {
55
+ required: true,
56
+ content: {
57
+ "application/json": {
58
+ schema: {
59
+ type: "object",
60
+ properties: {
61
+ message: {
62
+ type: "string"
63
+ }
64
+ },
65
+ required: [
66
+ "message"
67
+ ],
68
+ example: {
69
+ message: "hello"
70
+ }
71
+ }
72
+ }
73
+ }
74
+ },
75
+ responses: {
76
+ "200": {
77
+ description: "Successful response"
78
+ }
79
+ }
80
+ }
81
+ },
82
+ "/hello/{id}": {
83
+ get: {
84
+ operationId: "HelloController.getOne",
85
+ summary: "Get by id",
86
+ tags: [
87
+ "Hello"
88
+ ],
89
+ parameters: [
90
+ {
91
+ name: "id",
92
+ in: "path",
93
+ required: true,
94
+ schema: {
95
+ type: "string"
96
+ }
97
+ }
98
+ ],
99
+ responses: {
100
+ "200": {
101
+ description: "Successful response"
102
+ }
103
+ }
104
+ },
105
+ put: {
106
+ operationId: "HelloController.update",
107
+ summary: "Update",
108
+ tags: [
109
+ "Hello"
110
+ ],
111
+ parameters: [
112
+ {
113
+ name: "id",
114
+ in: "path",
115
+ required: true,
116
+ schema: {
117
+ type: "string"
118
+ }
119
+ }
120
+ ],
121
+ requestBody: {
122
+ required: true,
123
+ content: {
124
+ "application/json": {
125
+ schema: {
126
+ type: "object",
127
+ properties: {
128
+ message: {
129
+ type: "string"
130
+ }
131
+ },
132
+ required: [
133
+ "message"
134
+ ],
135
+ example: {
136
+ message: "updated"
137
+ }
138
+ }
139
+ }
140
+ }
141
+ },
142
+ responses: {
143
+ "200": {
144
+ description: "Successful response"
145
+ }
146
+ }
147
+ },
148
+ delete: {
149
+ operationId: "HelloController.remove",
150
+ summary: "Delete",
151
+ tags: [
152
+ "Hello"
153
+ ],
154
+ parameters: [
155
+ {
156
+ name: "id",
157
+ in: "path",
158
+ required: true,
159
+ schema: {
160
+ type: "string"
161
+ }
162
+ }
163
+ ],
164
+ responses: {
165
+ "200": {
166
+ description: "Successful response"
167
+ }
168
+ }
169
+ }
170
+ }
171
+ }
172
+ };
173
+ }
174
+
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvcG9zdG1hbi9oZWxsby1vcGVuYXBpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBNaW5pbWFsIE9wZW5BUEkgMyBkb2N1bWVudCBzaGFwZSB1c2VkIGZvciBQb3N0bWFuIGNvbnZlcnNpb24uICovXG5leHBvcnQgdHlwZSBTY2FmZm9sZE9wZW5BcGlEb2N1bWVudCA9IHtcblx0b3BlbmFwaTogXCIzLjAuM1wiO1xuXHRpbmZvOiB7IHRpdGxlOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfTtcblx0c2VydmVycz86IEFycmF5PHsgdXJsOiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nIH0+O1xuXHRwYXRoczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufTtcblxuLyoqXG4gKiBDYW5vbmljYWwgSGVsbG8gV2ViQVBJIE9wZW5BUEkgZG9jdW1lbnQgdXNlZCB0byBnZW5lcmF0ZSBQb3N0bWFuIHJlcXVlc3RzLlxuICogS2VlcCBwYXRocyBhbGlnbmVkIHdpdGggc2NhZmZvbGRlZCBIZWxsb0NvbnRyb2xsZXIgKGAvaGVsbG9gLCBgL2hlbGxvL3tpZH1gKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkSGVsbG9PcGVuQXBpRG9jdW1lbnQocHJvamVjdE5hbWU6IHN0cmluZyk6IFNjYWZmb2xkT3BlbkFwaURvY3VtZW50IHtcblx0cmV0dXJuIHtcblx0XHRvcGVuYXBpOiBcIjMuMC4zXCIsXG5cdFx0aW5mbzoge1xuXHRcdFx0dGl0bGU6IGAke3Byb2plY3ROYW1lfSBXZWJBUElgLFxuXHRcdFx0dmVyc2lvbjogXCIxLjAuMFwiLFxuXHRcdFx0ZGVzY3JpcHRpb246XG5cdFx0XHRcdFwiR2VuZXJhdGVkIGZyb20gT3BlbkFQSSBmb3IgUG9zdG1hbi4gQXV0aC9lbnYgb3ZlcmxheXMgYXJlIGFwcGxpZWQgc2VwYXJhdGVseS5cIixcblx0XHR9LFxuXHRcdHNlcnZlcnM6IFt7IHVybDogXCJ7e2Jhc2VVcmx9fVwiIH1dLFxuXHRcdHBhdGhzOiB7XG5cdFx0XHRcIi9oZWxsb1wiOiB7XG5cdFx0XHRcdGdldDoge1xuXHRcdFx0XHRcdG9wZXJhdGlvbklkOiBcIkhlbGxvQ29udHJvbGxlci5nZXRBbGxcIixcblx0XHRcdFx0XHRzdW1tYXJ5OiBcIkxpc3QgKGFub255bW91cylcIixcblx0XHRcdFx0XHR0YWdzOiBbXCJIZWxsb1wiXSxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiZmlsdGVyXCIsIGluOiBcInF1ZXJ5XCIsIHJlcXVpcmVkOiBmYWxzZSwgc2NoZW1hOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0cmVzcG9uc2VzOiB7IFwiMjAwXCI6IHsgZGVzY3JpcHRpb246IFwiU3VjY2Vzc2Z1bCByZXNwb25zZVwiIH0gfSxcblx0XHRcdFx0fSxcblx0XHRcdFx0cG9zdDoge1xuXHRcdFx0XHRcdG9wZXJhdGlvbklkOiBcIkhlbGxvQ29udHJvbGxlci5jcmVhdGVcIixcblx0XHRcdFx0XHRzdW1tYXJ5OiBcIkNyZWF0ZVwiLFxuXHRcdFx0XHRcdHRhZ3M6IFtcIkhlbGxvXCJdLFxuXHRcdFx0XHRcdHJlcXVlc3RCb2R5OiB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0XHRcdFx0XCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRzY2hlbWE6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwib2JqZWN0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0aWVzOiB7IG1lc3NhZ2U6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZDogW1wibWVzc2FnZVwiXSxcblx0XHRcdFx0XHRcdFx0XHRcdGV4YW1wbGU6IHsgbWVzc2FnZTogXCJoZWxsb1wiIH0sXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZXNwb25zZXM6IHsgXCIyMDBcIjogeyBkZXNjcmlwdGlvbjogXCJTdWNjZXNzZnVsIHJlc3BvbnNlXCIgfSB9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdFwiL2hlbGxvL3tpZH1cIjoge1xuXHRcdFx0XHRnZXQ6IHtcblx0XHRcdFx0XHRvcGVyYXRpb25JZDogXCJIZWxsb0NvbnRyb2xsZXIuZ2V0T25lXCIsXG5cdFx0XHRcdFx0c3VtbWFyeTogXCJHZXQgYnkgaWRcIixcblx0XHRcdFx0XHR0YWdzOiBbXCJIZWxsb1wiXSxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBbeyBuYW1lOiBcImlkXCIsIGluOiBcInBhdGhcIiwgcmVxdWlyZWQ6IHRydWUsIHNjaGVtYTogeyB0eXBlOiBcInN0cmluZ1wiIH0gfV0sXG5cdFx0XHRcdFx0cmVzcG9uc2VzOiB7IFwiMjAwXCI6IHsgZGVzY3JpcHRpb246IFwiU3VjY2Vzc2Z1bCByZXNwb25zZVwiIH0gfSxcblx0XHRcdFx0fSxcblx0XHRcdFx0cHV0OiB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uSWQ6IFwiSGVsbG9Db250cm9sbGVyLnVwZGF0ZVwiLFxuXHRcdFx0XHRcdHN1bW1hcnk6IFwiVXBkYXRlXCIsXG5cdFx0XHRcdFx0dGFnczogW1wiSGVsbG9cIl0sXG5cdFx0XHRcdFx0cGFyYW1ldGVyczogW3sgbmFtZTogXCJpZFwiLCBpbjogXCJwYXRoXCIsIHJlcXVpcmVkOiB0cnVlLCBzY2hlbWE6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH1dLFxuXHRcdFx0XHRcdHJlcXVlc3RCb2R5OiB7XG5cdFx0XHRcdFx0XHRyZXF1aXJlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0XHRcdFx0XCJhcHBsaWNhdGlvbi9qc29uXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRzY2hlbWE6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwib2JqZWN0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9wZXJ0aWVzOiB7IG1lc3NhZ2U6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXF1aXJlZDogW1wibWVzc2FnZVwiXSxcblx0XHRcdFx0XHRcdFx0XHRcdGV4YW1wbGU6IHsgbWVzc2FnZTogXCJ1cGRhdGVkXCIgfSxcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlc3BvbnNlczogeyBcIjIwMFwiOiB7IGRlc2NyaXB0aW9uOiBcIlN1Y2Nlc3NmdWwgcmVzcG9uc2VcIiB9IH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGRlbGV0ZToge1xuXHRcdFx0XHRcdG9wZXJhdGlvbklkOiBcIkhlbGxvQ29udHJvbGxlci5yZW1vdmVcIixcblx0XHRcdFx0XHRzdW1tYXJ5OiBcIkRlbGV0ZVwiLFxuXHRcdFx0XHRcdHRhZ3M6IFtcIkhlbGxvXCJdLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM6IFt7IG5hbWU6IFwiaWRcIiwgaW46IFwicGF0aFwiLCByZXF1aXJlZDogdHJ1ZSwgc2NoZW1hOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9XSxcblx0XHRcdFx0XHRyZXNwb25zZXM6IHsgXCIyMDBcIjogeyBkZXNjcmlwdGlvbjogXCJTdWNjZXNzZnVsIHJlc3BvbnNlXCIgfSB9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9O1xufVxuIl0sIm5hbWVzIjpbImJ1aWxkSGVsbG9PcGVuQXBpRG9jdW1lbnQiLCJwcm9qZWN0TmFtZSIsIm9wZW5hcGkiLCJpbmZvIiwidGl0bGUiLCJ2ZXJzaW9uIiwiZGVzY3JpcHRpb24iLCJzZXJ2ZXJzIiwidXJsIiwicGF0aHMiLCJnZXQiLCJvcGVyYXRpb25JZCIsInN1bW1hcnkiLCJ0YWdzIiwicGFyYW1ldGVycyIsIm5hbWUiLCJpbiIsInJlcXVpcmVkIiwic2NoZW1hIiwidHlwZSIsInJlc3BvbnNlcyIsInBvc3QiLCJyZXF1ZXN0Qm9keSIsImNvbnRlbnQiLCJwcm9wZXJ0aWVzIiwibWVzc2FnZSIsImV4YW1wbGUiLCJwdXQiLCJkZWxldGUiXSwibWFwcGluZ3MiOiJBQUFBLGtFQUFrRTs7OzsrQkFZbERBOzs7ZUFBQUE7OztBQUFULFNBQVNBLDBCQUEwQkMsV0FBbUI7SUFDNUQsT0FBTztRQUNOQyxTQUFTO1FBQ1RDLE1BQU07WUFDTEMsT0FBTyxHQUFHSCxZQUFZLE9BQU8sQ0FBQztZQUM5QkksU0FBUztZQUNUQyxhQUNDO1FBQ0Y7UUFDQUMsU0FBUztZQUFDO2dCQUFFQyxLQUFLO1lBQWM7U0FBRTtRQUNqQ0MsT0FBTztZQUNOLFVBQVU7Z0JBQ1RDLEtBQUs7b0JBQ0pDLGFBQWE7b0JBQ2JDLFNBQVM7b0JBQ1RDLE1BQU07d0JBQUM7cUJBQVE7b0JBQ2ZDLFlBQVk7d0JBQ1g7NEJBQUVDLE1BQU07NEJBQVVDLElBQUk7NEJBQVNDLFVBQVU7NEJBQU9DLFFBQVE7Z0NBQUVDLE1BQU07NEJBQVM7d0JBQUU7cUJBQzNFO29CQUNEQyxXQUFXO3dCQUFFLE9BQU87NEJBQUVkLGFBQWE7d0JBQXNCO29CQUFFO2dCQUM1RDtnQkFDQWUsTUFBTTtvQkFDTFYsYUFBYTtvQkFDYkMsU0FBUztvQkFDVEMsTUFBTTt3QkFBQztxQkFBUTtvQkFDZlMsYUFBYTt3QkFDWkwsVUFBVTt3QkFDVk0sU0FBUzs0QkFDUixvQkFBb0I7Z0NBQ25CTCxRQUFRO29DQUNQQyxNQUFNO29DQUNOSyxZQUFZO3dDQUFFQyxTQUFTOzRDQUFFTixNQUFNO3dDQUFTO29DQUFFO29DQUMxQ0YsVUFBVTt3Q0FBQztxQ0FBVTtvQ0FDckJTLFNBQVM7d0NBQUVELFNBQVM7b0NBQVE7Z0NBQzdCOzRCQUNEO3dCQUNEO29CQUNEO29CQUNBTCxXQUFXO3dCQUFFLE9BQU87NEJBQUVkLGFBQWE7d0JBQXNCO29CQUFFO2dCQUM1RDtZQUNEO1lBQ0EsZUFBZTtnQkFDZEksS0FBSztvQkFDSkMsYUFBYTtvQkFDYkMsU0FBUztvQkFDVEMsTUFBTTt3QkFBQztxQkFBUTtvQkFDZkMsWUFBWTt3QkFBQzs0QkFBRUMsTUFBTTs0QkFBTUMsSUFBSTs0QkFBUUMsVUFBVTs0QkFBTUMsUUFBUTtnQ0FBRUMsTUFBTTs0QkFBUzt3QkFBRTtxQkFBRTtvQkFDcEZDLFdBQVc7d0JBQUUsT0FBTzs0QkFBRWQsYUFBYTt3QkFBc0I7b0JBQUU7Z0JBQzVEO2dCQUNBcUIsS0FBSztvQkFDSmhCLGFBQWE7b0JBQ2JDLFNBQVM7b0JBQ1RDLE1BQU07d0JBQUM7cUJBQVE7b0JBQ2ZDLFlBQVk7d0JBQUM7NEJBQUVDLE1BQU07NEJBQU1DLElBQUk7NEJBQVFDLFVBQVU7NEJBQU1DLFFBQVE7Z0NBQUVDLE1BQU07NEJBQVM7d0JBQUU7cUJBQUU7b0JBQ3BGRyxhQUFhO3dCQUNaTCxVQUFVO3dCQUNWTSxTQUFTOzRCQUNSLG9CQUFvQjtnQ0FDbkJMLFFBQVE7b0NBQ1BDLE1BQU07b0NBQ05LLFlBQVk7d0NBQUVDLFNBQVM7NENBQUVOLE1BQU07d0NBQVM7b0NBQUU7b0NBQzFDRixVQUFVO3dDQUFDO3FDQUFVO29DQUNyQlMsU0FBUzt3Q0FBRUQsU0FBUztvQ0FBVTtnQ0FDL0I7NEJBQ0Q7d0JBQ0Q7b0JBQ0Q7b0JBQ0FMLFdBQVc7d0JBQUUsT0FBTzs0QkFBRWQsYUFBYTt3QkFBc0I7b0JBQUU7Z0JBQzVEO2dCQUNBc0IsUUFBUTtvQkFDUGpCLGFBQWE7b0JBQ2JDLFNBQVM7b0JBQ1RDLE1BQU07d0JBQUM7cUJBQVE7b0JBQ2ZDLFlBQVk7d0JBQUM7NEJBQUVDLE1BQU07NEJBQU1DLElBQUk7NEJBQVFDLFVBQVU7NEJBQU1DLFFBQVE7Z0NBQUVDLE1BQU07NEJBQVM7d0JBQUU7cUJBQUU7b0JBQ3BGQyxXQUFXO3dCQUFFLE9BQU87NEJBQUVkLGFBQWE7d0JBQXNCO29CQUFFO2dCQUM1RDtZQUNEO1FBQ0Q7SUFDRDtBQUNEIn0=