@decohere/create 0.0.1-dev.16 → 0.0.1-dev.18

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 (186) hide show
  1. package/commonjs/src/cli.js +26 -5
  2. package/commonjs/src/models/compose.model.js +82 -0
  3. package/commonjs/src/models/config-yaml.model.js +34 -0
  4. package/commonjs/src/models/const.js +29 -0
  5. package/commonjs/src/models/container-image.model.js +88 -0
  6. package/commonjs/src/models/dev-container.model.js +73 -0
  7. package/commonjs/src/models/env-file.model.js +33 -0
  8. package/commonjs/src/models/gitignore.model.js +32 -0
  9. package/commonjs/src/models/launch-json.model.js +52 -0
  10. package/commonjs/src/models/package-json.model.js +64 -0
  11. package/commonjs/src/models/project.model.js +126 -0
  12. package/commonjs/src/models/source-file.js +6 -0
  13. package/commonjs/src/models/tsconfig.model.js +34 -0
  14. package/commonjs/src/models/vscode-settings.model.js +31 -0
  15. package/commonjs/src/services/scaffold.service.js +62 -0
  16. package/commonjs/src/webapi/create-api.js +169 -0
  17. package/commonjs/src/webapi/features/auth.feature.js +166 -0
  18. package/commonjs/src/webapi/features/auth0-cli.js +151 -0
  19. package/commonjs/src/webapi/features/database.feature.js +151 -0
  20. package/commonjs/src/webapi/features/finalize.feature.js +46 -0
  21. package/commonjs/src/webapi/features/postman.feature.js +309 -0
  22. package/commonjs/src/webapi/models/api-package-json.model.js +57 -0
  23. package/commonjs/src/webapi/models/auth-config.model.js +23 -0
  24. package/commonjs/src/webapi/models/controller-source-file.model.js +180 -0
  25. package/commonjs/src/webapi/models/main-source-file.model.js +132 -0
  26. package/commonjs/src/webapi/models/sample-files.model.js +60 -0
  27. package/commonjs/v1/cli.js +15 -0
  28. package/commonjs/v1/domain/class-model.js +106 -0
  29. package/commonjs/v1/domain/compose.model.js +74 -0
  30. package/commonjs/v1/domain/context.js +53 -0
  31. package/commonjs/v1/domain/devcontainer.model.js +116 -0
  32. package/commonjs/v1/domain/dockerfile.model.js +62 -0
  33. package/commonjs/v1/domain/feature.js +19 -0
  34. package/commonjs/v1/domain/import-map.js +74 -0
  35. package/commonjs/v1/domain/index.js +68 -0
  36. package/commonjs/v1/domain/prompt.js +45 -0
  37. package/commonjs/v1/domain/workflow.js +37 -0
  38. package/commonjs/v1/features/api-core/feature.js +103 -0
  39. package/commonjs/v1/features/api-core/hello-controller.model.js +100 -0
  40. package/commonjs/v1/features/api-core/main-ts.model.js +85 -0
  41. package/commonjs/v1/features/api-core/scaffold-files.template.js +158 -0
  42. package/commonjs/v1/features/auth0/auth0-cli.js +151 -0
  43. package/commonjs/v1/features/auth0/feature.js +187 -0
  44. package/commonjs/v1/features/auth0/models.js +14 -0
  45. package/commonjs/v1/features/auth0/prod-config.template.js +19 -0
  46. package/commonjs/v1/features/cli-core/feature.js +37 -0
  47. package/commonjs/v1/features/cli-core/scaffold-files.template.js +103 -0
  48. package/commonjs/v1/features/devcontainer/feature.js +38 -0
  49. package/commonjs/v1/features/finalize/feature.js +48 -0
  50. package/commonjs/v1/features/postgresql/feature.js +81 -0
  51. package/commonjs/v1/features/postgresql/models.js +14 -0
  52. package/commonjs/v1/features/postman/collection.template.js +80 -0
  53. package/commonjs/v1/features/postman/environment.template.js +24 -0
  54. package/commonjs/v1/features/postman/feature.js +192 -0
  55. package/commonjs/v1/features/typeorm/feature.js +66 -0
  56. package/commonjs/v1/features/typeorm/scaffold-files.template.js +80 -0
  57. package/commonjs/v1/scaffold.js +50 -0
  58. package/commonjs/v1/version.js +32 -0
  59. package/commonjs/v1/workflows/api.js +29 -0
  60. package/commonjs/v1/workflows/cli.js +19 -0
  61. package/es6/src/cli.js +26 -5
  62. package/es6/src/models/compose.model.js +77 -0
  63. package/es6/src/models/config-yaml.model.js +30 -0
  64. package/es6/src/models/const.js +19 -0
  65. package/es6/src/models/container-image.model.js +84 -0
  66. package/es6/src/models/dev-container.model.js +68 -0
  67. package/es6/src/models/env-file.model.js +29 -0
  68. package/es6/src/models/gitignore.model.js +22 -0
  69. package/es6/src/models/launch-json.model.js +42 -0
  70. package/es6/src/models/package-json.model.js +60 -0
  71. package/es6/src/models/project.model.js +111 -0
  72. package/es6/src/models/source-file.js +3 -0
  73. package/es6/src/models/tsconfig.model.js +24 -0
  74. package/es6/src/models/vscode-settings.model.js +21 -0
  75. package/es6/src/services/scaffold.service.js +52 -0
  76. package/es6/src/webapi/create-api.js +151 -0
  77. package/es6/src/webapi/features/auth.feature.js +115 -0
  78. package/es6/src/webapi/features/auth0-cli.js +116 -0
  79. package/es6/src/webapi/features/database.feature.js +141 -0
  80. package/es6/src/webapi/features/finalize.feature.js +36 -0
  81. package/es6/src/webapi/features/postman.feature.js +258 -0
  82. package/es6/src/webapi/models/api-package-json.model.js +52 -0
  83. package/es6/src/webapi/models/auth-config.model.js +19 -0
  84. package/es6/src/webapi/models/controller-source-file.model.js +171 -0
  85. package/es6/src/webapi/models/main-source-file.model.js +128 -0
  86. package/es6/src/webapi/models/sample-files.model.js +42 -0
  87. package/es6/v1/cli.js +11 -0
  88. package/es6/v1/domain/class-model.js +104 -0
  89. package/es6/v1/domain/compose.model.js +61 -0
  90. package/es6/v1/domain/context.js +37 -0
  91. package/es6/v1/domain/devcontainer.model.js +104 -0
  92. package/es6/v1/domain/dockerfile.model.js +52 -0
  93. package/es6/v1/domain/feature.js +9 -0
  94. package/es6/v1/domain/import-map.js +64 -0
  95. package/es6/v1/domain/index.js +11 -0
  96. package/es6/v1/domain/prompt.js +27 -0
  97. package/es6/v1/domain/workflow.js +24 -0
  98. package/es6/v1/features/api-core/feature.js +93 -0
  99. package/es6/v1/features/api-core/hello-controller.model.js +96 -0
  100. package/es6/v1/features/api-core/main-ts.model.js +74 -0
  101. package/es6/v1/features/api-core/scaffold-files.template.js +116 -0
  102. package/es6/v1/features/auth0/auth0-cli.js +116 -0
  103. package/es6/v1/features/auth0/feature.js +136 -0
  104. package/es6/v1/features/auth0/models.js +4 -0
  105. package/es6/v1/features/auth0/prod-config.template.js +9 -0
  106. package/es6/v1/features/cli-core/feature.js +27 -0
  107. package/es6/v1/features/cli-core/scaffold-files.template.js +73 -0
  108. package/es6/v1/features/devcontainer/feature.js +28 -0
  109. package/es6/v1/features/finalize/feature.js +38 -0
  110. package/es6/v1/features/postgresql/feature.js +71 -0
  111. package/es6/v1/features/postgresql/models.js +4 -0
  112. package/es6/v1/features/postman/collection.template.js +70 -0
  113. package/es6/v1/features/postman/environment.template.js +14 -0
  114. package/es6/v1/features/postman/feature.js +141 -0
  115. package/es6/v1/features/typeorm/feature.js +56 -0
  116. package/es6/v1/features/typeorm/scaffold-files.template.js +56 -0
  117. package/es6/v1/scaffold.js +40 -0
  118. package/es6/v1/version.js +22 -0
  119. package/es6/v1/workflows/api.js +25 -0
  120. package/es6/v1/workflows/cli.js +9 -0
  121. package/package.json +2 -2
  122. package/types/src/models/compose.model.d.ts +32 -0
  123. package/types/src/models/config-yaml.model.d.ts +16 -0
  124. package/types/src/models/const.d.ts +17 -0
  125. package/types/src/models/container-image.model.d.ts +15 -0
  126. package/types/src/models/dev-container.model.d.ts +21 -0
  127. package/types/src/models/env-file.model.d.ts +14 -0
  128. package/types/src/models/gitignore.model.d.ts +6 -0
  129. package/types/src/models/launch-json.model.d.ts +5 -0
  130. package/types/src/models/package-json.model.d.ts +18 -0
  131. package/types/src/models/project.model.d.ts +55 -0
  132. package/types/src/models/source-file.d.ts +11 -0
  133. package/types/src/models/tsconfig.model.d.ts +5 -0
  134. package/types/src/models/vscode-settings.model.d.ts +7 -0
  135. package/types/src/services/scaffold.service.d.ts +22 -0
  136. package/types/src/webapi/create-api.d.ts +7 -0
  137. package/types/src/webapi/features/auth.feature.d.ts +7 -0
  138. package/types/src/webapi/features/auth0-cli.d.ts +22 -0
  139. package/types/src/webapi/features/database.feature.d.ts +5 -0
  140. package/types/src/webapi/features/finalize.feature.d.ts +2 -0
  141. package/types/src/webapi/features/postman.feature.d.ts +7 -0
  142. package/types/src/webapi/models/api-package-json.model.d.ts +17 -0
  143. package/types/src/webapi/models/auth-config.model.d.ts +18 -0
  144. package/types/src/webapi/models/controller-source-file.model.d.ts +42 -0
  145. package/types/src/webapi/models/main-source-file.model.d.ts +36 -0
  146. package/types/src/webapi/models/sample-files.model.d.ts +7 -0
  147. package/types/v1/cli.d.ts +2 -0
  148. package/types/v1/domain/class-model.d.ts +70 -0
  149. package/types/v1/domain/compose.model.d.ts +25 -0
  150. package/types/v1/domain/context.d.ts +36 -0
  151. package/types/v1/domain/devcontainer.model.d.ts +35 -0
  152. package/types/v1/domain/dockerfile.model.d.ts +11 -0
  153. package/types/v1/domain/feature.d.ts +29 -0
  154. package/types/v1/domain/import-map.d.ts +24 -0
  155. package/types/v1/domain/index.d.ts +12 -0
  156. package/types/v1/domain/prompt.d.ts +2 -0
  157. package/types/v1/domain/workflow.d.ts +14 -0
  158. package/types/v1/features/api-core/feature.d.ts +2 -0
  159. package/types/v1/features/api-core/hello-controller.model.d.ts +9 -0
  160. package/types/v1/features/api-core/main-ts.model.d.ts +31 -0
  161. package/types/v1/features/api-core/scaffold-files.template.d.ts +10 -0
  162. package/types/v1/features/auth0/auth0-cli.d.ts +22 -0
  163. package/types/v1/features/auth0/feature.d.ts +2 -0
  164. package/types/v1/features/auth0/models.d.ts +5 -0
  165. package/types/v1/features/auth0/prod-config.template.d.ts +1 -0
  166. package/types/v1/features/cli-core/feature.d.ts +2 -0
  167. package/types/v1/features/cli-core/scaffold-files.template.d.ts +6 -0
  168. package/types/v1/features/devcontainer/feature.d.ts +2 -0
  169. package/types/v1/features/finalize/feature.d.ts +2 -0
  170. package/types/v1/features/postgresql/feature.d.ts +2 -0
  171. package/types/v1/features/postgresql/models.d.ts +6 -0
  172. package/types/v1/features/postman/collection.template.d.ts +1 -0
  173. package/types/v1/features/postman/environment.template.d.ts +6 -0
  174. package/types/v1/features/postman/feature.d.ts +2 -0
  175. package/types/v1/features/typeorm/feature.d.ts +2 -0
  176. package/types/v1/features/typeorm/scaffold-files.template.d.ts +9 -0
  177. package/types/v1/scaffold.d.ts +3 -0
  178. package/types/v1/version.d.ts +2 -0
  179. package/types/v1/workflows/api.d.ts +8 -0
  180. package/types/v1/workflows/cli.d.ts +1 -0
  181. package/commonjs/src/scaffold.js +0 -89
  182. package/commonjs/src/templates.js +0 -305
  183. package/es6/src/scaffold.js +0 -79
  184. package/es6/src/templates.js +0 -245
  185. package/types/src/scaffold.d.ts +0 -6
  186. package/types/src/templates.d.ts +0 -20
