@decohere/scaffold 0.0.1-dev.18 → 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 (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,184 @@
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 buildEnvironmentYaml () {
13
+ return buildEnvironmentYaml;
14
+ },
15
+ get buildLocalViewFilesFromCollection () {
16
+ return buildLocalViewFilesFromCollection;
17
+ }
18
+ });
19
+ const _nodecrypto = require("node:crypto");
20
+ const _openapitopostman = require("./openapi-to-postman.js");
21
+ function yamlQuote(value) {
22
+ if (/[:#{}[\],&*?|<>=!%@`]/.test(value) || value.includes("\n") || value === "") {
23
+ return JSON.stringify(value);
24
+ }
25
+ return value;
26
+ }
27
+ function buildEnvironmentYaml(name, auth, options) {
28
+ const values = [
29
+ {
30
+ key: "baseUrl",
31
+ value: "http://localhost:3000"
32
+ }
33
+ ];
34
+ if (auth?.auth0Domain) {
35
+ values.push({
36
+ key: "auth0Domain",
37
+ value: auth.auth0Domain
38
+ }, {
39
+ key: "auth0Audience",
40
+ value: auth.auth0Audience ?? ""
41
+ }, {
42
+ key: "auth0ClientId",
43
+ value: auth.auth0ClientId ?? ""
44
+ }, {
45
+ key: "authUrl",
46
+ value: `https://${auth.auth0Domain}/authorize?audience=${auth.auth0Audience ?? ""}`
47
+ }, {
48
+ key: "accessTokenUrl",
49
+ value: `https://${auth.auth0Domain}/oauth/token`
50
+ }, {
51
+ key: "callbackUrl",
52
+ value: options.callbacks[0]
53
+ }, {
54
+ key: "scope",
55
+ value: options.scopes
56
+ });
57
+ }
58
+ const lines = [
59
+ `name: ${yamlQuote(name)}`,
60
+ "values:"
61
+ ];
62
+ for (const v of values){
63
+ lines.push(` - key: ${v.key}`);
64
+ lines.push(` value: ${yamlQuote(v.value)}`);
65
+ lines.push(" enabled: true");
66
+ }
67
+ return `${lines.join("\n")}\n`;
68
+ }
69
+ function buildLocalViewFilesFromCollection(collection, projectName, auth, options) {
70
+ const collectionDir = `postman/collections/${projectName} WebAPI`;
71
+ const files = [];
72
+ const authBlock = auth?.auth0Domain ? [
73
+ "auth:",
74
+ ` - id: ${(0, _nodecrypto.randomUUID)()}`,
75
+ " type: oauth2",
76
+ " name: OAuth 2.0",
77
+ " credentials:",
78
+ " addTokenTo: header",
79
+ " grant_type: authorization_code_with_pkce",
80
+ ` authUrl: https://${auth.auth0Domain}/authorize?audience=${auth.auth0Audience ?? ""}`,
81
+ ` accessTokenUrl: https://${auth.auth0Domain}/oauth/token`,
82
+ ` clientId: ${yamlQuote(auth.auth0ClientId ?? "")}`,
83
+ ` scope: ${yamlQuote(options.scopes)}`,
84
+ ` redirect_uri: ${options.callbacks[0]}`,
85
+ " useBrowser: true",
86
+ " challengeAlgorithm: S256",
87
+ " client_authentication: body",
88
+ ' clientSecret: ""',
89
+ ` tokenName: ${yamlQuote(`${projectName} Access Token`)}`,
90
+ ""
91
+ ].join("\n") : "";
92
+ files.push({
93
+ filePath: `${collectionDir}/.resources/definition.yaml`,
94
+ content: [
95
+ "$kind: collection",
96
+ `name: ${yamlQuote(`${projectName} WebAPI`)}`,
97
+ "schemaVersion: '3.0'",
98
+ "description: >-",
99
+ " Open this project root in Postman Local View (Files → Open folder).",
100
+ " Select the Local environment, then Authorization → Get New Access Token (PKCE).",
101
+ " Route requests are generated from OpenAPI; Auth0 overlay is hand-authored.",
102
+ authBlock
103
+ ].filter((l)=>l !== undefined).join("\n").replace(/\n+$/, "\n")
104
+ });
105
+ let folderOrder = 1000;
106
+ for (const folder of collection.item ?? []){
107
+ if (folder.item == null) {
108
+ continue;
109
+ }
110
+ const folderName = folder.name ?? "Requests";
111
+ files.push({
112
+ filePath: `${collectionDir}/${folderName}/.resources/definition.yaml`,
113
+ content: [
114
+ "$kind: folder",
115
+ `name: ${yamlQuote(folderName)}`,
116
+ `order: ${folderOrder}`,
117
+ ""
118
+ ].join("\n")
119
+ });
120
+ folderOrder += 1000;
121
+ let requestOrder = 1000;
122
+ for (const child of folder.item){
123
+ const yaml = requestToLocalViewYaml(child, requestOrder);
124
+ if (yaml == null) {
125
+ continue;
126
+ }
127
+ const fileName = `${sanitizeFileName(child.name ?? "Request")}.request.yaml`;
128
+ files.push({
129
+ filePath: `${collectionDir}/${folderName}/${fileName}`,
130
+ content: yaml
131
+ });
132
+ requestOrder += 1000;
133
+ }
134
+ }
135
+ return files;
136
+ }
137
+ function requestToLocalViewYaml(item, order) {
138
+ const request = item.request;
139
+ if (request == null) {
140
+ return null;
141
+ }
142
+ const method = (request.method ?? "GET").toUpperCase();
143
+ const url = requestUrlForLocalView(request);
144
+ const lines = [
145
+ "$kind: http-request",
146
+ `name: ${yamlQuote(item.name ?? method)}`,
147
+ `method: ${method}`,
148
+ `url: ${yamlQuote(url)}`
149
+ ];
150
+ if (request.auth?.type === "noauth") {
151
+ lines.push("auth:", " type: noauth");
152
+ }
153
+ const contentType = request.header?.find((h)=>h.key.toLowerCase() === "content-type")?.value;
154
+ const rawBody = request.body?.raw?.trim();
155
+ if (rawBody) {
156
+ lines.push("headers:");
157
+ lines.push(` Content-Type: ${contentType ?? "application/json"}`);
158
+ lines.push("body:");
159
+ lines.push(" type: json");
160
+ lines.push(" content: |-");
161
+ for (const bodyLine of rawBody.split("\n")){
162
+ lines.push(` ${bodyLine}`);
163
+ }
164
+ }
165
+ lines.push(`order: ${order}`, "");
166
+ return lines.join("\n");
167
+ }
168
+ function requestUrlForLocalView(request) {
169
+ const url = request.url;
170
+ if (typeof url === "string") {
171
+ return (0, _openapitopostman.openApiPathParamsToColon)(url);
172
+ }
173
+ if (url?.raw) {
174
+ return (0, _openapitopostman.openApiPathParamsToColon)(url.raw);
175
+ }
176
+ const host = url?.host?.[0] ?? "{{baseUrl}}";
177
+ const path = (url?.path ?? []).map((segment)=>(0, _openapitopostman.openApiPathParamsToColon)(String(segment))).join("/");
178
+ return path ? `${host}/${path}` : host;
179
+ }
180
+ function sanitizeFileName(name) {
181
+ return name.replace(/[^\w\s()-]+/g, "").trim() || "Request";
182
+ }
183
+
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvcG9zdG1hbi9sb2NhbC12aWV3LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7XG5cdHR5cGUgQXV0aDBFbnYsXG5cdG9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbixcblx0dHlwZSBQb3N0bWFuQ29sbGVjdGlvbixcblx0dHlwZSBQb3N0bWFuSXRlbSxcblx0dHlwZSBQb3N0bWFuUmVxdWVzdCxcbn0gZnJvbSBcIi4vb3BlbmFwaS10by1wb3N0bWFuLmpzXCI7XG5cbmZ1bmN0aW9uIHlhbWxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcblx0aWYgKC9bOiN7fVtcXF0sJio/fDw+PSElQGBdLy50ZXN0KHZhbHVlKSB8fCB2YWx1ZS5pbmNsdWRlcyhcIlxcblwiKSB8fCB2YWx1ZSA9PT0gXCJcIikge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufVxuXG4vKiogTG9jYWwgVmlldyAvIE5hdGl2ZSBHaXQgZW52aXJvbm1lbnQgKFlBTUwpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW52aXJvbm1lbnRZYW1sKFxuXHRuYW1lOiBzdHJpbmcsXG5cdGF1dGg6IEF1dGgwRW52IHwgdW5kZWZpbmVkLFxuXHRvcHRpb25zOiB7IGNhbGxiYWNrczogcmVhZG9ubHkgc3RyaW5nW107IHNjb3Blczogc3RyaW5nIH0sXG4pOiBzdHJpbmcge1xuXHRjb25zdCB2YWx1ZXM6IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT4gPSBbXG5cdFx0eyBrZXk6IFwiYmFzZVVybFwiLCB2YWx1ZTogXCJodHRwOi8vbG9jYWxob3N0OjMwMDBcIiB9LFxuXHRdO1xuXHRpZiAoYXV0aD8uYXV0aDBEb21haW4pIHtcblx0XHR2YWx1ZXMucHVzaChcblx0XHRcdHsga2V5OiBcImF1dGgwRG9tYWluXCIsIHZhbHVlOiBhdXRoLmF1dGgwRG9tYWluIH0sXG5cdFx0XHR7IGtleTogXCJhdXRoMEF1ZGllbmNlXCIsIHZhbHVlOiBhdXRoLmF1dGgwQXVkaWVuY2UgPz8gXCJcIiB9LFxuXHRcdFx0eyBrZXk6IFwiYXV0aDBDbGllbnRJZFwiLCB2YWx1ZTogYXV0aC5hdXRoMENsaWVudElkID8/IFwiXCIgfSxcblx0XHRcdHtcblx0XHRcdFx0a2V5OiBcImF1dGhVcmxcIixcblx0XHRcdFx0dmFsdWU6IGBodHRwczovLyR7YXV0aC5hdXRoMERvbWFpbn0vYXV0aG9yaXplP2F1ZGllbmNlPSR7YXV0aC5hdXRoMEF1ZGllbmNlID8/IFwiXCJ9YCxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdGtleTogXCJhY2Nlc3NUb2tlblVybFwiLFxuXHRcdFx0XHR2YWx1ZTogYGh0dHBzOi8vJHthdXRoLmF1dGgwRG9tYWlufS9vYXV0aC90b2tlbmAsXG5cdFx0XHR9LFxuXHRcdFx0eyBrZXk6IFwiY2FsbGJhY2tVcmxcIiwgdmFsdWU6IG9wdGlvbnMuY2FsbGJhY2tzWzBdIH0sXG5cdFx0XHR7IGtleTogXCJzY29wZVwiLCB2YWx1ZTogb3B0aW9ucy5zY29wZXMgfSxcblx0XHQpO1xuXHR9XG5cblx0Y29uc3QgbGluZXMgPSBbYG5hbWU6ICR7eWFtbFF1b3RlKG5hbWUpfWAsIFwidmFsdWVzOlwiXTtcblx0Zm9yIChjb25zdCB2IG9mIHZhbHVlcykge1xuXHRcdGxpbmVzLnB1c2goYCAgLSBrZXk6ICR7di5rZXl9YCk7XG5cdFx0bGluZXMucHVzaChgICAgIHZhbHVlOiAke3lhbWxRdW90ZSh2LnZhbHVlKX1gKTtcblx0XHRsaW5lcy5wdXNoKFwiICAgIGVuYWJsZWQ6IHRydWVcIik7XG5cdH1cblx0cmV0dXJuIGAke2xpbmVzLmpvaW4oXCJcXG5cIil9XFxuYDtcbn1cblxuLyoqXG4gKiBCdWlsZCBQb3N0bWFuIExvY2FsIFZpZXcgbXVsdGktZmlsZSBZQU1MIGZyb20gYSB2Mi4xIGNvbGxlY3Rpb24gKHJvdXRlcylcbiAqIHBsdXMgaGFuZC1hdXRob3JlZCBBdXRoMCBvdmVybGF5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMb2NhbFZpZXdGaWxlc0Zyb21Db2xsZWN0aW9uKFxuXHRjb2xsZWN0aW9uOiBQb3N0bWFuQ29sbGVjdGlvbixcblx0cHJvamVjdE5hbWU6IHN0cmluZyxcblx0YXV0aDogQXV0aDBFbnYgfCB1bmRlZmluZWQsXG5cdG9wdGlvbnM6IHsgY2FsbGJhY2tzOiByZWFkb25seSBzdHJpbmdbXTsgc2NvcGVzOiBzdHJpbmcgfSxcbik6IEFycmF5PHsgZmlsZVBhdGg6IHN0cmluZzsgY29udGVudDogc3RyaW5nIH0+IHtcblx0Y29uc3QgY29sbGVjdGlvbkRpciA9IGBwb3N0bWFuL2NvbGxlY3Rpb25zLyR7cHJvamVjdE5hbWV9IFdlYkFQSWA7XG5cdGNvbnN0IGZpbGVzOiBBcnJheTx7IGZpbGVQYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9PiA9IFtdO1xuXG5cdGNvbnN0IGF1dGhCbG9jayA9IGF1dGg/LmF1dGgwRG9tYWluXG5cdFx0PyBbXG5cdFx0XHRcdFwiYXV0aDpcIixcblx0XHRcdFx0YCAgLSBpZDogJHtyYW5kb21VVUlEKCl9YCxcblx0XHRcdFx0XCIgICAgdHlwZTogb2F1dGgyXCIsXG5cdFx0XHRcdFwiICAgIG5hbWU6IE9BdXRoIDIuMFwiLFxuXHRcdFx0XHRcIiAgICBjcmVkZW50aWFsczpcIixcblx0XHRcdFx0XCIgICAgICBhZGRUb2tlblRvOiBoZWFkZXJcIixcblx0XHRcdFx0XCIgICAgICBncmFudF90eXBlOiBhdXRob3JpemF0aW9uX2NvZGVfd2l0aF9wa2NlXCIsXG5cdFx0XHRcdGAgICAgICBhdXRoVXJsOiBodHRwczovLyR7YXV0aC5hdXRoMERvbWFpbn0vYXV0aG9yaXplP2F1ZGllbmNlPSR7YXV0aC5hdXRoMEF1ZGllbmNlID8/IFwiXCJ9YCxcblx0XHRcdFx0YCAgICAgIGFjY2Vzc1Rva2VuVXJsOiBodHRwczovLyR7YXV0aC5hdXRoMERvbWFpbn0vb2F1dGgvdG9rZW5gLFxuXHRcdFx0XHRgICAgICAgY2xpZW50SWQ6ICR7eWFtbFF1b3RlKGF1dGguYXV0aDBDbGllbnRJZCA/PyBcIlwiKX1gLFxuXHRcdFx0XHRgICAgICAgc2NvcGU6ICR7eWFtbFF1b3RlKG9wdGlvbnMuc2NvcGVzKX1gLFxuXHRcdFx0XHRgICAgICAgcmVkaXJlY3RfdXJpOiAke29wdGlvbnMuY2FsbGJhY2tzWzBdfWAsXG5cdFx0XHRcdFwiICAgICAgdXNlQnJvd3NlcjogdHJ1ZVwiLFxuXHRcdFx0XHRcIiAgICAgIGNoYWxsZW5nZUFsZ29yaXRobTogUzI1NlwiLFxuXHRcdFx0XHRcIiAgICAgIGNsaWVudF9hdXRoZW50aWNhdGlvbjogYm9keVwiLFxuXHRcdFx0XHQnICAgICAgY2xpZW50U2VjcmV0OiBcIlwiJyxcblx0XHRcdFx0YCAgICAgIHRva2VuTmFtZTogJHt5YW1sUXVvdGUoYCR7cHJvamVjdE5hbWV9IEFjY2VzcyBUb2tlbmApfWAsXG5cdFx0XHRcdFwiXCIsXG5cdFx0XHRdLmpvaW4oXCJcXG5cIilcblx0XHQ6IFwiXCI7XG5cblx0ZmlsZXMucHVzaCh7XG5cdFx0ZmlsZVBhdGg6IGAke2NvbGxlY3Rpb25EaXJ9Ly5yZXNvdXJjZXMvZGVmaW5pdGlvbi55YW1sYCxcblx0XHRjb250ZW50OiBbXG5cdFx0XHRcIiRraW5kOiBjb2xsZWN0aW9uXCIsXG5cdFx0XHRgbmFtZTogJHt5YW1sUXVvdGUoYCR7cHJvamVjdE5hbWV9IFdlYkFQSWApfWAsXG5cdFx0XHRcInNjaGVtYVZlcnNpb246ICczLjAnXCIsXG5cdFx0XHRcImRlc2NyaXB0aW9uOiA+LVwiLFxuXHRcdFx0XCIgIE9wZW4gdGhpcyBwcm9qZWN0IHJvb3QgaW4gUG9zdG1hbiBMb2NhbCBWaWV3IChGaWxlcyDihpIgT3BlbiBmb2xkZXIpLlwiLFxuXHRcdFx0XCIgIFNlbGVjdCB0aGUgTG9jYWwgZW52aXJvbm1lbnQsIHRoZW4gQXV0aG9yaXphdGlvbiDihpIgR2V0IE5ldyBBY2Nlc3MgVG9rZW4gKFBLQ0UpLlwiLFxuXHRcdFx0XCIgIFJvdXRlIHJlcXVlc3RzIGFyZSBnZW5lcmF0ZWQgZnJvbSBPcGVuQVBJOyBBdXRoMCBvdmVybGF5IGlzIGhhbmQtYXV0aG9yZWQuXCIsXG5cdFx0XHRhdXRoQmxvY2ssXG5cdFx0XVxuXHRcdFx0LmZpbHRlcigobCkgPT4gbCAhPT0gdW5kZWZpbmVkKVxuXHRcdFx0LmpvaW4oXCJcXG5cIilcblx0XHRcdC5yZXBsYWNlKC9cXG4rJC8sIFwiXFxuXCIpLFxuXHR9KTtcblxuXHRsZXQgZm9sZGVyT3JkZXIgPSAxMDAwO1xuXHRmb3IgKGNvbnN0IGZvbGRlciBvZiBjb2xsZWN0aW9uLml0ZW0gPz8gW10pIHtcblx0XHRpZiAoZm9sZGVyLml0ZW0gPT0gbnVsbCkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGNvbnN0IGZvbGRlck5hbWUgPSBmb2xkZXIubmFtZSA/PyBcIlJlcXVlc3RzXCI7XG5cdFx0ZmlsZXMucHVzaCh7XG5cdFx0XHRmaWxlUGF0aDogYCR7Y29sbGVjdGlvbkRpcn0vJHtmb2xkZXJOYW1lfS8ucmVzb3VyY2VzL2RlZmluaXRpb24ueWFtbGAsXG5cdFx0XHRjb250ZW50OiBbXG5cdFx0XHRcdFwiJGtpbmQ6IGZvbGRlclwiLFxuXHRcdFx0XHRgbmFtZTogJHt5YW1sUXVvdGUoZm9sZGVyTmFtZSl9YCxcblx0XHRcdFx0YG9yZGVyOiAke2ZvbGRlck9yZGVyfWAsXG5cdFx0XHRcdFwiXCIsXG5cdFx0XHRdLmpvaW4oXCJcXG5cIiksXG5cdFx0fSk7XG5cdFx0Zm9sZGVyT3JkZXIgKz0gMTAwMDtcblxuXHRcdGxldCByZXF1ZXN0T3JkZXIgPSAxMDAwO1xuXHRcdGZvciAoY29uc3QgY2hpbGQgb2YgZm9sZGVyLml0ZW0pIHtcblx0XHRcdGNvbnN0IHlhbWwgPSByZXF1ZXN0VG9Mb2NhbFZpZXdZYW1sKGNoaWxkLCByZXF1ZXN0T3JkZXIpO1xuXHRcdFx0aWYgKHlhbWwgPT0gbnVsbCkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGZpbGVOYW1lID0gYCR7c2FuaXRpemVGaWxlTmFtZShjaGlsZC5uYW1lID8/IFwiUmVxdWVzdFwiKX0ucmVxdWVzdC55YW1sYDtcblx0XHRcdGZpbGVzLnB1c2goe1xuXHRcdFx0XHRmaWxlUGF0aDogYCR7Y29sbGVjdGlvbkRpcn0vJHtmb2xkZXJOYW1lfS8ke2ZpbGVOYW1lfWAsXG5cdFx0XHRcdGNvbnRlbnQ6IHlhbWwsXG5cdFx0XHR9KTtcblx0XHRcdHJlcXVlc3RPcmRlciArPSAxMDAwO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmaWxlcztcbn1cblxuZnVuY3Rpb24gcmVxdWVzdFRvTG9jYWxWaWV3WWFtbChpdGVtOiBQb3N0bWFuSXRlbSwgb3JkZXI6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuXHRjb25zdCByZXF1ZXN0ID0gaXRlbS5yZXF1ZXN0O1xuXHRpZiAocmVxdWVzdCA9PSBudWxsKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Y29uc3QgbWV0aG9kID0gKHJlcXVlc3QubWV0aG9kID8/IFwiR0VUXCIpLnRvVXBwZXJDYXNlKCk7XG5cdGNvbnN0IHVybCA9IHJlcXVlc3RVcmxGb3JMb2NhbFZpZXcocmVxdWVzdCk7XG5cdGNvbnN0IGxpbmVzID0gW1xuXHRcdFwiJGtpbmQ6IGh0dHAtcmVxdWVzdFwiLFxuXHRcdGBuYW1lOiAke3lhbWxRdW90ZShpdGVtLm5hbWUgPz8gbWV0aG9kKX1gLFxuXHRcdGBtZXRob2Q6ICR7bWV0aG9kfWAsXG5cdFx0YHVybDogJHt5YW1sUXVvdGUodXJsKX1gLFxuXHRdO1xuXG5cdGlmIChyZXF1ZXN0LmF1dGg/LnR5cGUgPT09IFwibm9hdXRoXCIpIHtcblx0XHRsaW5lcy5wdXNoKFwiYXV0aDpcIiwgXCIgIHR5cGU6IG5vYXV0aFwiKTtcblx0fVxuXG5cdGNvbnN0IGNvbnRlbnRUeXBlID0gcmVxdWVzdC5oZWFkZXI/LmZpbmQoXG5cdFx0KGgpID0+IGgua2V5LnRvTG93ZXJDYXNlKCkgPT09IFwiY29udGVudC10eXBlXCIsXG5cdCk/LnZhbHVlO1xuXHRjb25zdCByYXdCb2R5ID0gcmVxdWVzdC5ib2R5Py5yYXc/LnRyaW0oKTtcblx0aWYgKHJhd0JvZHkpIHtcblx0XHRsaW5lcy5wdXNoKFwiaGVhZGVyczpcIik7XG5cdFx0bGluZXMucHVzaChgICBDb250ZW50LVR5cGU6ICR7Y29udGVudFR5cGUgPz8gXCJhcHBsaWNhdGlvbi9qc29uXCJ9YCk7XG5cdFx0bGluZXMucHVzaChcImJvZHk6XCIpO1xuXHRcdGxpbmVzLnB1c2goXCIgIHR5cGU6IGpzb25cIik7XG5cdFx0bGluZXMucHVzaChcIiAgY29udGVudDogfC1cIik7XG5cdFx0Zm9yIChjb25zdCBib2R5TGluZSBvZiByYXdCb2R5LnNwbGl0KFwiXFxuXCIpKSB7XG5cdFx0XHRsaW5lcy5wdXNoKGAgICAgJHtib2R5TGluZX1gKTtcblx0XHR9XG5cdH1cblxuXHRsaW5lcy5wdXNoKGBvcmRlcjogJHtvcmRlcn1gLCBcIlwiKTtcblx0cmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIik7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RVcmxGb3JMb2NhbFZpZXcocmVxdWVzdDogUG9zdG1hblJlcXVlc3QpOiBzdHJpbmcge1xuXHRjb25zdCB1cmwgPSByZXF1ZXN0LnVybDtcblx0aWYgKHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gb3BlbkFwaVBhdGhQYXJhbXNUb0NvbG9uKHVybCk7XG5cdH1cblx0aWYgKHVybD8ucmF3KSB7XG5cdFx0cmV0dXJuIG9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbih1cmwucmF3KTtcblx0fVxuXHRjb25zdCBob3N0ID0gdXJsPy5ob3N0Py5bMF0gPz8gXCJ7e2Jhc2VVcmx9fVwiO1xuXHRjb25zdCBwYXRoID0gKHVybD8ucGF0aCA/PyBbXSlcblx0XHQubWFwKChzZWdtZW50KSA9PiBvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24oU3RyaW5nKHNlZ21lbnQpKSlcblx0XHQuam9pbihcIi9cIik7XG5cdHJldHVybiBwYXRoID8gYCR7aG9zdH0vJHtwYXRofWAgOiBob3N0O1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUZpbGVOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdHJldHVybiBuYW1lLnJlcGxhY2UoL1teXFx3XFxzKCktXSsvZywgXCJcIikudHJpbSgpIHx8IFwiUmVxdWVzdFwiO1xufVxuIl0sIm5hbWVzIjpbImJ1aWxkRW52aXJvbm1lbnRZYW1sIiwiYnVpbGRMb2NhbFZpZXdGaWxlc0Zyb21Db2xsZWN0aW9uIiwieWFtbFF1b3RlIiwidmFsdWUiLCJ0ZXN0IiwiaW5jbHVkZXMiLCJKU09OIiwic3RyaW5naWZ5IiwibmFtZSIsImF1dGgiLCJvcHRpb25zIiwidmFsdWVzIiwia2V5IiwiYXV0aDBEb21haW4iLCJwdXNoIiwiYXV0aDBBdWRpZW5jZSIsImF1dGgwQ2xpZW50SWQiLCJjYWxsYmFja3MiLCJzY29wZXMiLCJsaW5lcyIsInYiLCJqb2luIiwiY29sbGVjdGlvbiIsInByb2plY3ROYW1lIiwiY29sbGVjdGlvbkRpciIsImZpbGVzIiwiYXV0aEJsb2NrIiwicmFuZG9tVVVJRCIsImZpbGVQYXRoIiwiY29udGVudCIsImZpbHRlciIsImwiLCJ1bmRlZmluZWQiLCJyZXBsYWNlIiwiZm9sZGVyT3JkZXIiLCJmb2xkZXIiLCJpdGVtIiwiZm9sZGVyTmFtZSIsInJlcXVlc3RPcmRlciIsImNoaWxkIiwieWFtbCIsInJlcXVlc3RUb0xvY2FsVmlld1lhbWwiLCJmaWxlTmFtZSIsInNhbml0aXplRmlsZU5hbWUiLCJvcmRlciIsInJlcXVlc3QiLCJtZXRob2QiLCJ0b1VwcGVyQ2FzZSIsInVybCIsInJlcXVlc3RVcmxGb3JMb2NhbFZpZXciLCJ0eXBlIiwiY29udGVudFR5cGUiLCJoZWFkZXIiLCJmaW5kIiwiaCIsInRvTG93ZXJDYXNlIiwicmF3Qm9keSIsImJvZHkiLCJyYXciLCJ0cmltIiwiYm9keUxpbmUiLCJzcGxpdCIsIm9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbiIsImhvc3QiLCJwYXRoIiwibWFwIiwic2VnbWVudCIsIlN0cmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFpQmdCQTtlQUFBQTs7UUF1Q0FDO2VBQUFBOzs7NEJBeERXO2tDQU9wQjtBQUVQLFNBQVNDLFVBQVVDLEtBQWE7SUFDL0IsSUFBSSx3QkFBd0JDLElBQUksQ0FBQ0QsVUFBVUEsTUFBTUUsUUFBUSxDQUFDLFNBQVNGLFVBQVUsSUFBSTtRQUNoRixPQUFPRyxLQUFLQyxTQUFTLENBQUNKO0lBQ3ZCO0lBQ0EsT0FBT0E7QUFDUjtBQUdPLFNBQVNILHFCQUNmUSxJQUFZLEVBQ1pDLElBQTBCLEVBQzFCQyxPQUF5RDtJQUV6RCxNQUFNQyxTQUFnRDtRQUNyRDtZQUFFQyxLQUFLO1lBQVdULE9BQU87UUFBd0I7S0FDakQ7SUFDRCxJQUFJTSxNQUFNSSxhQUFhO1FBQ3RCRixPQUFPRyxJQUFJLENBQ1Y7WUFBRUYsS0FBSztZQUFlVCxPQUFPTSxLQUFLSSxXQUFXO1FBQUMsR0FDOUM7WUFBRUQsS0FBSztZQUFpQlQsT0FBT00sS0FBS00sYUFBYSxJQUFJO1FBQUcsR0FDeEQ7WUFBRUgsS0FBSztZQUFpQlQsT0FBT00sS0FBS08sYUFBYSxJQUFJO1FBQUcsR0FDeEQ7WUFDQ0osS0FBSztZQUNMVCxPQUFPLENBQUMsUUFBUSxFQUFFTSxLQUFLSSxXQUFXLENBQUMsb0JBQW9CLEVBQUVKLEtBQUtNLGFBQWEsSUFBSSxJQUFJO1FBQ3BGLEdBQ0E7WUFDQ0gsS0FBSztZQUNMVCxPQUFPLENBQUMsUUFBUSxFQUFFTSxLQUFLSSxXQUFXLENBQUMsWUFBWSxDQUFDO1FBQ2pELEdBQ0E7WUFBRUQsS0FBSztZQUFlVCxPQUFPTyxRQUFRTyxTQUFTLENBQUMsRUFBRTtRQUFDLEdBQ2xEO1lBQUVMLEtBQUs7WUFBU1QsT0FBT08sUUFBUVEsTUFBTTtRQUFDO0lBRXhDO0lBRUEsTUFBTUMsUUFBUTtRQUFDLENBQUMsTUFBTSxFQUFFakIs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
@@ -0,0 +1,202 @@
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 applyPostmanAuthOverlay () {
13
+ return applyPostmanAuthOverlay;
14
+ },
15
+ get openApiPathParamsToColon () {
16
+ return openApiPathParamsToColon;
17
+ },
18
+ get openApiToPostmanCollection () {
19
+ return openApiToPostmanCollection;
20
+ }
21
+ });
22
+ const _openapitopostmanv2 = /*#__PURE__*/ _interop_require_default(require("openapi-to-postmanv2"));
23
+ function _interop_require_default(obj) {
24
+ return obj && obj.__esModule ? obj : {
25
+ default: obj
26
+ };
27
+ }
28
+ function convertAsync(data, options) {
29
+ return new Promise((resolve, reject)=>{
30
+ _openapitopostmanv2.default.convert({
31
+ type: "json",
32
+ data
33
+ }, options, (err, result)=>{
34
+ if (err) {
35
+ reject(err);
36
+ return;
37
+ }
38
+ resolve(result);
39
+ });
40
+ });
41
+ }
42
+ async function openApiToPostmanCollection(document) {
43
+ const result = await convertAsync(document, {
44
+ folderStrategy: "Tags",
45
+ requestNameSource: "Fallback",
46
+ includeAuthInfoInExample: false
47
+ });
48
+ if (!result.result || result.output?.[0]?.data == null) {
49
+ throw new Error(result.reason ?? "openapi-to-postmanv2 conversion failed");
50
+ }
51
+ return result.output[0].data;
52
+ }
53
+ function applyPostmanAuthOverlay(collection, projectName, auth, options) {
54
+ const next = {
55
+ ...collection,
56
+ info: {
57
+ ...collection.info,
58
+ name: `${projectName} WebAPI`,
59
+ description: options.description,
60
+ schema: collection.info.schema ?? "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
61
+ }
62
+ };
63
+ if (auth?.auth0Domain) {
64
+ next.auth = {
65
+ type: "oauth2",
66
+ oauth2: [
67
+ {
68
+ key: "grant_type",
69
+ value: "authorization_code_with_pkce",
70
+ type: "string"
71
+ },
72
+ {
73
+ key: "authUrl",
74
+ value: "https://{{auth0Domain}}/authorize?audience={{auth0Audience}}",
75
+ type: "string"
76
+ },
77
+ {
78
+ key: "accessTokenUrl",
79
+ value: "https://{{auth0Domain}}/oauth/token",
80
+ type: "string"
81
+ },
82
+ {
83
+ key: "clientId",
84
+ value: "{{auth0ClientId}}",
85
+ type: "string"
86
+ },
87
+ {
88
+ key: "scope",
89
+ value: options.scopes,
90
+ type: "string"
91
+ },
92
+ {
93
+ key: "redirect_uri",
94
+ value: options.callbacks[0],
95
+ type: "string"
96
+ },
97
+ {
98
+ key: "useBrowser",
99
+ value: "true",
100
+ type: "boolean"
101
+ },
102
+ {
103
+ key: "addTokenTo",
104
+ value: "header",
105
+ type: "string"
106
+ },
107
+ {
108
+ key: "challengeAlgorithm",
109
+ value: "S256",
110
+ type: "string"
111
+ },
112
+ {
113
+ key: "client_authentication",
114
+ value: "body",
115
+ type: "string"
116
+ },
117
+ {
118
+ key: "clientSecret",
119
+ value: "",
120
+ type: "string"
121
+ },
122
+ {
123
+ key: "tokenName",
124
+ value: `${projectName} Access Token`,
125
+ type: "string"
126
+ }
127
+ ]
128
+ };
129
+ }
130
+ next.item = rewriteCollectionItems(collection.item ?? [], {
131
+ markListAnonymous: true
132
+ });
133
+ return next;
134
+ }
135
+ function rewriteCollectionItems(items, opts) {
136
+ return items.map((item)=>{
137
+ if (item.item != null) {
138
+ return {
139
+ ...item,
140
+ item: rewriteCollectionItems(item.item, opts)
141
+ };
142
+ }
143
+ const request = item.request;
144
+ if (request == null) {
145
+ return item;
146
+ }
147
+ const method = (request.method ?? "GET").toUpperCase();
148
+ const rawUrl = requestUrlRaw(request);
149
+ const nextRequest = {
150
+ ...request,
151
+ url: toPostmanUrl(rawUrl)
152
+ };
153
+ // List Hello stays anonymous (matches scaffold AllowAnonymous on GET /hello).
154
+ if (opts.markListAnonymous && method === "GET" && normalizePath(rawUrl) === "/hello" && !rawUrl.includes("/:")) {
155
+ nextRequest.auth = {
156
+ type: "noauth"
157
+ };
158
+ }
159
+ return {
160
+ ...item,
161
+ request: nextRequest
162
+ };
163
+ });
164
+ }
165
+ function requestUrlRaw(request) {
166
+ const url = request.url;
167
+ if (typeof url === "string") {
168
+ return url;
169
+ }
170
+ if (url?.raw) {
171
+ return url.raw;
172
+ }
173
+ const host = url?.host?.[0] ?? "{{baseUrl}}";
174
+ const path = (url?.path ?? []).join("/");
175
+ return path ? `${host}/${path}` : host;
176
+ }
177
+ function openApiPathParamsToColon(url) {
178
+ return url.replace(/(?<!\{)\{([A-Za-z_][\w]*)\}(?!\})/g, ":$1");
179
+ }
180
+ function normalizePath(rawUrl) {
181
+ const withoutBase = rawUrl.replace(/\{\{baseUrl\}\}/g, "").split("?")[0] ?? "";
182
+ const withSlash = withoutBase.startsWith("/") ? withoutBase : `/${withoutBase}`;
183
+ return openApiPathParamsToColon(withSlash);
184
+ }
185
+ /** Prefer Postman template URL shape used by existing Local View / API uploads. */ function toPostmanUrl(rawUrl) {
186
+ let pathPart = rawUrl.replace(/\{\{baseUrl\}\}/g, "");
187
+ if (!pathPart.startsWith("/")) {
188
+ pathPart = `/${pathPart}`;
189
+ }
190
+ // openapi-to-postman uses {id}; Local View / prior collections use :id
191
+ pathPart = openApiPathParamsToColon(pathPart);
192
+ const segments = pathPart.split("/").filter(Boolean);
193
+ return {
194
+ raw: `{{baseUrl}}${pathPart}`,
195
+ host: [
196
+ "{{baseUrl}}"
197
+ ],
198
+ path: segments
199
+ };
200
+ }
201
+
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvcG9zdG1hbi9vcGVuYXBpLXRvLXBvc3RtYW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbnZlcnRlciBmcm9tIFwib3BlbmFwaS10by1wb3N0bWFudjJcIjtcbmltcG9ydCB0eXBlIHsgU2NhZmZvbGRPcGVuQXBpRG9jdW1lbnQgfSBmcm9tIFwiLi9oZWxsby1vcGVuYXBpLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFBvc3RtYW5Db2xsZWN0aW9uID0ge1xuXHRpbmZvOiB7XG5cdFx0X3Bvc3RtYW5faWQ/OiBzdHJpbmc7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdHNjaGVtYTogc3RyaW5nO1xuXHRcdGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXHR9O1xuXHRhdXRoPzogdW5rbm93bjtcblx0aXRlbT86IFBvc3RtYW5JdGVtW107XG5cdHZhcmlhYmxlPzogQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9Pjtcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIFBvc3RtYW5JdGVtID0ge1xuXHRuYW1lPzogc3RyaW5nO1xuXHRpdGVtPzogUG9zdG1hbkl0ZW1bXTtcblx0cmVxdWVzdD86IFBvc3RtYW5SZXF1ZXN0O1xuXHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgUG9zdG1hblJlcXVlc3QgPSB7XG5cdG1ldGhvZD86IHN0cmluZztcblx0aGVhZGVyPzogQXJyYXk8eyBrZXk6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9Pjtcblx0Ym9keT86IHsgbW9kZT86IHN0cmluZzsgcmF3Pzogc3RyaW5nIH07XG5cdHVybD86IHN0cmluZyB8IHsgcmF3Pzogc3RyaW5nOyBob3N0Pzogc3RyaW5nW107IHBhdGg/OiBzdHJpbmdbXTsgdmFyaWFibGU/OiB1bmtub3duW10gfTtcblx0YXV0aD86IHsgdHlwZTogc3RyaW5nOyBba2V5OiBzdHJpbmddOiB1bmtub3duIH07XG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBBdXRoMEVudiA9IHtcblx0YXV0aDBEb21haW4/OiBzdHJpbmc7XG5cdGF1dGgwQXVkaWVuY2U/OiBzdHJpbmc7XG5cdGF1dGgwQ2xpZW50SWQ/OiBzdHJpbmc7XG59O1xuXG50eXBlIENvbnZlcnRSZXN1bHQgPSB7XG5cdHJlc3VsdDogYm9vbGVhbjtcblx0cmVhc29uPzogc3RyaW5nO1xuXHRvdXRwdXQ/OiBBcnJheTx7IHR5cGU6IHN0cmluZzsgZGF0YTogUG9zdG1hbkNvbGxlY3Rpb24gfT47XG59O1xuXG5mdW5jdGlvbiBjb252ZXJ0QXN5bmMoXG5cdGRhdGE6IFNjYWZmb2xkT3BlbkFwaURvY3VtZW50LFxuXHRvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFByb21pc2U8Q29udmVydFJlc3VsdD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdGNvbnZlcnRlci5jb252ZXJ0KFxuXHRcdFx0eyB0eXBlOiBcImpzb25cIiwgZGF0YSB9LFxuXHRcdFx0b3B0aW9ucyxcblx0XHRcdChlcnI6IEVycm9yIHwgbnVsbCwgcmVzdWx0OiBDb252ZXJ0UmVzdWx0KSA9PiB7XG5cdFx0XHRcdGlmIChlcnIpIHtcblx0XHRcdFx0XHRyZWplY3QoZXJyKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzb2x2ZShyZXN1bHQpO1xuXHRcdFx0fSxcblx0XHQpO1xuXHR9KTtcbn1cblxuLyoqIENvbnZlcnQgYW4gT3BlbkFQSSBkb2N1bWVudCB0byBhIFBvc3RtYW4gQ29sbGVjdGlvbiB2Mi4xIHZpYSBvcGVuYXBpLXRvLXBvc3RtYW52Mi4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuQXBpVG9Qb3N0bWFuQ29sbGVjdGlvbihcblx0ZG9jdW1lbnQ6IFNjYWZmb2xkT3BlbkFwaURvY3VtZW50LFxuKTogUHJvbWlzZTxQb3N0bWFuQ29sbGVjdGlvbj4ge1xuXHRjb25zdCByZXN1bHQgPSBhd2FpdCBjb252ZXJ0QXN5bmMoZG9jdW1lbnQsIHtcblx0XHRmb2xkZXJTdHJhdGVneTogXCJUYWdzXCIsXG5cdFx0cmVxdWVzdE5hbWVTb3VyY2U6IFwiRmFsbGJhY2tcIixcblx0XHRpbmNsdWRlQXV0aEluZm9JbkV4YW1wbGU6IGZhbHNlLFxuXHR9KTtcblx0aWYgKCFyZXN1bHQucmVzdWx0IHx8IHJlc3VsdC5vdXRwdXQ/LlswXT8uZGF0YSA9PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKHJlc3VsdC5yZWFzb24gPz8gXCJvcGVuYXBpLXRvLXBvc3RtYW52MiBjb252ZXJzaW9uIGZhaWxlZFwiKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0Lm91dHB1dFswXS5kYXRhO1xufVxuXG4vKipcbiAqIE92ZXJsYXkgQXV0aDAgT0F1dGgyIChQS0NFKSBjb2xsZWN0aW9uIGF1dGggYW5kIGZpeCBMb2NhbCBWaWV3LWZyaWVuZGx5IFVSTHMuXG4gKiBSb3V0ZSBpdGVtcyBjb21lIGZyb20gT3BlbkFQSTsgYXV0aC9lbnYgcmVtYWluIGhhbmQtYXV0aG9yZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVBvc3RtYW5BdXRoT3ZlcmxheShcblx0Y29sbGVjdGlvbjogUG9zdG1hbkNvbGxlY3Rpb24sXG5cdHByb2plY3ROYW1lOiBzdHJpbmcsXG5cdGF1dGg6IEF1dGgwRW52IHwgdW5kZWZpbmVkLFxuXHRvcHRpb25zOiB7XG5cdFx0Y2FsbGJhY2tzOiByZWFkb25seSBzdHJpbmdbXTtcblx0XHRzY29wZXM6IHN0cmluZztcblx0XHRkZXNjcmlwdGlvbjogc3RyaW5nO1xuXHR9LFxuKTogUG9zdG1hbkNvbGxlY3Rpb24ge1xuXHRjb25zdCBuZXh0OiBQb3N0bWFuQ29sbGVjdGlvbiA9IHtcblx0XHQuLi5jb2xsZWN0aW9uLFxuXHRcdGluZm86IHtcblx0XHRcdC4uLmNvbGxlY3Rpb24uaW5mbyxcblx0XHRcdG5hbWU6IGAke3Byb2plY3ROYW1lfSBXZWJBUElgLFxuXHRcdFx0ZGVzY3JpcHRpb246IG9wdGlvbnMuZGVzY3JpcHRpb24sXG5cdFx0XHRzY2hlbWE6XG5cdFx0XHRcdGNvbGxlY3Rpb24uaW5mby5zY2hlbWEgPz9cblx0XHRcdFx0XCJodHRwczovL3NjaGVtYS5nZXRwb3N0bWFuLmNvbS9qc29uL2NvbGxlY3Rpb24vdjIuMS4wL2NvbGxlY3Rpb24uanNvblwiLFxuXHRcdH0sXG5cdH07XG5cblx0aWYgKGF1dGg/LmF1dGgwRG9tYWluKSB7XG5cdFx0bmV4dC5hdXRoID0ge1xuXHRcdFx0dHlwZTogXCJvYXV0aDJcIixcblx0XHRcdG9hdXRoMjogW1xuXHRcdFx0XHR7IGtleTogXCJncmFudF90eXBlXCIsIHZhbHVlOiBcImF1dGhvcml6YXRpb25fY29kZV93aXRoX3BrY2VcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5OiBcImF1dGhVcmxcIixcblx0XHRcdFx0XHR2YWx1ZTogXCJodHRwczovL3t7YXV0aDBEb21haW59fS9hdXRob3JpemU/YXVkaWVuY2U9e3thdXRoMEF1ZGllbmNlfX1cIixcblx0XHRcdFx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0a2V5OiBcImFjY2Vzc1Rva2VuVXJsXCIsXG5cdFx0XHRcdFx0dmFsdWU6IFwiaHR0cHM6Ly97e2F1dGgwRG9tYWlufX0vb2F1dGgvdG9rZW5cIixcblx0XHRcdFx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7IGtleTogXCJjbGllbnRJZFwiLCB2YWx1ZTogXCJ7e2F1dGgwQ2xpZW50SWR9fVwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdHsga2V5OiBcInNjb3BlXCIsIHZhbHVlOiBvcHRpb25zLnNjb3BlcywgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHR7IGtleTogXCJyZWRpcmVjdF91cmlcIiwgdmFsdWU6IG9wdGlvbnMuY2FsbGJhY2tzWzBdLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdHsga2V5OiBcInVzZUJyb3dzZXJcIiwgdmFsdWU6IFwidHJ1ZVwiLCB0eXBlOiBcImJvb2xlYW5cIiB9LFxuXHRcdFx0XHR7IGtleTogXCJhZGRUb2tlblRvXCIsIHZhbHVlOiBcImhlYWRlclwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdHsga2V5OiBcImNoYWxsZW5nZUFsZ29yaXRobVwiLCB2YWx1ZTogXCJTMjU2XCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0eyBrZXk6IFwiY2xpZW50X2F1dGhlbnRpY2F0aW9uXCIsIHZhbHVlOiBcImJvZHlcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHR7IGtleTogXCJjbGllbnRTZWNyZXRcIiwgdmFsdWU6IFwiXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0eyBrZXk6IFwidG9rZW5OYW1lXCIsIHZhbHVlOiBgJHtwcm9qZWN0TmFtZX0gQWNjZXNzIFRva2VuYCwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XSxcblx0XHR9O1xuXHR9XG5cblx0bmV4dC5pdGVtID0gcmV3cml0ZUNvbGxlY3Rpb25JdGVtcyhjb2xsZWN0aW9uLml0ZW0gPz8gW10sIHtcblx0XHRtYXJrTGlzdEFub255bW91czogdHJ1ZSxcblx0fSk7XG5cdHJldHVybiBuZXh0O1xufVxuXG5mdW5jdGlvbiByZXdyaXRlQ29sbGVjdGlvbkl0ZW1zKFxuXHRpdGVtczogUG9zdG1hbkl0ZW1bXSxcblx0b3B0czogeyBtYXJrTGlzdEFub255bW91czogYm9vbGVhbiB9LFxuKTogUG9zdG1hbkl0ZW1bXSB7XG5cdHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+IHtcblx0XHRpZiAoaXRlbS5pdGVtICE9IG51bGwpIHtcblx0XHRcdHJldHVybiB7IC4uLml0ZW0sIGl0ZW06IHJld3JpdGVDb2xsZWN0aW9uSXRlbXMoaXRlbS5pdGVtLCBvcHRzKSB9O1xuXHRcdH1cblx0XHRjb25zdCByZXF1ZXN0ID0gaXRlbS5yZXF1ZXN0O1xuXHRcdGlmIChyZXF1ZXN0ID09IG51bGwpIHtcblx0XHRcdHJldHVybiBpdGVtO1xuXHRcdH1cblx0XHRjb25zdCBtZXRob2QgPSAocmVxdWVzdC5tZXRob2QgPz8gXCJHRVRcIikudG9VcHBlckNhc2UoKTtcblx0XHRjb25zdCByYXdVcmwgPSByZXF1ZXN0VXJsUmF3KHJlcXVlc3QpO1xuXHRcdGNvbnN0IG5leHRSZXF1ZXN0OiBQb3N0bWFuUmVxdWVzdCA9IHtcblx0XHRcdC4uLnJlcXVlc3QsXG5cdFx0XHR1cmw6IHRvUG9zdG1hblVybChyYXdVcmwpLFxuXHRcdH07XG5cdFx0Ly8gTGlzdCBIZWxsbyBzdGF5cyBhbm9ueW1vdXMgKG1hdGNoZXMgc2NhZmZvbGQgQWxsb3dBbm9ueW1vdXMgb24gR0VUIC9oZWxsbykuXG5cdFx0aWYgKFxuXHRcdFx0b3B0cy5tYXJrTGlzdEFub255bW91cyAmJlxuXHRcdFx0bWV0aG9kID09PSBcIkdFVFwiICYmXG5cdFx0XHRub3JtYWxpemVQYXRoKHJhd1VybCkgPT09IFwiL2hlbGxvXCIgJiZcblx0XHRcdCFyYXdVcmwuaW5jbHVkZXMoXCIvOlwiKVxuXHRcdCkge1xuXHRcdFx0bmV4dFJlcXVlc3QuYXV0aCA9IHsgdHlwZTogXCJub2F1dGhcIiB9O1xuXHRcdH1cblx0XHRyZXR1cm4geyAuLi5pdGVtLCByZXF1ZXN0OiBuZXh0UmVxdWVzdCB9O1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdFVybFJhdyhyZXF1ZXN0OiBQb3N0bWFuUmVxdWVzdCk6IHN0cmluZyB7XG5cdGNvbnN0IHVybCA9IHJlcXVlc3QudXJsO1xuXHRpZiAodHlwZW9mIHVybCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHJldHVybiB1cmw7XG5cdH1cblx0aWYgKHVybD8ucmF3KSB7XG5cdFx0cmV0dXJuIHVybC5yYXc7XG5cdH1cblx0Y29uc3QgaG9zdCA9IHVybD8uaG9zdD8uWzBdID8/IFwie3tiYXNlVXJsfX1cIjtcblx0Y29uc3QgcGF0aCA9ICh1cmw/LnBhdGggPz8gW10pLmpvaW4oXCIvXCIpO1xuXHRyZXR1cm4gcGF0aCA/IGAke2hvc3R9LyR7cGF0aH1gIDogaG9zdDtcbn1cblxuLyoqIE9wZW5BUEkgYHtpZH1gIOKGkiBQb3N0bWFuIGA6aWRgLCB3aXRob3V0IHRvdWNoaW5nIGB7e3ZhcmlhYmxlc319YC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24odXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gdXJsLnJlcGxhY2UoLyg/PCFcXHspXFx7KFtBLVphLXpfXVtcXHddKilcXH0oPyFcXH0pL2csIFwiOiQxXCIpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHJhd1VybDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3Qgd2l0aG91dEJhc2UgPSByYXdVcmwucmVwbGFjZSgvXFx7XFx7YmFzZVVybFxcfVxcfS9nLCBcIlwiKS5zcGxpdChcIj9cIilbMF0gPz8gXCJcIjtcblx0Y29uc3Qgd2l0aFNsYXNoID0gd2l0aG91dEJhc2Uuc3RhcnRzV2l0aChcIi9cIikgPyB3aXRob3V0QmFzZSA6IGAvJHt3aXRob3V0QmFzZX1gO1xuXHRyZXR1cm4gb3BlbkFwaVBhdGhQYXJhbXNUb0NvbG9uKHdpdGhTbGFzaCk7XG59XG5cbi8qKiBQcmVmZXIgUG9zdG1hbiB0ZW1wbGF0ZSBVUkwgc2hhcGUgdXNlZCBieSBleGlzdGluZyBMb2NhbCBWaWV3IC8gQVBJIHVwbG9hZHMuICovXG5mdW5jdGlvbiB0b1Bvc3RtYW5VcmwocmF3VXJsOiBzdHJpbmcpOiBQb3N0bWFuUmVxdWVzdFtcInVybFwiXSB7XG5cdGxldCBwYXRoUGFydCA9IHJhd1VybC5yZXBsYWNlKC9cXHtcXHtiYXNlVXJsXFx9XFx9L2csIFwiXCIpO1xuXHRpZiAoIXBhdGhQYXJ0LnN0YXJ0c1dpdGgoXCIvXCIpKSB7XG5cdFx0cGF0aFBhcnQgPSBgLyR7cGF0aFBhcnR9YDtcblx0fVxuXHQvLyBvcGVuYXBpLXRvLXBvc3RtYW4gdXNlcyB7aWR9OyBMb2NhbCBWaWV3IC8gcHJpb3IgY29sbGVjdGlvbnMgdXNlIDppZFxuXHRwYXRoUGFydCA9IG9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbihwYXRoUGFydCk7XG5cdGNvbnN0IHNlZ21lbnRzID0gcGF0aFBhcnQuc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcblx0cmV0dXJuIHtcblx0XHRyYXc6IGB7e2Jhc2VVcmx9fSR7cGF0aFBhcnR9YCxcblx0XHRob3N0OiBbXCJ7e2Jhc2VVcmx9fVwiXSxcblx0XHRwYXRoOiBzZWdtZW50cyxcblx0fTtcbn1cbiJdLCJuYW1lcyI6WyJhcHBseVBvc3RtYW5BdXRoT3ZlcmxheSIsIm9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbiIsIm9wZW5BcGlUb1Bvc3RtYW5Db2xsZWN0aW9uIiwiY29udmVydEFzeW5jIiwiZGF0YSIsIm9wdGlvbnMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImNvbnZlcnRlciIsImNvbnZlcnQiLCJ0eXBlIiwiZXJyIiwicmVzdWx0IiwiZG9jdW1lbnQiLCJmb2xkZXJTdHJhdGVneSIsInJlcXVlc3ROYW1lU291cmNlIiwiaW5jbHVkZUF1dGhJbmZvSW5FeGFtcGxlIiwib3V0cHV0IiwiRXJyb3IiLCJyZWFzb24iLCJjb2xsZWN0aW9uIiwicHJvamVjdE5hbWUiLCJhdXRoIiwibmV4dCIsImluZm8iLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJzY2hlbWEiLCJhdXRoMERvbWFpbiIsIm9hdXRoMiIsImtleSIsInZhbHVlIiwic2NvcGVzIiwiY2FsbGJhY2tzIiwiaXRlbSIsInJld3JpdGVDb2xsZWN0aW9uSXRlbXMiLCJtYXJrTGlzdEFub255bW91cyIsIml0ZW1zIiwib3B0cyIsIm1hcCIsInJlcXVlc3QiLCJtZXRob2QiLCJ0b1VwcGVyQ2FzZSIsInJhd1VybCIsInJlcXVlc3RVcmxSYXciLCJuZXh0UmVxdWVzdCIsInVybCIsInRvUG9zdG1hblVybCIsIm5vcm1hbGl6ZVBhdGgiLCJpbmNsdWRlcyIsInJhdyIsImhvc3QiLCJwYXRoIiwiam9pbiIsInJlcGxhY2UiLCJ3aXRob3V0QmFzZSIsInNwbGl0Iiwid2l0aFNsYXNoIiwic3RhcnRzV2l0aCIsInBhdGhQYXJ0Iiwic2VnbWVudHMiLCJmaWx0ZXIiLCJCb29sZWFuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztRQWtGZ0JBO2VBQUFBOztRQXFHQUM7ZUFBQUE7O1FBdkhNQztlQUFBQTs7OzJFQWhFQTs7Ozs7O0FBNEN0QixTQUFTQyxhQUNSQyxJQUE2QixFQUM3QkMsT0FBZ0M7SUFFaEMsT0FBTyxJQUFJQyxRQUFRLENBQUNDLFNBQVNDO1FBQzVCQywyQkFBUyxDQUFDQyxPQUFPLENBQ2hCO1lBQUVDLE1BQU07WUFBUVA7UUFBSyxHQUNyQkMsU0FDQSxDQUFDTyxLQUFtQkM7WUFDbkIsSUFBSUQsS0FBSztnQkFDUkosT0FBT0k7Z0JBQ1A7WUFDRDtZQUNBTCxRQUFRTTtRQUNUO0lBRUY7QUFDRDtBQUdPLGVBQWVYLDJCQUNyQlksUUFBaUM7SUFFakMsTUFBTUQsU0FBUyxNQUFNVixhQUFhVyxVQUFVO1FBQzNDQyxnQkFBZ0I7UUFDaEJDLG1CQUFtQjtRQUNuQkMsMEJBQTBCO0lBQzNCO0lBQ0EsSUFBSSxDQUFDSixPQUFPQSxNQUFNLElBQUlBLE9BQU9LLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRWQsUUFBUSxNQUFNO1FBQ3ZELE1BQU0sSUFBSWUsTUFBTU4sT0FBT08sTUFBTSxJQUFJO0lBQ2xDO0lBQ0EsT0FBT1AsT0FBT0ssTUFBTSxDQUFDLEVBQUUsQ0FBQ2QsSUFBSTtBQUM3QjtBQU1PLFNBQVNKLHdCQUNmcUIsVUFBNkIsRUFDN0JDLFdBQW1CLEVBQ25CQyxJQUEwQixFQUMxQmxCLE9BSUM7SUFFRCxNQUFNbUIsT0FBMEI7UUFDL0IsR0FBR0gsVUFBVTtRQUNiSSxNQUFNO1lBQ0wsR0FBR0osV0FBV0ksSUFBSTtZQUNs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
@@ -0,0 +1,110 @@
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 renderWorkspaceReadme () {
13
+ return renderWorkspaceReadme;
14
+ },
15
+ get resolveWorkspaceReadmeInput () {
16
+ return resolveWorkspaceReadmeInput;
17
+ },
18
+ get writeWorkspaceReadme () {
19
+ return writeWorkspaceReadme;
20
+ }
21
+ });
22
+ const _nodefs = require("node:fs");
23
+ const _nodepath = require("node:path");
24
+ const _const = require("../models/const.js");
25
+ const _apiname = require("./api-name.js");
26
+ function renderWorkspaceReadme(input) {
27
+ const { projectName, apiNames, hasPostgres, hasAuth0, hasPostman } = input;
28
+ const apis = apiNames.length > 0 ? apiNames : [
29
+ "api"
30
+ ];
31
+ const lines = [
32
+ `# ${projectName}`,
33
+ "",
34
+ "Decohere web API workspace. Scaffolded with [`@decohere/create`](https://www.npmjs.com/package/@decohere/create).",
35
+ "",
36
+ "## Get started",
37
+ "",
38
+ "1. Open this folder in VS Code / Cursor.",
39
+ "2. **Reopen in Container** (or rebuild the Dev Container).",
40
+ " Host `initialize.sh` and container `post-start.sh` ask y/N (TTY only) before npm auth or codebase RAG MCP.",
41
+ " Skip or decline; missing TTY skips. RAG credentials land in `.cursor/` (gitignored).",
42
+ "3. Install dependencies if needed:",
43
+ "",
44
+ "```bash",
45
+ "pnpm install",
46
+ "```",
47
+ "",
48
+ "## Develop",
49
+ "",
50
+ "```bash",
51
+ "pnpm dev # Flux HMR (first API)",
52
+ "pnpm start # run the compiled first API",
53
+ "pnpm run build # forge release build"
54
+ ];
55
+ for (const name of apis){
56
+ lines.push(`pnpm run dev:${name} # HMR for ${name}`);
57
+ lines.push(`pnpm run start:${name} # production entry for ${name}`);
58
+ }
59
+ lines.push("```", "");
60
+ lines.push("## Logging", "", "In development, Scribe uses pino-pretty and rolling files under `logs/` (gitignored).", "When `NODE_ENV=production`, the process writes structured JSON to stdout and does not rotate files.", "Ship and retain those streams outside the app (platform logs, a sidecar, or a log agent) so shipping can change without rebuilding.", "", "Override roll path and rotation without changing app code:", "`SCRIBE_LOG_FILE`, `SCRIBE_LOG_SIZE`, `SCRIBE_LOG_FREQUENCY`, `SCRIBE_LOG_KEEP`.", "", 'Opt into in-process pretty or roll in production only with `{ when: "always" }` on `scribe.withPinoPretty` / `scribe.withPinoRoll`.', "");
61
+ if (hasPostgres) {
62
+ lines.push("## Database", "", "Postgres runs via Dev Container Compose:", "", "```bash", "pnpm db:up", "pnpm db:down", "pnpm db:reset", "```", "");
63
+ }
64
+ 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> .`", "");
65
+ lines.push("## Add another API", "", "```bash", "decohere add api <name>", "```", "", "Example: `decohere add api billing`", "");
66
+ if (hasAuth0) {
67
+ 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.", "");
68
+ }
69
+ if (hasPostman) {
70
+ 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.", "");
71
+ }
72
+ lines.push("## More", "", "- Package docs: https://www.npmjs.com/package/@decohere/create", "- After `decohere add api`, this README is refreshed so scripts and APIs stay accurate.", "");
73
+ return `${lines.join("\n")}`;
74
+ }
75
+ function resolveWorkspaceReadmeInput(workspace, options) {
76
+ const newNames = workspace.getProjects().map((project)=>(0, _apiname.apiNameFromProjectDir)(project.dir));
77
+ const apiNames = options.add ? mergeApiNames((0, _apiname.listExistingApiNames)(workspace.targetDir), newNames) : newNames;
78
+ const pkg = workspace.getModel(_const.WELL_KNOWN_FILES.PACKAGE_JSON);
79
+ const env = workspace.getModel(_const.WELL_KNOWN_FILES.ENV_FILE);
80
+ const hasPostgres = options.databaseProvider === "postgres/typeorm" || Boolean(pkg?.hasScript("db:up"));
81
+ const hasAuth0 = options.authProvider === "auth0" || Boolean(env?.hasEntry("AUTH0_ISSUER_BASE_URL"));
82
+ const hasPostman = options.postmanProvider === "local" || options.postmanProvider === "api" || (0, _nodefs.existsSync)((0, _nodepath.join)(workspace.targetDir, "postman")) || (0, _nodefs.existsSync)((0, _nodepath.join)(workspace.targetDir, ".postman"));
83
+ return {
84
+ projectName: workspace.name,
85
+ apiNames,
86
+ hasPostgres,
87
+ hasAuth0,
88
+ hasPostman
89
+ };
90
+ }
91
+ function writeWorkspaceReadme(workspace, options) {
92
+ const content = renderWorkspaceReadme(resolveWorkspaceReadmeInput(workspace, options));
93
+ workspace.addFile({
94
+ files: ()=>[
95
+ {
96
+ filePath: "README.md",
97
+ content
98
+ }
99
+ ]
100
+ });
101
+ }
102
+ function mergeApiNames(existing, added) {
103
+ const seen = new Set(existing);
104
+ return [
105
+ ...existing,
106
+ ...added.filter((name)=>!seen.has(name))
107
+ ];
108
+ }
109
+
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkvd29ya3NwYWNlLXJlYWRtZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbnZGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9lbnYtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQYWNrYWdlSnNvbiB9IGZyb20gXCIuLi9tb2RlbHMvcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVNjYWZmb2xkIH0gZnJvbSBcIi4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBhcGlOYW1lRnJvbVByb2plY3REaXIsIGxpc3RFeGlzdGluZ0FwaU5hbWVzIH0gZnJvbSBcIi4vYXBpLW5hbWUuanNcIjtcblxuZXhwb3J0IHR5cGUgV29ya3NwYWNlUmVhZG1lT3B0aW9ucyA9IHtcblx0YWRkPzogYm9vbGVhbjtcblx0ZGF0YWJhc2VQcm92aWRlcj86IFwibm9uZVwiIHwgXCJwb3N0Z3Jlcy90eXBlb3JtXCI7XG5cdGF1dGhQcm92aWRlcj86IFwiYXV0aDBcIiB8IFwibm9uZVwiO1xuXHRwb3N0bWFuUHJvdmlkZXI/OiBcImFwaVwiIHwgXCJsb2NhbFwiIHwgXCJub25lXCI7XG59O1xuXG5leHBvcnQgdHlwZSBXb3Jrc3BhY2VSZWFkbWVJbnB1dCA9IHtcblx0cHJvamVjdE5hbWU6IHN0cmluZztcblx0YXBpTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXHRoYXNQb3N0Z3JlczogYm9vbGVhbjtcblx0aGFzQXV0aDA6IGJvb2xlYW47XG5cdGhhc1Bvc3RtYW46IGJvb2xlYW47XG59O1xuXG4vKiogUHVyZSByZW5kZXJlciDigJQga2VlcCBmZWF0dXJlIHNlY3Rpb25zIHNob3J0IGFuZCBjb3B5LXBhc3RlIHJlYWR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcldvcmtzcGFjZVJlYWRtZShpbnB1dDogV29ya3NwYWNlUmVhZG1lSW5wdXQpOiBzdHJpbmcge1xuXHRjb25zdCB7IHByb2plY3ROYW1lLCBhcGlOYW1lcywgaGFzUG9zdGdyZXMsIGhhc0F1dGgwLCBoYXNQb3N0bWFuIH0gPSBpbnB1dDtcblx0Y29uc3QgYXBpcyA9IGFwaU5hbWVzLmxlbmd0aCA+IDAgPyBhcGlOYW1lcyA6IFtcImFwaVwiXTtcblx0Y29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuXHRcdGAjICR7cHJvamVjdE5hbWV9YCxcblx0XHRcIlwiLFxuXHRcdFwiRGVjb2hlcmUgd2ViIEFQSSB3b3Jrc3BhY2UuIFNjYWZmb2xkZWQgd2l0aCBbYEBkZWNvaGVyZS9jcmVhdGVgXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AZGVjb2hlcmUvY3JlYXRlKS5cIixcblx0XHRcIlwiLFxuXHRcdFwiIyMgR2V0IHN0YXJ0ZWRcIixcblx0XHRcIlwiLFxuXHRcdFwiMS4gT3BlbiB0aGlzIGZvbGRlciBpbiBWUyBDb2RlIC8gQ3Vyc29yLlwiLFxuXHRcdFwiMi4gKipSZW9wZW4gaW4gQ29udGFpbmVyKiogKG9yIHJlYnVpbGQgdGhlIERldiBDb250YWluZXIpLlwiLFxuXHRcdFwiICAgSG9zdCBgaW5pdGlhbGl6ZS5zaGAgYW5kIGNvbnRhaW5lciBgcG9zdC1zdGFydC5zaGAgYXNrIHkvTiAoVFRZIG9ubHkpIGJlZm9yZSBucG0gYXV0aCBvciBjb2RlYmFzZSBSQUcgTUNQLlwiLFxuXHRcdFwiICAgU2tpcCBvciBkZWNsaW5lOyBtaXNzaW5nIFRUWSBza2lwcy4gUkFHIGNyZWRlbnRpYWxzIGxhbmQgaW4gYC5jdXJzb3IvYCAoZ2l0aWdub3JlZCkuXCIsXG5cdFx0XCIzLiBJbnN0YWxsIGRlcGVuZGVuY2llcyBpZiBuZWVkZWQ6XCIsXG5cdFx0XCJcIixcblx0XHRcImBgYGJhc2hcIixcblx0XHRcInBucG0gaW5zdGFsbFwiLFxuXHRcdFwiYGBgXCIsXG5cdFx0XCJcIixcblx0XHRcIiMjIERldmVsb3BcIixcblx0XHRcIlwiLFxuXHRcdFwiYGBgYmFzaFwiLFxuXHRcdFwicG5wbSBkZXYgICAgICAgICAgICAgICMgRmx1eCBITVIgKGZpcnN0IEFQSSlcIixcblx0XHRcInBucG0gc3RhcnQgICAgICAgICAgICAjIHJ1biB0aGUgY29tcGlsZWQgZmlyc3QgQVBJXCIsXG5cdFx0XCJwbnBtIHJ1biBidWlsZCAgICAgICAgIyBmb3JnZSByZWxlYXNlIGJ1aWxkXCIsXG5cdF07XG5cblx0Zm9yIChjb25zdCBuYW1lIG9mIGFwaXMpIHtcblx0XHRsaW5lcy5wdXNoKGBwbnBtIHJ1biBkZXY6JHtuYW1lfSAgICAgIyBITVIgZm9yICR7bmFtZX1gKTtcblx0XHRsaW5lcy5wdXNoKGBwbnBtIHJ1biBzdGFydDoke25hbWV9ICAgIyBwcm9kdWN0aW9uIGVudHJ5IGZvciAke25hbWV9YCk7XG5cdH1cblxuXHRsaW5lcy5wdXNoKFwiYGBgXCIsIFwiXCIpO1xuXG5cdGxpbmVzLnB1c2goXG5cdFx0XCIjIyBMb2dnaW5nXCIsXG5cdFx0XCJcIixcblx0XHRcIkluIGRldmVsb3BtZW50LCBTY3JpYmUgdXNlcyBwaW5vLXByZXR0eSBhbmQgcm9sbGluZyBmaWxlcyB1bmRlciBgbG9ncy9gIChnaXRpZ25vcmVkKS5cIixcblx0XHRcIldoZW4gYE5PREVfRU5WPXByb2R1Y3Rpb25gLCB0aGUgcHJvY2VzcyB3cml0ZXMgc3RydWN0dXJlZCBKU09OIHRvIHN0ZG91dCBhbmQgZG9lcyBub3Qgcm90YXRlIGZpbGVzLlwiLFxuXHRcdFwiU2hpcCBhbmQgcmV0YWluIHRob3NlIHN0cmVhbXMgb3V0c2lkZSB0aGUgYXBwIChwbGF0Zm9ybSBsb2dzLCBhIHNpZGVjYXIsIG9yIGEgbG9nIGFnZW50KSBzbyBzaGlwcGluZyBjYW4gY2hhbmdlIHdpdGhvdXQgcmVidWlsZGluZy5cIixcblx0XHRcIlwiLFxuXHRcdFwiT3ZlcnJpZGUgcm9sbCBwYXRoIGFuZCByb3RhdGlvbiB3aXRob3V0IGNoYW5naW5nIGFwcCBjb2RlOlwiLFxuXHRcdFwiYFNDUklCRV9MT0dfRklMRWAsIGBTQ1JJQkVfTE9HX1NJWkVgLCBgU0NSSUJFX0xPR19GUkVRVUVOQ1lgLCBgU0NSSUJFX0xPR19LRUVQYC5cIixcblx0XHRcIlwiLFxuXHRcdCdPcHQgaW50byBpbi1wcm9jZXNzIHByZXR0eSBvciByb2xsIGluIHByb2R1Y3Rpb24gb25seSB3aXRoIGB7IHdoZW46IFwiYWx3YXlzXCIgfWAgb24gYHNjcmliZS53aXRoUGlub1ByZXR0eWAgLyBgc2NyaWJlLndpdGhQaW5vUm9sbGAuJyxcblx0XHRcIlwiLFxuXHQpO1xuXG5cdGlmIChoYXNQb3N0Z3Jlcykge1xuXHRcdGxpbmVzLnB1c2goXG5cdFx0XHRcIiMjIERhdGFiYXNlXCIsXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJQb3N0Z3JlcyBydW5zIHZpYSBEZXYgQ29udGFpbmVyIENvbXBvc2U6XCIsXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJgYGBiYXNoXCIsXG5cdFx0XHRcInBucG0gZGI6dXBcIixcblx0XHRcdFwicG5wbSBkYjpkb3duXCIsXG5cdFx0XHRcInBucG0gZGI6cmVzZXRcIixcblx0XHRcdFwiYGBgXCIsXG5cdFx0XHRcIlwiLFxuXHRcdCk7XG5cdH1cblxuXHRsaW5lcy5wdXNoKFxuXHRcdFwiIyMgRGVwbG95XCIsXG5cdFx0XCJcIixcblx0XHRcIlBhYVMgaG9zdHMgKGBkb2NrZXIgYnVpbGRgIGZyb20gdGhlIHJlcG8gcm9vdCkgdXNlIHRoZSBzY2FmZm9sZGVkIGBEb2NrZXJmaWxlYC5cIixcblx0XHRcIlRoZSBydW50aW1lIGltYWdlIGluc3RhbGxzIHByb2R1Y3Rpb24gZGVwZW5kZW5jaWVzIG9ubHkgKGBwbnBtIGluc3RhbGwgLS1wcm9kYCk7XCIsXG5cdFx0XCJGb3JnZSwgVHlwZVNjcmlwdCwgQmlvbWUsIGFuZCBWaXRlc3Qgc3RheSBpbiB0aGUgYnVpbGQgc3RhZ2UuXCIsXG5cdFx0XCJcIixcblx0XHRcImBgYGJhc2hcIixcblx0XHRgZG9ja2VyIGJ1aWxkIC10ICR7cHJvamVjdE5hbWV9IC5gLFxuXHRcdFwiYGBgXCIsXG5cdFx0XCJcIixcblx0XHRcIkV4dHJhIEFQSXM6IGBkb2NrZXIgYnVpbGQgLWYgRG9ja2VyZmlsZS48bmFtZT4gLmBcIixcblx0XHRcIlwiLFxuXHQpO1xuXG5cdGxpbmVzLnB1c2goXG5cdFx0XCIjIyBBZGQgYW5vdGhlciBBUElcIixcblx0XHRcIlwiLFxuXHRcdFwiYGBgYmFzaFwiLFxuXHRcdFwiZGVjb2hlcmUgYWRkIGFwaSA8bmFtZT5cIixcblx0XHRcImBgYFwiLFxuXHRcdFwiXCIsXG5cdFx0XCJFeGFtcGxlOiBgZGVjb2hlcmUgYWRkIGFwaSBiaWxsaW5nYFwiLFxuXHRcdFwiXCIsXG5cdCk7XG5cblx0aWYgKGhhc0F1dGgwKSB7XG5cdFx0bGluZXMucHVzaChcblx0XHRcdFwiIyMgQXV0aDBcIixcblx0XHRcdFwiXCIsXG5cdFx0XHRcIkpXVCBhdXRoIGlzIHdpcmVkIGZyb20gYC5lbnZgIChgQVVUSDBfSVNTVUVSX0JBU0VfVVJMYCwgYEFVVEgwX0FVRElFTkNFYCkuXCIsXG5cdFx0XHRcIlNldCB0aG9zZSB2YWx1ZXMgKG9yIHJlLXJ1biBzY2FmZm9sZCB3aXRoIGAtLWF1dGggYXV0aDBgKSBiZWZvcmUgY2FsbGluZyBwcm90ZWN0ZWQgcm91dGVzLlwiLFxuXHRcdFx0XCJcIixcblx0XHQpO1xuXHR9XG5cblx0aWYgKGhhc1Bvc3RtYW4pIHtcblx0XHRsaW5lcy5wdXNoKFxuXHRcdFx0XCIjIyBQb3N0bWFuXCIsXG5cdFx0XHRcIlwiLFxuXHRcdFx0XCJPcGVuIHRoaXMgKipwcm9qZWN0IHJvb3QqKiBpbiBQb3N0bWFuIExvY2FsIFZpZXcgKEZpbGVzIOKGkiBPcGVuIGZvbGRlciksIG5vdCB0aGUgYHBvc3RtYW4vYCBzdWJmb2xkZXIuXCIsXG5cdFx0XHRcIlNlbGVjdCB0aGUgTG9jYWwgZW52aXJvbm1lbnQsIHRoZW4gQXV0aG9yaXphdGlvbiDihpIgR2V0IE5ldyBBY2Nlc3MgVG9rZW4gd2hlbiBBdXRoMCBpcyBlbmFibGVkLlwiLFxuXHRcdFx0XCJcIixcblx0XHQpO1xuXHR9XG5cblx0bGluZXMucHVzaChcblx0XHRcIiMjIE1vcmVcIixcblx0XHRcIlwiLFxuXHRcdFwiLSBQYWNrYWdlIGRvY3M6IGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0BkZWNvaGVyZS9jcmVhdGVcIixcblx0XHRcIi0gQWZ0ZXIgYGRlY29oZXJlIGFkZCBhcGlgLCB0aGlzIFJFQURNRSBpcyByZWZyZXNoZWQgc28gc2NyaXB0cyBhbmQgQVBJcyBzdGF5IGFjY3VyYXRlLlwiLFxuXHRcdFwiXCIsXG5cdCk7XG5cblx0cmV0dXJuIGAke2xpbmVzLmpvaW4oXCJcXG5cIil9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXb3Jrc3BhY2VSZWFkbWVJbnB1dChcblx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0b3B0aW9uczogV29ya3NwYWNlUmVhZG1lT3B0aW9ucyxcbik6IFdvcmtzcGFjZVJlYWRtZUlucHV0IHtcblx0Y29uc3QgbmV3TmFtZXMgPSB3b3Jrc3BhY2Vcblx0XHQuZ2V0UHJvamVjdHMoKVxuXHRcdC5tYXAoKHByb2plY3QpID0+IGFwaU5hbWVGcm9tUHJvamVjdERpcihwcm9qZWN0LmRpcikpO1xuXHRjb25zdCBhcGlOYW1lcyA9IG9wdGlvbnMuYWRkXG5cdFx0PyBtZXJnZUFwaU5hbWVzKGxpc3RFeGlzdGluZ0FwaU5hbWVzKHdvcmtzcGFjZS50YXJnZXREaXIpLCBuZXdOYW1lcylcblx0XHQ6IG5ld05hbWVzO1xuXG5cdGNvbnN0IHBrZyA9IHdvcmtzcGFjZS5nZXRNb2RlbDxQYWNrYWdlSnNvbj4oV0VMTF9LTk9XTl9GSUxFUy5QQUNLQUdFX0pTT04pO1xuXHRjb25zdCBlbnYgPSB3b3Jrc3BhY2UuZ2V0TW9kZWw8RW52RmlsZT4oV0VMTF9LTk9XTl9GSUxFUy5FTlZfRklMRSk7XG5cblx0Y29uc3QgaGFzUG9zdGdyZXMgPVxuXHRcdG9wdGlvbnMuZGF0YWJhc2VQcm92aWRlciA9PT0gXCJwb3N0Z3Jlcy90eXBlb3JtXCIgfHwgQm9vbGVhbihwa2c/Lmhhc1NjcmlwdChcImRiOnVwXCIpKTtcblx0Y29uc3QgaGFzQXV0aDAgPVxuXHRcdG9wdGlvbnMuYXV0aFByb3ZpZGVyID09PSBcImF1dGgwXCIgfHwgQm9vbGVhbihlbnY/Lmhhc0VudHJ5KFwiQVVUSDBfSVNTVUVSX0JBU0VfVVJMXCIpKTtcblx0Y29uc3QgaGFzUG9zdG1hbiA9XG5cdFx0b3B0aW9ucy5wb3N0bWFuUHJvdmlkZXIgPT09IFwibG9jYWxcIiB8fFxuXHRcdG9wdGlvbnMucG9zdG1hblByb3ZpZGVyID09PSBcImFwaVwiIHx8XG5cdFx0ZXhpc3RzU3luYyhqb2luKHdvcmtzcGFjZS50YXJnZXREaXIsIFwicG9zdG1hblwiKSkgfHxcblx0XHRleGlzdHNTeW5jKGpvaW4od29ya3NwYWNlLnRhcmdldERpciwgXCIucG9zdG1hblwiKSk7XG5cblx0cmV0dXJuIHtcblx0XHRwcm9qZWN0TmFtZTogd29ya3NwYWNlLm5hbWUsXG5cdFx0YXBpTmFtZXMsXG5cdFx0aGFzUG9zdGdyZXMsXG5cdFx0aGFzQXV0aDAsXG5cdFx0aGFzUG9zdG1hbixcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlV29ya3NwYWNlUmVhZG1lKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRvcHRpb25zOiBXb3Jrc3BhY2VSZWFkbWVPcHRpb25zLFxuKTogdm9pZCB7XG5cdGNvbnN0IGNvbnRlbnQgPSByZW5kZXJXb3Jrc3BhY2VSZWFkbWUocmVzb2x2ZVdvcmtzcGFjZVJlYWRtZUlucHV0KHdvcmtzcGFjZSwgb3B0aW9ucykpO1xuXHR3b3Jrc3BhY2UuYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFt7IGZpbGVQYXRoOiBcIlJFQURNRS5tZFwiLCBjb250ZW50IH1dLFxuXHR9KTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VBcGlOYW1lcyhleGlzdGluZzogcmVhZG9ubHkgc3RyaW5nW10sIGFkZGVkOiByZWFkb25seSBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcblx0Y29uc3Qgc2VlbiA9IG5ldyBTZXQoZXhpc3RpbmcpO1xuXHRyZXR1cm4gWy4uLmV4aXN0aW5nLCAuLi5hZGRlZC5maWx0ZXIoKG5hbWUpID0+ICFzZWVuLmhhcyhuYW1lKSldO1xufVxuIl0sIm5hbWVzIjpbInJlbmRlcldvcmtzcGFjZVJlYWRtZSIsInJlc29sdmVXb3Jrc3BhY2VSZWFkbWVJbnB1dCIsIndyaXRlV29ya3NwYWNlUmVhZG1lIiwiaW5wdXQiLCJwcm9qZWN0TmFtZSIsImFwaU5hbWVzIiwiaGFzUG9zdGdyZXMiLCJoYXNBdXRoMCIsImhhc1Bvc3RtYW4iLCJhcGlzIiwibGVuZ3RoIiwibGluZXMiLCJuYW1lIiwicHVzaCIsImpvaW4iLCJ3b3Jrc3BhY2UiLCJvcHRpb25zIiwibmV3TmFtZXMiLCJnZXRQcm9qZWN0cyIsIm1hcCIsInByb2plY3QiLCJhcGlOYW1lRnJvbVByb2plY3REaXIiLCJkaXIiLCJhZGQiLCJtZXJnZUFwaU5hbWVzIiwibGlzdEV4aXN0aW5nQXBpTmFtZXMiLCJ0YXJnZXREaXIiLCJwa2ciLCJnZXRNb2RlbCIsIldFTExfS05PV05fRklMRVMiLCJQQUNLQUdFX0pTT04iLCJlbnYiLCJFTlZfRklMRSIsImRhdGFiYXNlUHJvdmlkZXIiLCJCb29sZWFuIiwiaGFzU2NyaXB0IiwiYXV0aFByb3ZpZGVyIiwiaGFzRW50cnkiLCJwb3N0bWFuUHJvdmlkZXIiLCJleGlzdHNTeW5jIiwiY29udGVudCIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiZXhpc3RpbmciLCJhZGRlZCIsInNlZW4iLCJTZXQiLCJmaWx0ZXIiLCJoYXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBd0JnQkE7ZUFBQUE7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
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "WebapiAction", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return WebapiAction;
9
+ }
10
+ });
11
+ const _decorators = require("@decohere/crucible/decorators");
12
+ const _cli = require("@decohere/nexus/cli");
13
+ const _clioptions = require("./webapi/cli-options.js");
14
+ function _ts_decorate(decorators, target, key, desc) {
15
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17
+ else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
19
+ }
20
+ class WebapiAction {
21
+ async run(options) {
22
+ await (0, _clioptions.runScaffoldApi)((0, _clioptions.toApiOptions)(options.directory, options));
23
+ return _cli.ActionResponse.Success("webapi");
24
+ }
25
+ }
26
+ WebapiAction = _ts_decorate([
27
+ (0, _decorators.injectable)()
28
+ ], WebapiAction);
29
+
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL3NjYWZmb2xkL3NyYy93ZWJhcGkuYWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tIFwiQGRlY29oZXJlL2NydWNpYmxlL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IHR5cGUgQWN0aW9uLCBBY3Rpb25SZXNwb25zZSB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvY2xpXCI7XG5pbXBvcnQgeyBydW5TY2FmZm9sZEFwaSwgdG9BcGlPcHRpb25zIH0gZnJvbSBcIi4vd2ViYXBpL2NsaS1vcHRpb25zLmpzXCI7XG5cbmV4cG9ydCB0eXBlIFdlYmFwaU9wdGlvbnMgPSB7XG5cdGRpcmVjdG9yeT86IHN0cmluZztcblx0ZD86IHN0cmluZztcblx0bmFtZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuXHRkYXRhYmFzZT86IHN0cmluZztcblx0YXV0aD86IHN0cmluZztcblx0cG9zdG1hbj86IHN0cmluZztcblx0eWVzPzogYm9vbGVhbjtcblx0aW5zdGFsbD86IHN0cmluZztcbn07XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBXZWJhcGlBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb248V2ViYXBpT3B0aW9ucz4ge1xuXHRwdWJsaWMgYXN5bmMgcnVuKG9wdGlvbnM6IFdlYmFwaU9wdGlvbnMpOiBQcm9taXNlPEFjdGlvblJlc3BvbnNlPiB7XG5cdFx0YXdhaXQgcnVuU2NhZmZvbGRBcGkodG9BcGlPcHRpb25zKG9wdGlvbnMuZGlyZWN0b3J5LCBvcHRpb25zKSk7XG5cdFx0cmV0dXJuIEFjdGlvblJlc3BvbnNlLlN1Y2Nlc3MoXCJ3ZWJhcGlcIik7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJXZWJhcGlBY3Rpb24iLCJydW4iLCJvcHRpb25zIiwicnVuU2NhZmZvbGRBcGkiLCJ0b0FwaU9wdGlvbnMiLCJkaXJlY3RvcnkiLCJBY3Rpb25SZXNwb25zZSIsIlN1Y2Nlc3MiXSwibWFwcGluZ3MiOiI7Ozs7K0JBZ0JhQTs7O2VBQUFBOzs7NEJBaEJjO3FCQUNpQjs0QkFDQzs7Ozs7OztBQWN0QyxNQUFNQTtJQUNaLE1BQWFDLElBQUlDLE9BQXNCLEVBQTJCO1FBQ2pFLE1BQU1DLElBQUFBLDBCQUFjLEVBQUNDLElBQUFBLHdCQUFZLEVBQUNGLFFBQVFHLFNBQVMsRUFBRUg7UUFDckQsT0FBT0ksbUJBQWMsQ0FBQ0MsT0FBTyxDQUFDO0lBQy9CO0FBQ0QifQ==