@@ -0,0 +1,126 @@
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 MonoRepoScaffold () {
13
+ return MonoRepoScaffold;
14
+ },
15
+ get ProjectScaffold () {
16
+ return ProjectScaffold;
17
+ },
18
+ get WorkspaceScaffold () {
19
+ return WorkspaceScaffold;
20
+ }
21
+ });
22
+ const _promises = require("node:fs/promises");
23
+ const _nodepath = require("node:path");
24
+ class ProjectScaffold {
25
+ dir;
26
+ _models = new Map();
27
+ _files = [];
28
+ constructor(dir){
29
+ this.dir = dir;
30
+ }
31
+ addModel(model) {
32
+ this._models.set(model.key, model);
33
+ return model;
34
+ }
35
+ addFile(provider) {
36
+ this._files.push(...provider.files());
37
+ return this;
38
+ }
39
+ getModel(key) {
40
+ return this._models.get(key);
41
+ }
42
+ getModels(ctor) {
43
+ return [
44
+ ...this._models.values()
45
+ ].filter((m)=>m instanceof ctor);
46
+ }
47
+ /** Returns all files with `dir/` prepended to each path. */ files() {
48
+ const all = [
49
+ ...this._files,
50
+ ...[
51
+ ...this._models.values()
52
+ ].flatMap((m)=>m.files())
53
+ ];
54
+ return all.map((f)=>({
55
+ filePath: `${this.dir}/${f.filePath}`,
56
+ content: f.content
57
+ }));
58
+ }
59
+ }
60
+ class WorkspaceScaffold {
61
+ files = [];
62
+ targetDir = process.cwd();
63
+ /** Derived from the basename of targetDir. */ get name() {
64
+ return (0, _nodepath.basename)(this.targetDir);
65
+ }
66
+ /** Add an ad-hoc file provider whose output is included at render time. */ addFile(provider) {
67
+ this.files.push(...provider.files());
68
+ return this;
69
+ }
70
+ }
71
+ class MonoRepoScaffold extends WorkspaceScaffold {
72
+ _models = new Map();
73
+ _projects = [];
74
+ /** Register a named project. */ addProject(project) {
75
+ this._projects.push(project);
76
+ return project;
77
+ }
78
+ /** Retrieve a previously-registered project by its directory path. */ getProject(dir) {
79
+ return this._projects.find((p)=>p.dir === dir);
80
+ }
81
+ /** Register a named model at workspace level. */ addModel(model) {
82
+ this._models.set(model.key, model);
83
+ return model;
84
+ }
85
+ /**
86
+ * Retrieve a model by key. Searches workspace models first, then all
87
+ * registered projects in order.
88
+ */ getModel(key) {
89
+ const m = this._models.get(key);
90
+ if (m !== undefined) return m;
91
+ for (const project of this._projects){
92
+ const pm = project.getModel(key);
93
+ if (pm !== undefined) return pm;
94
+ }
95
+ return undefined;
96
+ }
97
+ /**
98
+ * Retrieve all models of a given type. Searches workspace models and all
99
+ * projects, so features can discover controllers across multiple projects.
100
+ */ getModels(ctor) {
101
+ return [
102
+ ...[
103
+ ...this._models.values()
104
+ ].filter((m)=>m instanceof ctor),
105
+ ...this._projects.flatMap((p)=>p.getModels(ctor))
106
+ ];
107
+ }
108
+ /** Render all models and projects into files, then write everything to disk. */ async scaffold() {
109
+ const allFiles = [
110
+ ...this.files,
111
+ ...[
112
+ ...this._models.values()
113
+ ].flatMap((m)=>m.files()),
114
+ ...this._projects.flatMap((p)=>p.files())
115
+ ];
116
+ await Promise.all(allFiles.map(async (file)=>{
117
+ const fullPath = (0, _nodepath.join)(this.targetDir, file.filePath);
118
+ await (0, _promises.mkdir)((0, _nodepath.dirname)(fullPath), {
119
+ recursive: true
120
+ });
121
+ await (0, _promises.writeFile)(fullPath, file.content);
122
+ }));
123
+ }
124
+ }
125
+
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3Byb2plY3QubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWtkaXIsIHdyaXRlRmlsZSB9IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSwgU291cmNlRmlsZVByb3ZpZGVyIH0gZnJvbSBcIi4vc291cmNlLWZpbGUuanNcIjtcblxuLyoqXG4gKiBBIHN1Yi11bml0IG9mIHRoZSBtb25vcmVwbyAoZS5nLiBgcHJvamVjdHMvYXBpYCkuXG4gKlxuICogTW9kZWxzIGFuZCBmaWxlcyByZWdpc3RlcmVkIGhlcmUgcHJvZHVjZSBwYXRocyByZWxhdGl2ZSB0byBgZGlyYC4gVGhlIHBhcmVudFxuICogYE1vbm9SZXBvU2NhZmZvbGRgIGNhbGxzIGBmaWxlcygpYCBhbmQgcHJlcGVuZHMgYGRpci9gIHRvIGV2ZXJ5IHBhdGgsIHNvXG4gKiBtb2RlbHMgcmVtYWluIHVuYXdhcmUgb2Ygd2hlcmUgdGhleSBsaXZlIGluIHRoZSByZXBvLlxuICovXG5leHBvcnQgY2xhc3MgUHJvamVjdFNjYWZmb2xkIHtcblx0cHJpdmF0ZSByZWFkb25seSBfbW9kZWxzID0gbmV3IE1hcDxzdHJpbmcsIFNvdXJjZUZpbGVQcm92aWRlcj4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfZmlsZXM6IFNvdXJjZUZpbGVbXSA9IFtdO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgZGlyOiBzdHJpbmcpIHt9XG5cblx0cHVibGljIGFkZE1vZGVsPFQgZXh0ZW5kcyBLZXllZE1vZGVsPihtb2RlbDogVCk6IFQge1xuXHRcdHRoaXMuX21vZGVscy5zZXQobW9kZWwua2V5LCBtb2RlbCk7XG5cdFx0cmV0dXJuIG1vZGVsO1xuXHR9XG5cblx0cHVibGljIGFkZEZpbGUocHJvdmlkZXI6IFNvdXJjZUZpbGVQcm92aWRlcik6IHRoaXMge1xuXHRcdHRoaXMuX2ZpbGVzLnB1c2goLi4ucHJvdmlkZXIuZmlsZXMoKSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9kZWw8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oa2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fbW9kZWxzLmdldChrZXkpIGFzIFQgfCB1bmRlZmluZWQ7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9kZWxzPFQgZXh0ZW5kcyBTb3VyY2VGaWxlUHJvdmlkZXI+KGN0b3I6IG5ldyAoLi4uYXJnczogbmV2ZXJbXSkgPT4gVCk6IFRbXSB7XG5cdFx0cmV0dXJuIFsuLi50aGlzLl9tb2RlbHMudmFsdWVzKCldLmZpbHRlcigobSk6IG0gaXMgVCA9PiBtIGluc3RhbmNlb2YgY3Rvcik7XG5cdH1cblxuXHQvKiogUmV0dXJucyBhbGwgZmlsZXMgd2l0aCBgZGlyL2AgcHJlcGVuZGVkIHRvIGVhY2ggcGF0aC4gKi9cblx0cHVibGljIGZpbGVzKCk6IFNvdXJjZUZpbGVbXSB7XG5cdFx0Y29uc3QgYWxsID0gWy4uLnRoaXMuX2ZpbGVzLCAuLi5bLi4udGhpcy5fbW9kZWxzLnZhbHVlcygpXS5mbGF0TWFwKChtKSA9PiBtLmZpbGVzKCkpXTtcblx0XHRyZXR1cm4gYWxsLm1hcCgoZikgPT4gKHsgZmlsZVBhdGg6IGAke3RoaXMuZGlyfS8ke2YuZmlsZVBhdGh9YCwgY29udGVudDogZi5jb250ZW50IH0pKTtcblx0fVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya3NwYWNlU2NhZmZvbGQge1xuXHRwdWJsaWMgcmVhZG9ubHkgZmlsZXM6IFNvdXJjZUZpbGVbXSA9IFtdO1xuXHRwdWJsaWMgdGFyZ2V0RGlyOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpO1xuXG5cdC8qKiBEZXJpdmVkIGZyb20gdGhlIGJhc2VuYW1lIG9mIHRhcmdldERpci4gKi9cblx0cHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGJhc2VuYW1lKHRoaXMudGFyZ2V0RGlyKTtcblx0fVxuXG5cdC8qKiBBZGQgYW4gYWQtaG9jIGZpbGUgcHJvdmlkZXIgd2hvc2Ugb3V0cHV0IGlzIGluY2x1ZGVkIGF0IHJlbmRlciB0aW1lLiAqL1xuXHRwdWJsaWMgYWRkRmlsZShwcm92aWRlcjogU291cmNlRmlsZVByb3ZpZGVyKTogdGhpcyB7XG5cdFx0dGhpcy5maWxlcy5wdXNoKC4uLnByb3ZpZGVyLmZpbGVzKCkpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFic3RyYWN0IGFkZE1vZGVsPFQgZXh0ZW5kcyBLZXllZE1vZGVsPihtb2RlbDogVCk6IFQ7XG5cdHB1YmxpYyBhYnN0cmFjdCBnZXRNb2RlbDxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQ7XG5cdHB1YmxpYyBhYnN0cmFjdCBnZXRNb2RlbHM8VCBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlcj4oXG5cdFx0Y3RvcjogbmV3ICguLi5hcmdzOiBuZXZlcltdKSA9PiBULFxuXHQpOiBUW107XG5cdHB1YmxpYyBhYnN0cmFjdCBnZXRQcm9qZWN0KGRpcjogc3RyaW5nKTogUHJvamVjdFNjYWZmb2xkIHwgdW5kZWZpbmVkO1xuXHRwdWJsaWMgYWJzdHJhY3Qgc2NhZmZvbGQoKTogUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbmV4cG9ydCBjbGFzcyBNb25vUmVwb1NjYWZmb2xkIGV4dGVuZHMgV29ya3NwYWNlU2NhZmZvbGQge1xuXHRwcml2YXRlIHJlYWRvbmx5IF9tb2RlbHMgPSBuZXcgTWFwPHN0cmluZywgU291cmNlRmlsZVByb3ZpZGVyPigpO1xuXHRwcml2YXRlIHJlYWRvbmx5IF9wcm9qZWN0czogUHJvamVjdFNjYWZmb2xkW10gPSBbXTtcblxuXHQvKiogUmVnaXN0ZXIgYSBuYW1lZCBwcm9qZWN0LiAqL1xuXHRwdWJsaWMgYWRkUHJvamVjdChwcm9qZWN0OiBQcm9qZWN0U2NhZmZvbGQpOiBQcm9qZWN0U2NhZmZvbGQge1xuXHRcdHRoaXMuX3Byb2plY3RzLnB1c2gocHJvamVjdCk7XG5cdFx0cmV0dXJuIHByb2plY3Q7XG5cdH1cblxuXHQvKiogUmV0cmlldmUgYSBwcmV2aW91c2x5LXJlZ2lzdGVyZWQgcHJvamVjdCBieSBpdHMgZGlyZWN0b3J5IHBhdGguICovXG5cdHB1YmxpYyBnZXRQcm9qZWN0KGRpcjogc3RyaW5nKTogUHJvamVjdFNjYWZmb2xkIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5fcHJvamVjdHMuZmluZCgocCkgPT4gcC5kaXIgPT09IGRpcik7XG5cdH1cblxuXHQvKiogUmVnaXN0ZXIgYSBuYW1lZCBtb2RlbCBhdCB3b3Jrc3BhY2UgbGV2ZWwuICovXG5cdHB1YmxpYyBhZGRNb2RlbDxUIGV4dGVuZHMgS2V5ZWRNb2RlbD4obW9kZWw6IFQpOiBUIHtcblx0XHR0aGlzLl9tb2RlbHMuc2V0KG1vZGVsLmtleSwgbW9kZWwpO1xuXHRcdHJldHVybiBtb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhIG1vZGVsIGJ5IGtleS4gU2VhcmNoZXMgd29ya3NwYWNlIG1vZGVscyBmaXJzdCwgdGhlbiBhbGxcblx0ICogcmVnaXN0ZXJlZCBwcm9qZWN0cyBpbiBvcmRlci5cblx0ICovXG5cdHB1YmxpYyBnZXRNb2RlbDxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG0gPSB0aGlzLl9tb2RlbHMuZ2V0KGtleSkgYXMgVCB8IHVuZGVmaW5lZDtcblx0XHRpZiAobSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gbTtcblx0XHRmb3IgKGNvbnN0IHByb2plY3Qgb2YgdGhpcy5fcHJvamVjdHMpIHtcblx0XHRcdGNvbnN0IHBtID0gcHJvamVjdC5nZXRNb2RlbDxUPihrZXkpO1xuXHRcdFx0aWYgKHBtICE9PSB1bmRlZmluZWQpIHJldHVybiBwbTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhbGwgbW9kZWxzIG9mIGEgZ2l2ZW4gdHlwZS4gU2VhcmNoZXMgd29ya3NwYWNlIG1vZGVscyBhbmQgYWxsXG5cdCAqIHByb2plY3RzLCBzbyBmZWF0dXJlcyBjYW4gZGlzY292ZXIgY29udHJvbGxlcnMgYWNyb3NzIG11bHRpcGxlIHByb2plY3RzLlxuXHQgKi9cblx0cHVibGljIGdldE1vZGVsczxUIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyPihjdG9yOiBuZXcgKC4uLmFyZ3M6IG5ldmVyW10pID0+IFQpOiBUW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHQuLi5bLi4udGhpcy5fbW9kZWxzLnZhbHVlcygpXS5maWx0ZXIoKG0pOiBtIGlzIFQgPT4gbSBpbnN0YW5jZW9mIGN0b3IpLFxuXHRcdFx0Li4udGhpcy5fcHJvamVjdHMuZmxhdE1hcCgocCkgPT4gcC5nZXRNb2RlbHMoY3RvcikpLFxuXHRcdF07XG5cdH1cblxuXHQvKiogUmVuZGVyIGFsbCBtb2RlbHMgYW5kIHByb2plY3RzIGludG8gZmlsZXMsIHRoZW4gd3JpdGUgZXZlcnl0aGluZyB0byBkaXNrLiAqL1xuXHRwdWJsaWMgYXN5bmMgc2NhZmZvbGQoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWxsRmlsZXMgPSBbXG5cdFx0XHQuLi50aGlzLmZpbGVzLFxuXHRcdFx0Li4uWy4uLnRoaXMuX21vZGVscy52YWx1ZXMoKV0uZmxhdE1hcCgobSkgPT4gbS5maWxlcygpKSxcblx0XHRcdC4uLnRoaXMuX3Byb2plY3RzLmZsYXRNYXAoKHApID0+IHAuZmlsZXMoKSksXG5cdFx0XTtcblxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0YWxsRmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZ1bGxQYXRoID0gam9pbih0aGlzLnRhcmdldERpciwgZmlsZS5maWxlUGF0aCk7XG5cdFx0XHRcdGF3YWl0IG1rZGlyKGRpcm5hbWUoZnVsbFBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblx0XHRcdFx0YXdhaXQgd3JpdGVGaWxlKGZ1bGxQYXRoLCBmaWxlLmNvbnRlbnQpO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIk1vbm9SZXBvU2NhZmZvbGQiLCJQcm9qZWN0U2NhZmZvbGQiLCJXb3Jrc3BhY2VTY2FmZm9sZCIsIl9tb2RlbHMiLCJNYXAiLCJfZmlsZXMiLCJkaXIiLCJhZGRNb2RlbCIsIm1vZGVsIiwic2V0Iiwia2V5IiwiYWRkRmlsZSIsInByb3ZpZGVyIiwicHVzaCIsImZpbGVzIiwiZ2V0TW9kZWwiLCJnZXQiLCJnZXRNb2RlbHMiLCJjdG9yIiwidmFsdWVzIiwiZmlsdGVyIiwibSIsImFsbCIsImZsYXRNYXAiLCJtYXAiLCJmIiwiZmlsZVBhdGgiLCJjb250ZW50IiwidGFyZ2V0RGlyIiwicHJvY2VzcyIsImN3ZCIsIm5hbWUiLCJiYXNlbmFtZSIsIl9wcm9qZWN0cyIsImFkZFByb2plY3QiLCJwcm9qZWN0IiwiZ2V0UHJvamVjdCIsImZpbmQiLCJwIiwidW5kZWZpbmVkIiwicG0iLCJzY2FmZm9sZCIsImFsbEZpbGVzIiwiUHJvbWlzZSIsImZpbGUiLCJmdWxsUGF0aCIsImpvaW4iLCJta2RpciIsImRpcm5hbWUiLCJyZWN1cnNpdmUiLCJ3cml0ZUZpbGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBa0VhQTtlQUFBQTs7UUF2REFDO2VBQUFBOztRQStCU0M7ZUFBQUE7OzswQkExQ1c7MEJBQ087QUFVakMsTUFBTUQ7O0lBQ0tFLFVBQVUsSUFBSUMsTUFBa0M7SUFDaERDLFNBQXVCLEVBQUUsQ0FBQztJQUUzQyxZQUFtQixBQUFnQkMsR0FBVyxDQUFFO2FBQWJBLE1BQUFBO0lBQWM7SUFFMUNDLFNB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
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "TsConfig", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return TsConfig;
9
+ }
10
+ });
11
+ const _const = require("./const.js");
12
+ class TsConfig {
13
+ key = _const.WELL_KNOWN_FILES.TSCONFIG;
14
+ files() {
15
+ return [
16
+ {
17
+ filePath: "tsconfig.json",
18
+ content: JSON.stringify({
19
+ compilerOptions: {
20
+ target: "ES2022",
21
+ module: "NodeNext",
22
+ moduleResolution: "NodeNext",
23
+ strict: true,
24
+ skipLibCheck: true,
25
+ experimentalDecorators: true,
26
+ emitDecoratorMetadata: true
27
+ }
28
+ }, null, 2)
29
+ }
30
+ ];
31
+ }
32
+ }
33
+
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3RzY29uZmlnLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdFTExfS05PV05fRklMRVMgfSBmcm9tIFwiLi9jb25zdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXllZE1vZGVsLCBTb3VyY2VGaWxlIH0gZnJvbSBcIi4vc291cmNlLWZpbGUuanNcIjtcblxuZXhwb3J0IGNsYXNzIFRzQ29uZmlnIGltcGxlbWVudHMgS2V5ZWRNb2RlbCB7XG5cdHB1YmxpYyByZWFkb25seSBrZXkgPSBXRUxMX0tOT1dOX0ZJTEVTLlRTQ09ORklHO1xuXG5cdHB1YmxpYyBmaWxlcygpOiBTb3VyY2VGaWxlW10ge1xuXHRcdHJldHVybiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcInRzY29uZmlnLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Y29tcGlsZXJPcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldDogXCJFUzIwMjJcIixcblx0XHRcdFx0XHRcdFx0bW9kdWxlOiBcIk5vZGVOZXh0XCIsXG5cdFx0XHRcdFx0XHRcdG1vZHVsZVJlc29sdXRpb246IFwiTm9kZU5leHRcIixcblx0XHRcdFx0XHRcdFx0c3RyaWN0OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRza2lwTGliQ2hlY2s6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGV4cGVyaW1lbnRhbERlY29yYXRvcnM6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGVtaXREZWNvcmF0b3JNZXRhZGF0YTogdHJ1ZSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRudWxsLFxuXHRcdFx0XHRcdDIsXG5cdFx0XHRcdCksXG5cdFx0XHR9LFxuXHRcdF07XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJUc0NvbmZpZyIsImtleSIsIldFTExfS05PV05fRklMRVMiLCJUU0NPTkZJRyIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImNvbXBpbGVyT3B0aW9ucyIsInRhcmdldCIsIm1vZHVsZSIsIm1vZHVsZVJlc29sdXRpb24iLCJzdHJpY3QiLCJza2lwTGliQ2hlY2siLCJleHBlcmltZW50YWxEZWNvcmF0b3JzIiwiZW1pdERlY29yYXRvck1ldGFkYXRhIl0sIm1hcHBpbmdzIjoiOzs7OytCQUdhQTs7O2VBQUFBOzs7dUJBSG9CO0FBRzFCLE1BQU1BO0lBQ0lDLE1BQU1DLHVCQUFnQixDQUFDQyxRQUFRLENBQUM7SUFFekNDLFFBQXNCO1FBQzVCLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVkMsU0FBU0MsS0FBS0MsU0FBUyxDQUN0QjtvQkFDQ0MsaUJBQWlCO3dCQUNoQkMsUUFBUTt3QkFDUkMsUUFBUTt3QkFDUkMsa0JBQWtCO3dCQUNsQkMsUUFBUTt3QkFDUkMsY0FBYzt3QkFDZEMsd0JBQXdCO3dCQUN4QkMsdUJBQXVCO29CQUN4QjtnQkFDRCxHQUNBLE1BQ0E7WUFFRjtTQUNBO0lBQ0Y7QUFDRCJ9
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "VSCodeSettings", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return VSCodeSettings;
9
+ }
10
+ });
11
+ const _const = require("./const.js");
12
+ class VSCodeSettings {
13
+ title;
14
+ key = _const.WELL_KNOWN_FILES.VSCODE_SETTINGS;
15
+ constructor(title){
16
+ this.title = title;
17
+ }
18
+ files() {
19
+ return [
20
+ {
21
+ filePath: ".vscode/settings.json",
22
+ content: JSON.stringify({
23
+ "window.title": `${this.title}\${separator}\${activeEditorShort}`,
24
+ "window.titleSeparator": " | "
25
+ }, null, 2)
26
+ }
27
+ ];
28
+ }
29
+ }
30
+
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL3ZzY29kZS1zZXR0aW5ncy5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCBjbGFzcyBWU0NvZGVTZXR0aW5ncyBpbXBsZW1lbnRzIEtleWVkTW9kZWwge1xuXHRwdWJsaWMgcmVhZG9ubHkga2V5ID0gV0VMTF9LTk9XTl9GSUxFUy5WU0NPREVfU0VUVElOR1M7XG5cblx0cHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdGl0bGU6IHN0cmluZykge31cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIudnNjb2RlL3NldHRpbmdzLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XCJ3aW5kb3cudGl0bGVcIjogYCR7dGhpcy50aXRsZX1cXCR7c2VwYXJhdG9yfVxcJHthY3RpdmVFZGl0b3JTaG9ydH1gLFxuXHRcdFx0XHRcdFx0XCJ3aW5kb3cudGl0bGVTZXBhcmF0b3JcIjogXCIgfCBcIixcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0Mixcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIlZTQ29kZVNldHRpbmdzIiwia2V5IiwiV0VMTF9LTk9XTl9GSUxFUyIsIlZTQ09ERV9TRVRUSU5HUyIsInRpdGxlIiwiZmlsZXMiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJKU09OIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiOzs7OytCQUdhQTs7O2VBQUFBOzs7dUJBSG9CO0FBRzFCLE1BQU1BOztJQUNJQyxNQUFNQyx1QkFBZ0IsQ0FBQ0MsZUFBZSxDQUFDO0lBRXZELFlBQW1CLEFBQWlCQyxLQUFhLENBQUU7YUFBZkEsUUFBQUE7SUFBZ0I7SUFFN0NDLFFBQXNCO1FBQzVCLE9BQU87WUFDTjtnQkFDQ0MsVUFBVTtnQkFDVkMsU0FBU0MsS0FBS0MsU0FBUyxDQUN0QjtvQkFDQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUNMLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQztvQkFDakUseUJBQXlCO2dCQUMxQixHQUNBLE1BQ0E7WUFFRjtTQUNBO0lBQ0Y7QUFDRCJ9
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "ScaffoldService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ScaffoldService;
9
+ }
10
+ });
11
+ async function scaffold(workspace, cliOptions, features) {
12
+ const options = await getAllOptions(workspace, cliOptions, features);
13
+ // Features mutate workspace models first, then workspace renders to disk.
14
+ await scaffoldFeatures(workspace, options, features);
15
+ await scaffoldWorkspace(workspace, options);
16
+ // Post-write phase: install deps, print final messages, etc.
17
+ await finalizeFeatures(workspace, options, features);
18
+ }
19
+ async function scaffoldWorkspace(workspace, _options) {
20
+ await workspace.scaffold();
21
+ }
22
+ /**
23
+ * Iterate features in order, calling `getOptions` on each.
24
+ * Each feature receives the running merged options so later features can
25
+ * branch on decisions made by earlier ones (e.g. database choice affects auth).
26
+ * Results are shallow-merged, so features only need to return what they own.
27
+ */ async function getAllOptions(workspace, cliOptions, features) {
28
+ let options = {
29
+ ...cliOptions
30
+ };
31
+ for (const feature of features){
32
+ const featureOptions = await feature.getOptions(workspace, options);
33
+ options = {
34
+ ...options,
35
+ ...featureOptions
36
+ };
37
+ }
38
+ return options;
39
+ }
40
+ /**
41
+ * Iterate features in order, calling `scaffold` with the fully-resolved options.
42
+ * All option-gathering is complete before any scaffolding begins.
43
+ */ async function scaffoldFeatures(workspace, options, features) {
44
+ for (const feature of features){
45
+ await feature.scaffold(workspace, options);
46
+ }
47
+ }
48
+ /**
49
+ * Iterate features in order, calling `finalize` on each (if defined).
50
+ * All files are on disk by this point.
51
+ */ async function finalizeFeatures(workspace, options, features) {
52
+ for (const feature of features){
53
+ if (feature.finalize) {
54
+ await feature.finalize(workspace, options);
55
+ }
56
+ }
57
+ }
58
+ const ScaffoldService = {
59
+ scaffold
60
+ };
61
+
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvc2VydmljZXMvc2NhZmZvbGQuc2VydmljZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVNjYWZmb2xkIH0gZnJvbSBcIi4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5cbi8qKlxuICogQSBmZWF0dXJlIGhhcyB0aHJlZSByZXNwb25zaWJpbGl0aWVzOlxuICogIDEuIGBnZXRPcHRpb25zYCDigJQgcmVzb2x2ZSBwcm92aWRlciBzZWxlY3Rpb24gYW5kIGFueSBmb2xsb3ctdXAgcXVlc3Rpb25zLlxuICogICAgIFJlY2VpdmVzIHRoZSBvcHRpb25zIGNvbGxlY3RlZCBzbyBmYXI7IHJldHVybnMgb25seSB0aGUga2V5cyBpdCBvd25zLlxuICogICAgIFNob3J0LWNpcmN1aXRzIGlmIHRoZSBjYWxsZXIgYWxyZWFkeSBzdXBwbGllZCB0aG9zZSBrZXlzIHZpYSBDTEkgZmxhZ3MuXG4gKiAgMi4gYHNjYWZmb2xkYCDigJQgbXV0YXRlIHRoZSB3b3Jrc3BhY2UgbW9kZWxzIGFuZC9vciB3cml0ZSBmaWxlcyB1c2luZyB0aGVcbiAqICAgICBmdWxseS1yZXNvbHZlZCBvcHRpb25zLiBDYWxsZWQgYWZ0ZXIgQUxMIGZlYXR1cmVzIGhhdmUgZ2F0aGVyZWQgb3B0aW9uc1xuICogICAgIGJ1dCBCRUZPUkUgZmlsZXMgYXJlIHdyaXR0ZW4gdG8gZGlzay5cbiAqICAzLiBgZmluYWxpemVgIChvcHRpb25hbCkg4oCUIHJ1biBwb3N0LXdyaXRlIGFjdGlvbnMgKGUuZy4gaW5zdGFsbCBkZXBlbmRlbmNpZXMpLlxuICogICAgIENhbGxlZCBhZnRlciB3b3Jrc3BhY2Uuc2NhZmZvbGQoKSBoYXMgZmx1c2hlZCBhbGwgZmlsZXMgdG8gZGlzay5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlPFRPcHRpb25zIGV4dGVuZHMgb2JqZWN0ID0gb2JqZWN0PiB7XG5cdGdldE9wdGlvbnMoXG5cdFx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0XHRjbGlPcHRpb25zOiBQYXJ0aWFsPFRPcHRpb25zPixcblx0KTogUHJvbWlzZTxQYXJ0aWFsPFRPcHRpb25zPj47XG5cdHNjYWZmb2xkKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsIG9wdGlvbnM6IFRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG5cdGZpbmFsaXplPyh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBvcHRpb25zOiBUT3B0aW9ucyk6IFByb21pc2U8dm9pZD4gfCB2b2lkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzY2FmZm9sZChcblx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0Y2xpT3B0aW9uczogb2JqZWN0LFxuXHRmZWF0dXJlczogRmVhdHVyZVtdLFxuKSB7XG5cdGNvbnN0IG9wdGlvbnMgPSBhd2FpdCBnZXRBbGxPcHRpb25zKHdvcmtzcGFjZSwgY2xpT3B0aW9ucywgZmVhdHVyZXMpO1xuXHQvLyBGZWF0dXJlcyBtdXRhdGUgd29ya3NwYWNlIG1vZGVscyBmaXJzdCwgdGhlbiB3b3Jrc3BhY2UgcmVuZGVycyB0byBkaXNrLlxuXHRhd2FpdCBzY2FmZm9sZEZlYXR1cmVzKHdvcmtzcGFjZSwgb3B0aW9ucywgZmVhdHVyZXMpO1xuXHRhd2FpdCBzY2FmZm9sZFdvcmtzcGFjZSh3b3Jrc3BhY2UsIG9wdGlvbnMpO1xuXHQvLyBQb3N0LXdyaXRlIHBoYXNlOiBpbnN0YWxsIGRlcHMsIHByaW50IGZpbmFsIG1lc3NhZ2VzLCBldGMuXG5cdGF3YWl0IGZpbmFsaXplRmVhdHVyZXMod29ya3NwYWNlLCBvcHRpb25zLCBmZWF0dXJlcyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkV29ya3NwYWNlKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsIF9vcHRpb25zOiBvYmplY3QpIHtcblx0YXdhaXQgd29ya3NwYWNlLnNjYWZmb2xkKCk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBmZWF0dXJlcyBpbiBvcmRlciwgY2FsbGluZyBgZ2V0T3B0aW9uc2Agb24gZWFjaC5cbiAqIEVhY2ggZmVhdHVyZSByZWNlaXZlcyB0aGUgcnVubmluZyBtZXJnZWQgb3B0aW9ucyBzbyBsYXRlciBmZWF0dXJlcyBjYW5cbiAqIGJyYW5jaCBvbiBkZWNpc2lvbnMgbWFkZSBieSBlYXJsaWVyIG9uZXMgKGUuZy4gZGF0YWJhc2UgY2hvaWNlIGFmZmVjdHMgYXV0aCkuXG4gKiBSZXN1bHRzIGFyZSBzaGFsbG93LW1lcmdlZCwgc28gZmVhdHVyZXMgb25seSBuZWVkIHRvIHJldHVybiB3aGF0IHRoZXkgb3duLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRBbGxPcHRpb25zKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRjbGlPcHRpb25zOiBvYmplY3QsXG5cdGZlYXR1cmVzOiBGZWF0dXJlW10sXG4pOiBQcm9taXNlPG9iamVjdD4ge1xuXHRsZXQgb3B0aW9ucyA9IHsgLi4uY2xpT3B0aW9ucyB9O1xuXHRmb3IgKGNvbnN0IGZlYXR1cmUgb2YgZmVhdHVyZXMpIHtcblx0XHRjb25zdCBmZWF0dXJlT3B0aW9ucyA9IGF3YWl0IGZlYXR1cmUuZ2V0T3B0aW9ucyh3b3Jrc3BhY2UsIG9wdGlvbnMpO1xuXHRcdG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMsIC4uLmZlYXR1cmVPcHRpb25zIH07XG5cdH1cblx0cmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBmZWF0dXJlcyBpbiBvcmRlciwgY2FsbGluZyBgc2NhZmZvbGRgIHdpdGggdGhlIGZ1bGx5LXJlc29sdmVkIG9wdGlvbnMuXG4gKiBBbGwgb3B0aW9uLWdhdGhlcmluZyBpcyBjb21wbGV0ZSBiZWZvcmUgYW55IHNjYWZmb2xkaW5nIGJlZ2lucy5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRGZWF0dXJlcyhcblx0d29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCxcblx0b3B0aW9uczogb2JqZWN0LFxuXHRmZWF0dXJlczogRmVhdHVyZVtdLFxuKTogUHJvbWlzZTx2b2lkPiB7XG5cdGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlcykge1xuXHRcdGF3YWl0IGZlYXR1cmUuc2NhZmZvbGQod29ya3NwYWNlLCBvcHRpb25zIGFzIG5ldmVyKTtcblx0fVxufVxuXG4vKipcbiAqIEl0ZXJhdGUgZmVhdHVyZXMgaW4gb3JkZXIsIGNhbGxpbmcgYGZpbmFsaXplYCBvbiBlYWNoIChpZiBkZWZpbmVkKS5cbiAqIEFsbCBmaWxlcyBhcmUgb24gZGlzayBieSB0aGlzIHBvaW50LlxuICovXG5hc3luYyBmdW5jdGlvbiBmaW5hbGl6ZUZlYXR1cmVzKFxuXHR3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLFxuXHRvcHRpb25zOiBvYmplY3QsXG5cdGZlYXR1cmVzOiBGZWF0dXJlW10sXG4pOiBQcm9taXNlPHZvaWQ+IHtcblx0Zm9yIChjb25zdCBmZWF0dXJlIG9mIGZlYXR1cmVzKSB7XG5cdFx0aWYgKGZlYXR1cmUuZmluYWxpemUpIHtcblx0XHRcdGF3YWl0IGZlYXR1cmUuZmluYWxpemUod29ya3NwYWNlLCBvcHRpb25zIGFzIG5ldmVyKTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IFNjYWZmb2xkU2VydmljZSA9IHsgc2NhZmZvbGQgfTtcbiJdLCJuYW1lcyI6WyJTY2FmZm9sZFNlcnZpY2UiLCJzY2FmZm9sZCIsIndvcmtzcGFjZSIsImNsaU9wdGlvbnMiLCJmZWF0dXJlcyIsIm9wdGlvbnMiLCJnZXRBbGxPcHRpb25zIiwic2NhZmZvbGRGZWF0dXJlcyIsInNjYWZmb2xkV29ya3NwYWNlIiwiZmluYWxpemVGZWF0dXJlcyIsIl9vcHRpb25zIiwiZmVhdHVyZSIsImZlYXR1cmVPcHRpb25zIiwiZ2V0T3B0aW9ucyIsImZpbmFsaXplIl0sIm1hcHBpbmdzIjoiOzs7OytCQXdGYUE7OztlQUFBQTs7O0FBbEViLGVBQWVDLFNBQ2RDLFNBQTRCLEVBQzVCQyxVQUFrQixFQUNsQkMsUUFBbUI7SUFFbkIsTUFBTUMsVUFBVSxNQUFNQyxjQUFjSixXQUFXQyxZQUFZQztJQUMzRCwwRUFBMEU7SUFDMUUsTUFBTUcsaUJBQWlCTCxXQUFXRyxTQUFTRDtJQUMzQyxNQUFNSSxrQkFBa0JOLFdBQVdHO0lBQ25DLDZEQUE2RDtJQUM3RCxNQUFNSSxpQkFBaUJQLFdBQVdHLFNBQVNEO0FBQzVDO0FBRUEsZUFBZUksa0JBQWtCTixTQUE0QixFQUFFUSxRQUFnQjtJQUM5RSxNQUFNUixVQUFVRCxRQUFRO0FBQ3pCO0FBRUE7Ozs7O0NBS0MsR0FDRCxlQUFlSyxjQUNkSixTQUE0QixFQUM1QkMsVUFBa0IsRUFDbEJDLFFBQW1CO0lBRW5CLElBQUlDLFVBQVU7UUFBRSxHQUFHRixVQUFVO0lBQUM7SUFDOUIsS0FBSyxNQUFNUSxXQUFXUCxTQUFVO1FBQy9CLE1BQU1RLGlCQUFpQixNQUFNRCxRQUFRRSxVQUFVLENBQUNYLFdBQVdHO1FBQzNEQSxVQUFVO1lBQUUsR0FBR0EsT0FBTztZQUFFLEdBQUdPLGNBQWM7UUFBQztJQUMzQztJQUNBLE9BQU9QO0FBQ1I7QUFFQTs7O0NBR0MsR0FDRCxlQUFlRSxpQkFDZEwsU0FBNEIsRUFDNUJHLE9BQWUsRUFDZkQsUUFBbUI7SUFFbkIsS0FBSyxNQUFNTyxXQUFXUCxTQUFVO1FBQy9CLE1BQU1PLFFBQVFWLFFBQVEsQ0FBQ0MsV0FBV0c7SUFDbkM7QUFDRDtBQUVBOzs7Q0FHQyxHQUNELGVBQWVJLGlCQUNkUCxTQUE0QixFQUM1QkcsT0FBZSxFQUNmRCxRQUFtQjtJQUVuQixLQUFLLE1BQU1PLFdBQVdQLFNBQVU7UUFDL0IsSUFBSU8sUUFBUUcsUUFBUSxFQUFFO1lBQ3JCLE1BQU1ILFFBQVFHLFFBQVEsQ0FBQ1osV0FBV0c7UUFDbkM7SUFDRDtBQUNEO0FBRU8sTUFBTUwsa0JBQWtCO0lBQUVDO0FBQVMifQ==
@@ -0,0 +1,169 @@
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 WEBAPI_PROJECT_DIR () {
13
+ return WEBAPI_PROJECT_DIR;
14
+ },
15
+ get scaffoldApi () {
16
+ return scaffoldApi;
17
+ }
18
+ });
19
+ const _nodepath = require("node:path");
20
+ const _composemodel = require("../models/compose.model.js");
21
+ const _configyamlmodel = require("../models/config-yaml.model.js");
22
+ const _const = require("../models/const.js");
23
+ const _containerimagemodel = require("../models/container-image.model.js");
24
+ const _devcontainermodel = require("../models/dev-container.model.js");
25
+ const _envfilemodel = require("../models/env-file.model.js");
26
+ const _gitignoremodel = require("../models/gitignore.model.js");
27
+ const _launchjsonmodel = require("../models/launch-json.model.js");
28
+ const _packagejsonmodel = require("../models/package-json.model.js");
29
+ const _projectmodel = require("../models/project.model.js");
30
+ const _tsconfigmodel = require("../models/tsconfig.model.js");
31
+ const _vscodesettingsmodel = require("../models/vscode-settings.model.js");
32
+ const _scaffoldservice = require("../services/scaffold.service.js");
33
+ const _authfeature = require("./features/auth.feature.js");
34
+ const _databasefeature = require("./features/database.feature.js");
35
+ const _finalizefeature = require("./features/finalize.feature.js");
36
+ const _postmanfeature = require("./features/postman.feature.js");
37
+ const _apipackagejsonmodel = require("./models/api-package-json.model.js");
38
+ const _controllersourcefilemodel = require("./models/controller-source-file.model.js");
39
+ const _mainsourcefilemodel = require("./models/main-source-file.model.js");
40
+ const _samplefilesmodel = require("./models/sample-files.model.js");
41
+ const WEBAPI_PROJECT_DIR = "projects/api";
42
+ const features = [
43
+ _databasefeature.DatabaseFeature,
44
+ _authfeature.AuthFeature,
45
+ _postmanfeature.PostmanFeature,
46
+ _finalizefeature.FinalizeFeature
47
+ ];
48
+ async function scaffoldApi(cliOptions) {
49
+ const targetDir = (0, _nodepath.resolve)(cliOptions.d ?? ".");
50
+ const workspace = createWorkspace(targetDir);
51
+ await _scaffoldservice.ScaffoldService.scaffold(workspace, cliOptions, features);
52
+ }
53
+ function createWorkspace(targetDir) {
54
+ const monoRepo = new _projectmodel.MonoRepoScaffold();
55
+ monoRepo.targetDir = targetDir;
56
+ const name = monoRepo.name;
57
+ const compose = new _composemodel.DockerCompose().addService("devcontainer", {
58
+ build: ".",
59
+ volumes: [
60
+ `\${HOME}/.npm/${name}:/home/node/.npm-config`,
61
+ "webapi-node-modules:/workspace/node_modules"
62
+ ],
63
+ environment: {
64
+ NPM_CONFIG_USERCONFIG: "/home/node/.npm-config/.npmrc"
65
+ },
66
+ command: "sleep infinity"
67
+ }).addVolume("webapi-node-modules");
68
+ const devContainer = new _devcontainermodel.DevContainer().addExtension("biomejs.biome", "vitest.explorer").setPostStartCommand("npm whoami 2>/dev/null || npm login").useCompose();
69
+ // Workspace-level models (repo root)
70
+ monoRepo.addModel(compose);
71
+ monoRepo.addModel(devContainer);
72
+ monoRepo.addModel(new _containerimagemodel.DockerfileModel());
73
+ monoRepo.addModel(new _vscodesettingsmodel.VSCodeSettings(name));
74
+ monoRepo.addModel(new _launchjsonmodel.LaunchJson());
75
+ monoRepo.addModel(new _tsconfigmodel.TsConfig());
76
+ monoRepo.addModel(new _packagejsonmodel.PackageJson(`${name}.api`));
77
+ monoRepo.addModel(new _configyamlmodel.ConfigYaml(_const.WELL_KNOWN_FILES.CONFIG_YAML, "config/config.yaml", ""));
78
+ monoRepo.addModel(new _configyamlmodel.ConfigYaml(_const.WELL_KNOWN_FILES.CONFIG_DEV_YAML, "config/config.dev.yaml", ""));
79
+ monoRepo.addModel(new _gitignoremodel.Gitignore());
80
+ monoRepo.addModel(new _envfilemodel.EnvFile());
81
+ // Biome formatter/linter config
82
+ monoRepo.addFile({
83
+ files: ()=>[
84
+ {
85
+ filePath: "biome.json",
86
+ content: JSON.stringify({
87
+ $schema: "https://biomejs.dev/schemas/2.0.0/schema.json",
88
+ files: {
89
+ includes: [
90
+ "**/*.ts",
91
+ "**/*.js",
92
+ "**/*.json",
93
+ "**/*.yml",
94
+ "**/*.yaml"
95
+ ]
96
+ },
97
+ assist: {
98
+ actions: {
99
+ source: {
100
+ organizeImports: "on"
101
+ }
102
+ }
103
+ },
104
+ vcs: {
105
+ enabled: true,
106
+ clientKind: "git",
107
+ useIgnoreFile: true
108
+ },
109
+ formatter: {
110
+ enabled: true,
111
+ formatWithErrors: true,
112
+ indentStyle: "tab",
113
+ lineWidth: 95
114
+ },
115
+ javascript: {
116
+ parser: {
117
+ unsafeParameterDecoratorsEnabled: true
118
+ }
119
+ },
120
+ linter: {
121
+ rules: {
122
+ style: {
123
+ useConsistentMemberAccessibility: {
124
+ level: "error",
125
+ options: {
126
+ accessibility: "explicit"
127
+ }
128
+ }
129
+ }
130
+ }
131
+ },
132
+ overrides: [
133
+ {
134
+ includes: [
135
+ "**/*.json"
136
+ ],
137
+ formatter: {
138
+ indentStyle: "space",
139
+ indentWidth: 2
140
+ }
141
+ }
142
+ ]
143
+ }, null, 2)
144
+ }
145
+ ]
146
+ });
147
+ // NPM token placeholder — gitignored, set manually after scaffold
148
+ monoRepo.addFile({
149
+ files: ()=>[
150
+ {
151
+ filePath: ".env.local",
152
+ content: "# Set your npm access token here (created with: npm token create)\nNPM_TOKEN=\n"
153
+ }
154
+ ]
155
+ });
156
+ // Project-level models (paths relative to projects/api)
157
+ const apiProject = new _projectmodel.ProjectScaffold(WEBAPI_PROJECT_DIR);
158
+ apiProject.addModel(new _apipackagejsonmodel.ApiPackageJson(name));
159
+ apiProject.addModel(new _mainsourcefilemodel.MainSourceFile(`${name}.api`));
160
+ apiProject.addModel(new _controllersourcefilemodel.ControllerSourceFile());
161
+ // SampleService + SampleConfig are part of the core scaffold — HelloController
162
+ // injects SampleService to demonstrate config-driven behaviour out of the box.
163
+ apiProject.addFile(new _samplefilesmodel.SampleConfigModel());
164
+ apiProject.addFile(new _samplefilesmodel.SampleServiceModel());
165
+ monoRepo.addProject(apiProject);
166
+ return monoRepo;
167
+ }
168
+
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNvbXBvc2UgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvc2UubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRG9ja2VyZmlsZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9jb250YWluZXItaW1hZ2UubW9kZWwuanNcIjtcbmltcG9ydCB7IERldkNvbnRhaW5lciB9IGZyb20gXCIuLi9tb2RlbHMvZGV2LWNvbnRhaW5lci5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRW52RmlsZSB9IGZyb20gXCIuLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IEdpdGlnbm9yZSB9IGZyb20gXCIuLi9tb2RlbHMvZ2l0aWdub3JlLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBMYXVuY2hKc29uIH0gZnJvbSBcIi4uL21vZGVscy9sYXVuY2gtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTW9ub1JlcG9TY2FmZm9sZCwgUHJvamVjdFNjYWZmb2xkIH0gZnJvbSBcIi4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBUc0NvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvdHNjb25maWcubW9kZWwuanNcIjtcbmltcG9ydCB7IFZTQ29kZVNldHRpbmdzIH0gZnJvbSBcIi4uL21vZGVscy92c2NvZGUtc2V0dGluZ3MubW9kZWwuanNcIjtcbmltcG9ydCB7IFNjYWZmb2xkU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9zY2FmZm9sZC5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBBdXRoRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL2F1dGguZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRGF0YWJhc2VGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZGF0YWJhc2UuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRmluYWxpemVGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZmluYWxpemUuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgUG9zdG1hbkZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9wb3N0bWFuLmZlYXR1cmUuanNcIjtcbmltcG9ydCB7IEFwaVBhY2thZ2VKc29uIH0gZnJvbSBcIi4vbW9kZWxzL2FwaS1wYWNrYWdlLWpzb24ubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbnRyb2xsZXJTb3VyY2VGaWxlIH0gZnJvbSBcIi4vbW9kZWxzL2NvbnRyb2xsZXItc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IE1haW5Tb3VyY2VGaWxlIH0gZnJvbSBcIi4vbW9kZWxzL21haW4tc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IFNhbXBsZUNvbmZpZ01vZGVsLCBTYW1wbGVTZXJ2aWNlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvc2FtcGxlLWZpbGVzLm1vZGVsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBXRUJBUElfUFJPSkVDVF9ESVIgPSBcInByb2plY3RzL2FwaVwiO1xuXG5leHBvcnQgdHlwZSBBcGlPcHRpb25zID0ge1xuXHRkPzogc3RyaW5nO1xuXHRhdXRoUHJvdmlkZXI/OiBzdHJpbmc7XG5cdGRhdGFiYXNlUHJvdmlkZXI/OiBcIm5vbmVcIiB8IFwicG9zdGdyZXMvdHlwZW9ybVwiO1xufTtcblxuY29uc3QgZmVhdHVyZXMgPSBbRGF0YWJhc2VGZWF0dXJlLCBBdXRoRmVhdHVyZSwgUG9zdG1hbkZlYXR1cmUsIEZpbmFsaXplRmVhdHVyZV07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzY2FmZm9sZEFwaShjbGlPcHRpb25zOiBBcGlPcHRpb25zKSB7XG5cdGNvbnN0IHRhcmdldERpciA9IHJlc29sdmUoY2xpT3B0aW9ucy5kID8/IFwiLlwiKTtcblx0Y29uc3Qgd29ya3NwYWNlID0gY3JlYXRlV29ya3NwYWNlKHRhcmdldERpcik7XG5cdGF3YWl0IFNjYWZmb2xkU2VydmljZS5zY2FmZm9sZCh3b3Jrc3BhY2UsIGNsaU9wdGlvbnMsIGZlYXR1cmVzKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlKHRhcmdldERpcjogc3RyaW5nKTogTW9ub1JlcG9TY2FmZm9sZCB7XG5cdGNvbnN0IG1vbm9SZXBvID0gbmV3IE1vbm9SZXBvU2NhZmZvbGQoKTtcblx0bW9ub1JlcG8udGFyZ2V0RGlyID0gdGFyZ2V0RGlyO1xuXHRjb25zdCBuYW1lID0gbW9ub1JlcG8ubmFtZTtcblxuXHRjb25zdCBjb21wb3NlID0gbmV3IERvY2tlckNvbXBvc2UoKVxuXHRcdC5hZGRTZXJ2aWNlKFwiZGV2Y29udGFpbmVyXCIsIHtcblx0XHRcdGJ1aWxkOiBcIi5cIixcblx0XHRcdHZvbHVtZXM6IFtcblx0XHRcdFx0YFxcJHtIT01FfS8ubnBtLyR7bmFtZX06L2hvbWUvbm9kZS8ubnBtLWNvbmZpZ2AsXG5cdFx0XHRcdFwid2ViYXBpLW5vZGUtbW9kdWxlczovd29ya3NwYWNlL25vZGVfbW9kdWxlc1wiLFxuXHRcdFx0XSxcblx0XHRcdGVudmlyb25tZW50OiB7IE5QTV9DT05GSUdfVVNFUkNPTkZJRzogXCIvaG9tZS9ub2RlLy5ucG0tY29uZmlnLy5ucG1yY1wiIH0sXG5cdFx0XHRjb21tYW5kOiBcInNsZWVwIGluZmluaXR5XCIsXG5cdFx0fSlcblx0XHQuYWRkVm9sdW1lKFwid2ViYXBpLW5vZGUtbW9kdWxlc1wiKTtcblxuXHRjb25zdCBkZXZDb250YWluZXIgPSBuZXcgRGV2Q29udGFpbmVyKClcblx0XHQuYWRkRXh0ZW5zaW9uKFwiYmlvbWVqcy5iaW9tZVwiLCBcInZpdGVzdC5leHBsb3JlclwiKVxuXHRcdC5zZXRQb3N0U3RhcnRDb21tYW5kKFwibnBtIHdob2FtaSAyPi9kZXYvbnVsbCB8fCBucG0gbG9naW5cIilcblx0XHQudXNlQ29tcG9zZSgpO1xuXG5cdC8vIFdvcmtzcGFjZS1sZXZlbCBtb2RlbHMgKHJlcG8gcm9vdClcblx0bW9ub1JlcG8uYWRkTW9kZWwoY29tcG9zZSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKGRldkNvbnRhaW5lcik7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBEb2NrZXJmaWxlTW9kZWwoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBWU0NvZGVTZXR0aW5ncyhuYW1lKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBMYXVuY2hKc29uKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgVHNDb25maWcoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBQYWNrYWdlSnNvbihgJHtuYW1lfS5hcGlgKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBDb25maWdZYW1sKFdFTExfS05PV05fRklMRVMuQ09ORklHX1lBTUwsIFwiY29uZmlnL2NvbmZpZy55YW1sXCIsIFwiXCIpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwoXG5cdFx0bmV3IENvbmZpZ1lhbWwoV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfREVWX1lBTUwsIFwiY29uZmlnL2NvbmZpZy5kZXYueWFtbFwiLCBcIlwiKSxcblx0KTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IEdpdGlnbm9yZSgpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IEVudkZpbGUoKSk7XG5cblx0Ly8gQmlvbWUgZm9ybWF0dGVyL2xpbnRlciBjb25maWdcblx0bW9ub1JlcG8uYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiYmlvbWUuanNvblwiLFxuXHRcdFx0XHRjb250ZW50OiBKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQkc2NoZW1hOiBcImh0dHBzOi8vYmlvbWVqcy5kZXYvc2NoZW1hcy8yLjAuMC9zY2hlbWEuanNvblwiLFxuXHRcdFx0XHRcdFx0ZmlsZXM6IHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZXM6IFtcIioqLyoudHNcIiwgXCIqKi8qLmpzXCIsIFwiKiovKi5qc29uXCIsIFwiKiovKi55bWxcIiwgXCIqKi8qLnlhbWxcIl0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXNzaXN0OiB7IGFjdGlvbnM6IHsgc291cmNlOiB7IG9yZ2FuaXplSW1wb3J0czogXCJvblwiIH0gfSB9LFxuXHRcdFx0XHRcdFx0dmNzOiB7IGVuYWJsZWQ6IHRydWUsIGNsaWVudEtpbmQ6IFwiZ2l0XCIsIHVzZUlnbm9yZUZpbGU6IHRydWUgfSxcblx0XHRcdFx0XHRcdGZvcm1hdHRlcjoge1xuXHRcdFx0XHRcdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRmb3JtYXRXaXRoRXJyb3JzOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbmRlbnRTdHlsZTogXCJ0YWJcIixcblx0XHRcdFx0XHRcdFx0bGluZVdpZHRoOiA5NSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRqYXZhc2NyaXB0OiB7IHBhcnNlcjogeyB1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZDogdHJ1ZSB9IH0sXG5cdFx0XHRcdFx0XHRsaW50ZXI6IHtcblx0XHRcdFx0XHRcdFx0cnVsZXM6IHtcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0dXNlQ29uc2lzdGVudE1lbWJlckFjY2Vzc2liaWxpdHk6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uczogeyBhY2Nlc3NpYmlsaXR5OiBcImV4cGxpY2l0XCIgfSxcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvdmVycmlkZXM6IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGluY2x1ZGVzOiBbXCIqKi8qLmpzb25cIl0sXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0dGVyOiB7IGluZGVudFN0eWxlOiBcInNwYWNlXCIsIGluZGVudFdpZHRoOiAyIH0sXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHQyLFxuXHRcdFx0XHQpLFxuXHRcdFx0fSxcblx0XHRdLFxuXHR9KTtcblxuXHQvLyBOUE0gdG9rZW4gcGxhY2Vob2xkZXIg4oCUIGdpdGlnbm9yZWQsIHNldCBtYW51YWxseSBhZnRlciBzY2FmZm9sZFxuXHRtb25vUmVwby5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZW52LmxvY2FsXCIsXG5cdFx0XHRcdGNvbnRlbnQ6XG5cdFx0XHRcdFx0XCIjIFNldCB5b3VyIG5wbSBhY2Nlc3MgdG9rZW4gaGVyZSAoY3JlYXRlZCB3aXRoOiBucG0gdG9rZW4gY3JlYXRlKVxcbk5QTV9UT0tFTj1cXG5cIixcblx0XHRcdH0sXG5cdFx0XSxcblx0fSk7XG5cblx0Ly8gUHJvamVjdC1sZXZlbCBtb2RlbHMgKHBhdGhzIHJlbGF0aXZlIHRvIHByb2plY3RzL2FwaSlcblx0Y29uc3QgYXBpUHJvamVjdCA9IG5ldyBQcm9qZWN0U2NhZmZvbGQoV0VCQVBJX1BST0pFQ1RfRElSKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgQXBpUGFja2FnZUpzb24obmFtZSkpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBNYWluU291cmNlRmlsZShgJHtuYW1lfS5hcGlgKSk7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IENvbnRyb2xsZXJTb3VyY2VGaWxlKCkpO1xuXG5cdC8vIFNhbXBsZVNlcnZpY2UgKyBTYW1wbGVDb25maWcgYXJlIHBhcnQgb2YgdGhlIGNvcmUgc2NhZmZvbGQg4oCUIEhlbGxvQ29udHJvbGxlclxuXHQvLyBpbmplY3RzIFNhbXBsZVNlcnZpY2UgdG8gZGVtb25zdHJhdGUgY29uZmlnLWRyaXZlbiBiZWhhdmlvdXIgb3V0IG9mIHRoZSBib3guXG5cdGFwaVByb2plY3QuYWRkRmlsZShuZXcgU2FtcGxlQ29uZmlnTW9kZWwoKSk7XG5cdGFwaVByb2plY3QuYWRkRmlsZShuZXcgU2FtcGxlU2VydmljZU1vZGVsKCkpO1xuXG5cdG1vbm9SZXBvLmFkZFByb2plY3QoYXBpUHJvamVjdCk7XG5cblx0cmV0dXJuIG1vbm9SZXBvO1xufVxuIl0sIm5hbWVzIjpbIldFQkFQSV9QUk9KRUNUX0RJUiIsInNjYWZmb2xkQXBpIiwiZmVhdHVyZXMiLCJEYXRhYmFzZUZlYXR1cmUiLCJBdXRoRmVhdHVyZSIsIlBvc3RtYW5GZWF0dXJlIiwiRmluYWxpemVGZWF0dXJlIiwiY2xpT3B0aW9ucyIsInRhcmdldERpciIsInJlc29sdmUiLCJkIiwid29ya3NwYWNlIiwiY3JlYXRlV29ya3NwYWNlIiwiU2NhZmZvbGRTZXJ2aWNlIiwic2NhZmZvbGQiLCJtb25vUmVwbyIsIk1vbm9SZXBvU2NhZmZvbGQiLCJuYW1lIiwiY29tcG9zZSIsIkRvY2tlckNvbXBvc2UiLCJhZGRTZXJ2aWNlIiwiYnVpbGQiLCJ2b2x1bWVzIiwiZW52aXJvbm1lbnQiLCJOUE1fQ09ORklHX1VTRVJDT05GSUciLCJjb21tYW5kIiwiYWRkVm9sdW1lIiwiZGV2Q29udGFpbmVyIiwiRGV2Q29udGFpbmVyIiwiYWRkRXh0ZW5zaW9uIiwic2V0UG9zdFN0YXJ0Q29tbWFuZCIsInVzZUNvbXBvc2UiLCJhZGRNb2RlbCIsIkRvY2tlcmZpbGVNb2RlbCIsIlZTQ29kZVNldHRpbmdzIiwiTGF1bmNoSnNvbiIsIlRzQ29uZmlnIiwiUGFja2FnZUpzb24iLCJDb25maWdZYW1sIiwiV0VMTF9LTk9XTl9GSUxFUyIsIkNPTkZJR19ZQU1MIiwiQ09ORklHX0RFVl9ZQU1MIiwiR2l0aWdub3JlIiwiRW52RmlsZSIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCIkc2NoZW1hIiwiaW5jbHVkZXMiLCJhc3Npc3QiLCJhY3Rpb25zIiwic291cmNlIiwib3JnYW5pemVJbXBvcnRzIiwidmNzIiwiZW5hYmxlZCIsImNsaWVudEtpbmQiLCJ1c2VJZ25vcmVGaWxlIiwiZm9ybWF0dGVyIiwiZm9ybWF0V2l0aEVycm9ycyIsImluZGVudFN0eWxlIiwibGluZVdpZHRoIiwiamF2YXNjcmlwdCIsInBhcnNlciIsInVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkIiwibGludGVyIiwicnVsZXMiLCJzdHlsZSIsInVzZUNvbnNpc3RlbnRNZW1iZXJBY2Nlc3NpYmlsaXR5IiwibGV2ZWwiLCJvcHRpb25zIiwiYWNjZXNzaWJpbGl0eSIsIm92ZXJyaWRlcyIsImluZGVudFdpZHRoIiwiYXBpUHJvamVjdCIsIlByb2plY3RTY2FmZm9sZCIsIkFwaVBhY2thZ2VKc29uIiwiTWFpblNvdXJjZUZpbGUiLCJDb250cm9sbGVyU291cmNlRmlsZSIsIlNhbXBsZUNvbmZpZ01vZGVsIiwiU2FtcGxlU2VydmljZU1vZGVsIiwiYWRkUHJvamVjdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUF1QmFBO2VBQUFBOztRQVVTQztlQUFBQTs7OzBCQWpDRTs4QkFDTTtpQ0FDSDt1QkFDTTtxQ0FDRDttQ0FDSDs4QkFDTDtnQ0FDRTtpQ0FDQztrQ0FDQzs4QkFDc0I7K0JBQ3pCO3FDQUNNO2lDQUNDOzZCQUNKO2lDQUNJO2lDQUNBO2dDQUNEO3FDQUNBOzJDQUNNO3FDQUNOO2tDQUN1QjtBQUUvQyxNQUFNRCxxQkFBcUI7QUFRbEMsTUFBTUUsV0FBVztJQUFDQyxnQ0FBZTtJQUFFQyx3QkFBVztJQUFFQyw4QkFBYztJQUFFQyxnQ0FBZTtDQUFDO0FBRXpFLGVBQWVMLFlBQVlNLFVBQXNCO0lBQ3ZELE1BQU1DLFlBQVlDLElBQUFBLGlCQUFPLEVBQUNGLFdBQVdHLENBQUMsSUFBSTtJQUMxQyxNQUFNQyxZQUFZQyxnQkFBZ0JKO0lBQ2xDLE1BQU1LLGdDQUFlLENBQUNDLFFBQVEsQ0FBQ0gsV0FBV0osWUFBWUw7QUFDdkQ7QUFFQSxTQUFTVSxnQkFBZ0JKLFNBQWlCO0lBQ3pDLE1BQU1PLFdBQVcsSUFBSUMsOEJBQWdCO0lBQ3JDRCxTQUFTUCxTQUFTLEdBQUdBO0lBQ3JCLE1BQU1TLE9BQU9GLFNBQVNFLElBQUk7SUFFMUIsTUFBTUMsVUFBVSxJQUFJQywyQkFBYSxHQUMvQkMsVUFBVSxDQUFDLGdCQUFnQjtRQUMzQkMsT0FBTztRQUNQQyxTQUFTO1lBQ1IsQ0FBQyxjQUFjLEVBQUVMLEtBQUssdUJBQXVCLENBQUM7WUFDOUM7U0FDQTtRQUNETSxhQUFhO1lBQUVDLHVCQUF1QjtRQUFnQztRQUN0RUMsU0FBUztJQUNWLEdBQ0NDLFNBQVMsQ0FBQztJQUVaLE1BQU1DLGVBQWUsSUFBSUMsK0JBQVksR0FDbkNDLFlBQVksQ0FBQyxpQkFBaUIsbUJBQzlCQyxtQkFBbUIsQ0FBQyx1Q0FDcEJDLFVBQVU7SUFFWixxQ0FBcUM7SUFDckNoQixTQUFTaUIsUUFBUSxDQUFDZDtJQUNsQkgsU0FBU2lCLFFBQVEsQ0FBQ0w7SUFDbEJaLFNBQVNpQixRQUFRLENBQUMsSUFBSUMsb0NBQWU7SUFDckNsQixTQUFTaUIsUUFBUSxDQUFDLElBQUlFLG1DQUFjLENBQUNqQjtJQUNyQ0YsU0FBU2lCLFFBQVEsQ0FBQyxJQUFJRywyQkFBVTtJQUNoQ3BCLFNBQVNpQixRQUFRLENBQUMsSUFBSUksdUJBQVE7SUFDOUJyQixTQUFTaUIsUUFBUSxDQUFDLElBQUlLLDZCQUFXLENBQUMsR0FBR3BCLEtBQUssSUFBSSxDQUFDO0lBQy9DRixTQUFTaUIsUUFBUSxDQUFDLElBQUlNLDJCQUFVLENBQUNDLHVCQUFnQixDQUFDQyxXQUFXLEVBQUUsc0JBQXNCO0lBQ3JGekIsU0FBU2lCLFFBQVEsQ0FDaEIsSUFBSU0sMkJBQVUsQ0FBQ0MsdUJBQWdCLENBQUNFLGVBQWUsRUFBRSwwQkFBMEI7SUFFNUUxQixTQUFTaUIsUUFBUSxDQUFDLElBQUlVLHlCQUFTO0lBQy9CM0IsU0FBU2lCLFFBQVEsQ0FBQyxJQUFJVyxxQkFBTztJQUU3QixnQ0FBZ0M7SUFDaEM1QixTQUFTNkIsT0FBTyxDQUFDO1FBQ2hCQyxPQUFPLElBQU07Z0JBQ1o7b0JBQ0NDLFVBQVU7b0JBQ1ZDLFNBQVNDLEtBQUtDLFNBQVMsQ0FDdEI7d0JBQ0NDLFNBQVM7d0JBQ1RMLE9BQU87NEJBQ05NLFVBQVU7Z0NBQUM7Z0NBQVc7Z0NBQVc7Z0NBQWE7Z0NBQVk7NkJBQVk7d0JBQ3ZFO3dCQUNBQyxRQUFROzRCQUFFQyxTQUFTO2dDQUFFQyxRQUFRO29DQUFFQyxpQkFBaUI7Z0NBQUs7NEJBQUU7d0JBQUU7d0JBQ3pEQyxLQUFLOzRCQUFFQyxTQUFTOzRCQUFNQyxZQUFZOzRCQUFPQyxlQUFlO3dCQUFLO3dCQUM3REMsV0FBVzs0QkFDVkgsU0FBUzs0QkFDVEksa0JBQWtCOzRCQUNsQkMsYUFBYTs0QkFDYkMsV0FBVzt3QkFDWjt3QkFDQUMsWUFBWTs0QkFBRUMsUUFBUTtnQ0FBRUMsa0NBQWtDOzRCQUFLO3dCQUFFO3dCQUNqRUMsUUFBUTs0QkFDUEMsT0FBTztnQ0FDTkMsT0FBTztvQ0FDTkMsa0NBQWtDO3dDQUNqQ0MsT0FBTzt3Q0FDUEMsU0FBUzs0Q0FBRUMsZUFBZTt3Q0FBVztvQ0FDdEM7Z0NBQ0Q7NEJBQ0Q7d0JBQ0Q7d0JBQ0FDLFdBQVc7NEJBQ1Y7Z0NBQ0N2QixVQUFVO29DQUFDO2lDQUFZO2dDQUN2QlMsV0FBVztvQ0FBRUUsYUFBYTtvQ0FBU2EsYUFBYTtnQ0FBRTs0QkFDbkQ7eUJBQ0E7b0JBQ0YsR0FDQSxNQUNBO2dCQUVGO2FBQ0E7SUFDRjtJQUVBLGtFQUFrRTtJQUNsRTVELFNBQVM2QixPQUFPLENBQUM7UUFDaEJDLE9BQU8sSUFBTTtnQkFDWjtvQkFDQ0MsVUFBVTtvQkFDVkMsU0FDQztnQkFDRjthQUNBO0lBQ0Y7SUFFQSx3REFBd0Q7SUFDeEQsTUFBTTZCLGFBQWEsSUFBSUMsNkJBQWUsQ0FBQzdFO0lBQ3ZDNEUsV0FBVzVDLFFBQVEsQ0FBQyxJQUFJOEMsbUNBQWMsQ0FBQzdEO0lBQ3ZDMkQsV0FBVzVDLFFBQVEsQ0FBQyxJQUFJK0MsbUNBQWMsQ0FBQyxHQUFHOUQsS0FBSyxJQUFJLENBQUM7SUFDcEQyRCxXQUFXNUMsUUFBUSxDQUFDLElBQUlnRCwrQ0FBb0I7SUFFNUMsK0VBQStFO0lBQy9FLCtFQUErRTtJQUMvRUosV0FBV2hDLE9BQU8sQ0FBQyxJQUFJcUMsbUNBQWlCO0lBQ3hDTCxXQUFXaEMsT0FBTyxDQUFDLElBQUlzQyxvQ0FBa0I7SUFFekNuRSxTQUFTb0UsVUFBVSxDQUFDUDtJQUVwQixPQUFPN0Q7QUFDUiJ9