@decohere/create 0.0.1-dev.21 → 0.0.1-dev.22

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.
@@ -0,0 +1,176 @@
1
+ import { WELL_KNOWN_FILES } from "./const.js";
2
+ export class DockerStep {
3
+ key;
4
+ content;
5
+ order;
6
+ constructor(key, content, order = 0){
7
+ this.key = key;
8
+ this.content = content;
9
+ this.order = order;
10
+ }
11
+ static run(key, command, order = 0) {
12
+ return new DockerStep(key, `RUN ${command}`, order);
13
+ }
14
+ static raw(key, content, order = 0) {
15
+ return new DockerStep(key, content, order);
16
+ }
17
+ static entrypoint(key, value, order = 0) {
18
+ const content = typeof value === "string" ? `ENTRYPOINT ${value}` : `ENTRYPOINT ${JSON.stringify(value)}`;
19
+ return new DockerStep(key, content, order);
20
+ }
21
+ }
22
+ const StepOrder = {
23
+ base: 1_000,
24
+ features: 5_000,
25
+ user: 9_000,
26
+ entrypoint: 10_000
27
+ };
28
+ const VSCODE_BOOTLOADER_FIX_BASH_SNIPPET = `if [[ -n "\${NODE_OPTIONS:-}" && "\${NODE_OPTIONS}" == *"bootloader.js"* ]]; then
29
+ _bootloader_path="$(printf '%s\\n' "$NODE_OPTIONS" | sed -n 's/.*--require[= ]\\([^[:space:]]*bootloader\\.js\\).*/\\1/p')"
30
+ if [[ -n "\${_bootloader_path}" && ! -f "\${_bootloader_path}" ]]; then
31
+ _stable_bootloader="$(find /vscode/vscode-server /home/node/.vscode-server/extensions -name "bootloader.js" -path "*/ms-vscode.js-debug/*" 2>/dev/null | head -1)"
32
+ if [[ -n "\${_stable_bootloader}" ]]; then
33
+ NODE_OPTIONS="\${NODE_OPTIONS//\${_bootloader_path}/\${_stable_bootloader}}"
34
+ else
35
+ NODE_OPTIONS="$(printf '%s\\n' "$NODE_OPTIONS" | sed -E 's#(^| )--require(=| )[[:graph:]]*bootloader\\.js( |$)# #g; s# +# #g; s#^ ##; s# $##')"
36
+ unset VSCODE_INSPECTOR_OPTIONS
37
+ fi
38
+ export NODE_OPTIONS
39
+ if [[ -z "$NODE_OPTIONS" ]]; then
40
+ unset NODE_OPTIONS
41
+ fi
42
+ fi
43
+ unset _bootloader_path _stable_bootloader
44
+ fi`;
45
+ export function withCommandHistory(options) {
46
+ const historyDir = options?.historyDir ?? "/commandhistory";
47
+ const historyFileName = options?.historyFileName ?? ".bash_history";
48
+ const order = options?.order ?? StepOrder.base;
49
+ const historyFile = `${historyDir}/${historyFileName}`;
50
+ return (dockerfile)=>{
51
+ dockerfile.addStep(DockerStep.run("history-dir", `mkdir -p ${historyDir} && touch ${historyFile}`, order)).addStep(DockerStep.raw("history-env", `ENV HISTFILE=${historyFile}`, order + 1));
52
+ };
53
+ }
54
+ export function withNodeUser(options) {
55
+ const username = options?.username ?? "node";
56
+ const includeUserInstruction = options?.includeUserInstruction ?? true;
57
+ const order = options?.order ?? StepOrder.features;
58
+ return (dockerfile)=>{
59
+ dockerfile.addStep(DockerStep.raw("arg-username", `ARG USERNAME=${username}`, order));
60
+ if (includeUserInstruction) {
61
+ dockerfile.addStep(DockerStep.raw("user", "USER ${USERNAME}", StepOrder.user));
62
+ }
63
+ };
64
+ }
65
+ export function withPnpm(options) {
66
+ const version = options?.version ?? "10";
67
+ const usernameExpr = options?.usernameExpr ?? "${USERNAME}";
68
+ const order = options?.order ?? StepOrder.features + 100;
69
+ return (dockerfile)=>{
70
+ dockerfile.addStep(DockerStep.run("pnpm-install", `npm install --global npm@latest && npm add --global pnpm@${version}`, order)).addStep(DockerStep.run("pnpm-config", `mkdir -p /home/${usernameExpr}/.config/pnpm /home/${usernameExpr}/.pnpm-store && chown -R ${usernameExpr}:${usernameExpr} /home/${usernameExpr}/.config /home/${usernameExpr}/.pnpm-store && printf "store-dir=/home/${usernameExpr}/.pnpm-store\\n" > /home/${usernameExpr}/.config/pnpm/rc`, order + 1));
71
+ };
72
+ }
73
+ export function withWorkspaceNodeModulesOwnership(options) {
74
+ const workspaceDir = options?.workspaceDir ?? "/workspace";
75
+ const usernameExpr = options?.usernameExpr ?? "${USERNAME}";
76
+ const order = options?.order ?? StepOrder.features + 200;
77
+ return (dockerfile)=>{
78
+ dockerfile.addStep(DockerStep.raw("workspace-node-modules", `RUN mkdir -p ${workspaceDir}/node_modules && chown ${usernameExpr}:${usernameExpr} ${workspaceDir}/node_modules`, order));
79
+ };
80
+ }
81
+ export function withVsCodeJsDebugBootloaderFix(options) {
82
+ const bashrcPath = options?.bashrcPath ?? "/home/${USERNAME}/.bashrc";
83
+ const order = options?.order ?? StepOrder.features + 300;
84
+ return (dockerfile)=>{
85
+ dockerfile.addStep(DockerStep.raw("vscode-bootloader-fix", `RUN cat <<'EOF' >> "${bashrcPath}"\n${VSCODE_BOOTLOADER_FIX_BASH_SNIPPET}\nEOF`, order));
86
+ };
87
+ }
88
+ export class DockerfileModel {
89
+ key = WELL_KNOWN_FILES.DOCKERFILE;
90
+ _steps = new Map();
91
+ _layerWriters = [];
92
+ _fromImage;
93
+ _layerCounter = 0;
94
+ constructor(baseImage){
95
+ this._fromImage = baseImage;
96
+ this.registerBaseLayers();
97
+ }
98
+ from(baseImage) {
99
+ this._fromImage = baseImage;
100
+ return this;
101
+ }
102
+ addLayer(layer, order = StepOrder.features) {
103
+ if (typeof layer === "string") {
104
+ const idx = ++this._layerCounter;
105
+ const key = `layer-run-${idx}`;
106
+ this._layerWriters.push((dockerfile)=>{
107
+ dockerfile.addStep(DockerStep.run(key, layer, order + idx));
108
+ });
109
+ return this;
110
+ }
111
+ this._layerWriters.push(layer);
112
+ return this;
113
+ }
114
+ addStep(step) {
115
+ this._steps.set(step.key, step);
116
+ return this;
117
+ }
118
+ removeStep(key) {
119
+ this._steps.delete(key);
120
+ return this;
121
+ }
122
+ entrypoint(value, order = StepOrder.entrypoint) {
123
+ this.addStep(DockerStep.entrypoint("entrypoint", value, order));
124
+ return this;
125
+ }
126
+ addRunStep(cmd) {
127
+ return this.addLayer(cmd);
128
+ }
129
+ build() {
130
+ for (const layerWriter of this._layerWriters){
131
+ layerWriter(this);
132
+ }
133
+ const lines = [
134
+ `FROM ${this._fromImage}`
135
+ ];
136
+ const sortedSteps = [
137
+ ...this._steps.values()
138
+ ].sort((left, right)=>{
139
+ if (left.order !== right.order) {
140
+ return left.order - right.order;
141
+ }
142
+ return left.key.localeCompare(right.key, "en");
143
+ });
144
+ for (const step of sortedSteps){
145
+ lines.push("", step.content);
146
+ }
147
+ return `${lines.join("\n")}\n`;
148
+ }
149
+ registerBaseLayers() {
150
+ // Generic base model intentionally has no default layers.
151
+ }
152
+ files() {
153
+ return [
154
+ {
155
+ filePath: "./Dockerfile",
156
+ content: this.build()
157
+ }
158
+ ];
159
+ }
160
+ }
161
+ export class DevContainerImageModel extends DockerfileModel {
162
+ registerBaseLayers() {
163
+ super.registerBaseLayers();
164
+ this.addLayer(withCommandHistory()).addLayer(withVsCodeJsDebugBootloaderFix());
165
+ }
166
+ files() {
167
+ return [
168
+ {
169
+ filePath: ".devcontainer/Dockerfile",
170
+ content: this.build()
171
+ }
172
+ ];
173
+ }
174
+ }
175
+
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvbW9kZWxzL2RvY2tlci1pbWFnZS5tb2RlbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4vY29uc3QuanNcIjtcbmltcG9ydCB0eXBlIHsgS2V5ZWRNb2RlbCwgU291cmNlRmlsZSB9IGZyb20gXCIuL3NvdXJjZS1maWxlLmpzXCI7XG5cbmV4cG9ydCB0eXBlIExheWVyV3JpdGVyID0gKGRvY2tlcmZpbGU6IERvY2tlcmZpbGVNb2RlbCkgPT4gdm9pZDtcblxuZXhwb3J0IGNsYXNzIERvY2tlclN0ZXAge1xuXHRwdWJsaWMgY29uc3RydWN0b3IoXG5cdFx0cHVibGljIHJlYWRvbmx5IGtleTogc3RyaW5nLFxuXHRcdHB1YmxpYyByZWFkb25seSBjb250ZW50OiBzdHJpbmcsXG5cdFx0cHVibGljIHJlYWRvbmx5IG9yZGVyID0gMCxcblx0KSB7fVxuXG5cdHB1YmxpYyBzdGF0aWMgcnVuKGtleTogc3RyaW5nLCBjb21tYW5kOiBzdHJpbmcsIG9yZGVyID0gMCkge1xuXHRcdHJldHVybiBuZXcgRG9ja2VyU3RlcChrZXksIGBSVU4gJHtjb21tYW5kfWAsIG9yZGVyKTtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgcmF3KGtleTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIG9yZGVyID0gMCkge1xuXHRcdHJldHVybiBuZXcgRG9ja2VyU3RlcChrZXksIGNvbnRlbnQsIG9yZGVyKTtcblx0fVxuXG5cdHB1YmxpYyBzdGF0aWMgZW50cnlwb2ludChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdLCBvcmRlciA9IDApIHtcblx0XHRjb25zdCBjb250ZW50ID1cblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHQ/IGBFTlRSWVBPSU5UICR7dmFsdWV9YFxuXHRcdFx0XHQ6IGBFTlRSWVBPSU5UICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWA7XG5cdFx0cmV0dXJuIG5ldyBEb2NrZXJTdGVwKGtleSwgY29udGVudCwgb3JkZXIpO1xuXHR9XG59XG5cbmNvbnN0IFN0ZXBPcmRlciA9IHtcblx0YmFzZTogMV8wMDAsXG5cdGZlYXR1cmVzOiA1XzAwMCxcblx0dXNlcjogOV8wMDAsXG5cdGVudHJ5cG9pbnQ6IDEwXzAwMCxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IFZTQ09ERV9CT09UTE9BREVSX0ZJWF9CQVNIX1NOSVBQRVQgPSBgaWYgW1sgLW4gXCJcXCR7Tk9ERV9PUFRJT05TOi19XCIgJiYgXCJcXCR7Tk9ERV9PUFRJT05TfVwiID09ICpcImJvb3Rsb2FkZXIuanNcIiogXV07IHRoZW5cbiAgICBfYm9vdGxvYWRlcl9wYXRoPVwiJChwcmludGYgJyVzXFxcXG4nIFwiJE5PREVfT1BUSU9OU1wiIHwgc2VkIC1uICdzLy4qLS1yZXF1aXJlWz0gXVxcXFwoW15bOnNwYWNlOl1dKmJvb3Rsb2FkZXJcXFxcLmpzXFxcXCkuKi9cXFxcMS9wJylcIlxuICAgIGlmIFtbIC1uIFwiXFwke19ib290bG9hZGVyX3BhdGh9XCIgJiYgISAtZiBcIlxcJHtfYm9vdGxvYWRlcl9wYXRofVwiIF1dOyB0aGVuXG4gICAgICAgIF9zdGFibGVfYm9vdGxvYWRlcj1cIiQoZmluZCAvdnNjb2RlL3ZzY29kZS1zZXJ2ZXIgL2hvbWUvbm9kZS8udnNjb2RlLXNlcnZlci9leHRlbnNpb25zIC1uYW1lIFwiYm9vdGxvYWRlci5qc1wiIC1wYXRoIFwiKi9tcy12c2NvZGUuanMtZGVidWcvKlwiIDI+L2Rldi9udWxsIHwgaGVhZCAtMSlcIlxuICAgICAgICBpZiBbWyAtbiBcIlxcJHtfc3RhYmxlX2Jvb3Rsb2FkZXJ9XCIgXV07IHRoZW5cbiAgICAgICAgICAgIE5PREVfT1BUSU9OUz1cIlxcJHtOT0RFX09QVElPTlMvL1xcJHtfYm9vdGxvYWRlcl9wYXRofS9cXCR7X3N0YWJsZV9ib290bG9hZGVyfX1cIlxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBOT0RFX09QVElPTlM9XCIkKHByaW50ZiAnJXNcXFxcbicgXCIkTk9ERV9PUFRJT05TXCIgfCBzZWQgLUUgJ3MjKF58ICktLXJlcXVpcmUoPXwgKVtbOmdyYXBoOl1dKmJvb3Rsb2FkZXJcXFxcLmpzKCB8JCkjICNnOyBzIyAgKyMgI2c7IHMjXiAjIzsgcyMgJCMjJylcIlxuICAgICAgICAgICAgdW5zZXQgVlNDT0RFX0lOU1BFQ1RPUl9PUFRJT05TXG4gICAgICAgIGZpXG4gICAgICAgIGV4cG9ydCBOT0RFX09QVElPTlNcbiAgICAgICAgaWYgW1sgLXogXCIkTk9ERV9PUFRJT05TXCIgXV07IHRoZW5cbiAgICAgICAgICAgIHVuc2V0IE5PREVfT1BUSU9OU1xuICAgICAgICBmaVxuICAgIGZpXG4gICAgdW5zZXQgX2Jvb3Rsb2FkZXJfcGF0aCBfc3RhYmxlX2Jvb3Rsb2FkZXJcbmZpYDtcblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhDb21tYW5kSGlzdG9yeShvcHRpb25zPzoge1xuXHRoaXN0b3J5RGlyPzogc3RyaW5nO1xuXHRoaXN0b3J5RmlsZU5hbWU/OiBzdHJpbmc7XG5cdG9yZGVyPzogbnVtYmVyO1xufSk6IExheWVyV3JpdGVyIHtcblx0Y29uc3QgaGlzdG9yeURpciA9IG9wdGlvbnM/Lmhpc3RvcnlEaXIgPz8gXCIvY29tbWFuZGhpc3RvcnlcIjtcblx0Y29uc3QgaGlzdG9yeUZpbGVOYW1lID0gb3B0aW9ucz8uaGlzdG9yeUZpbGVOYW1lID8/IFwiLmJhc2hfaGlzdG9yeVwiO1xuXHRjb25zdCBvcmRlciA9IG9wdGlvbnM/Lm9yZGVyID8/IFN0ZXBPcmRlci5iYXNlO1xuXHRjb25zdCBoaXN0b3J5RmlsZSA9IGAke2hpc3RvcnlEaXJ9LyR7aGlzdG9yeUZpbGVOYW1lfWA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZVxuXHRcdFx0LmFkZFN0ZXAoXG5cdFx0XHRcdERvY2tlclN0ZXAucnVuKFwiaGlzdG9yeS1kaXJcIiwgYG1rZGlyIC1wICR7aGlzdG9yeURpcn0gJiYgdG91Y2ggJHtoaXN0b3J5RmlsZX1gLCBvcmRlciksXG5cdFx0XHQpXG5cdFx0XHQuYWRkU3RlcChEb2NrZXJTdGVwLnJhdyhcImhpc3RvcnktZW52XCIsIGBFTlYgSElTVEZJTEU9JHtoaXN0b3J5RmlsZX1gLCBvcmRlciArIDEpKTtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhOb2RlVXNlcihvcHRpb25zPzoge1xuXHR1c2VybmFtZT86IHN0cmluZztcblx0aW5jbHVkZVVzZXJJbnN0cnVjdGlvbj86IGJvb2xlYW47XG5cdG9yZGVyPzogbnVtYmVyO1xufSk6IExheWVyV3JpdGVyIHtcblx0Y29uc3QgdXNlcm5hbWUgPSBvcHRpb25zPy51c2VybmFtZSA/PyBcIm5vZGVcIjtcblx0Y29uc3QgaW5jbHVkZVVzZXJJbnN0cnVjdGlvbiA9IG9wdGlvbnM/LmluY2x1ZGVVc2VySW5zdHJ1Y3Rpb24gPz8gdHJ1ZTtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXM7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKERvY2tlclN0ZXAucmF3KFwiYXJnLXVzZXJuYW1lXCIsIGBBUkcgVVNFUk5BTUU9JHt1c2VybmFtZX1gLCBvcmRlcikpO1xuXG5cdFx0aWYgKGluY2x1ZGVVc2VySW5zdHJ1Y3Rpb24pIHtcblx0XHRcdGRvY2tlcmZpbGUuYWRkU3RlcChEb2NrZXJTdGVwLnJhdyhcInVzZXJcIiwgXCJVU0VSICR7VVNFUk5BTUV9XCIsIFN0ZXBPcmRlci51c2VyKSk7XG5cdFx0fVxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBucG0ob3B0aW9ucz86IHtcblx0dmVyc2lvbj86IHN0cmluZztcblx0dXNlcm5hbWVFeHByPzogc3RyaW5nO1xuXHRvcmRlcj86IG51bWJlcjtcbn0pOiBMYXllcldyaXRlciB7XG5cdGNvbnN0IHZlcnNpb24gPSBvcHRpb25zPy52ZXJzaW9uID8/IFwiMTBcIjtcblx0Y29uc3QgdXNlcm5hbWVFeHByID0gb3B0aW9ucz8udXNlcm5hbWVFeHByID8/IFwiJHtVU0VSTkFNRX1cIjtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXMgKyAxMDA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZVxuXHRcdFx0LmFkZFN0ZXAoXG5cdFx0XHRcdERvY2tlclN0ZXAucnVuKFxuXHRcdFx0XHRcdFwicG5wbS1pbnN0YWxsXCIsXG5cdFx0XHRcdFx0YG5wbSBpbnN0YWxsIC0tZ2xvYmFsIG5wbUBsYXRlc3QgJiYgbnBtIGFkZCAtLWdsb2JhbCBwbnBtQCR7dmVyc2lvbn1gLFxuXHRcdFx0XHRcdG9yZGVyLFxuXHRcdFx0XHQpLFxuXHRcdFx0KVxuXHRcdFx0LmFkZFN0ZXAoXG5cdFx0XHRcdERvY2tlclN0ZXAucnVuKFxuXHRcdFx0XHRcdFwicG5wbS1jb25maWdcIixcblx0XHRcdFx0XHRgbWtkaXIgLXAgL2hvbWUvJHt1c2VybmFtZUV4cHJ9Ly5jb25maWcvcG5wbSAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLnBucG0tc3RvcmUgJiYgY2hvd24gLVIgJHt1c2VybmFtZUV4cHJ9OiR7dXNlcm5hbWVFeHByfSAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLmNvbmZpZyAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLnBucG0tc3RvcmUgJiYgcHJpbnRmIFwic3RvcmUtZGlyPS9ob21lLyR7dXNlcm5hbWVFeHByfS8ucG5wbS1zdG9yZVxcXFxuXCIgPiAvaG9tZS8ke3VzZXJuYW1lRXhwcn0vLmNvbmZpZy9wbnBtL3JjYCxcblx0XHRcdFx0XHRvcmRlciArIDEsXG5cdFx0XHRcdCksXG5cdFx0XHQpO1xuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFdvcmtzcGFjZU5vZGVNb2R1bGVzT3duZXJzaGlwKG9wdGlvbnM/OiB7XG5cdHdvcmtzcGFjZURpcj86IHN0cmluZztcblx0dXNlcm5hbWVFeHByPzogc3RyaW5nO1xuXHRvcmRlcj86IG51bWJlcjtcbn0pOiBMYXllcldyaXRlciB7XG5cdGNvbnN0IHdvcmtzcGFjZURpciA9IG9wdGlvbnM/LndvcmtzcGFjZURpciA/PyBcIi93b3Jrc3BhY2VcIjtcblx0Y29uc3QgdXNlcm5hbWVFeHByID0gb3B0aW9ucz8udXNlcm5hbWVFeHByID8/IFwiJHtVU0VSTkFNRX1cIjtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXMgKyAyMDA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKFxuXHRcdFx0RG9ja2VyU3RlcC5yYXcoXG5cdFx0XHRcdFwid29ya3NwYWNlLW5vZGUtbW9kdWxlc1wiLFxuXHRcdFx0XHRgUlVOIG1rZGlyIC1wICR7d29ya3NwYWNlRGlyfS9ub2RlX21vZHVsZXMgJiYgY2hvd24gJHt1c2VybmFtZUV4cHJ9OiR7dXNlcm5hbWVFeHByfSAke3dvcmtzcGFjZURpcn0vbm9kZV9tb2R1bGVzYCxcblx0XHRcdFx0b3JkZXIsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoVnNDb2RlSnNEZWJ1Z0Jvb3Rsb2FkZXJGaXgob3B0aW9ucz86IHtcblx0YmFzaHJjUGF0aD86IHN0cmluZztcblx0b3JkZXI/OiBudW1iZXI7XG59KTogTGF5ZXJXcml0ZXIge1xuXHRjb25zdCBiYXNocmNQYXRoID0gb3B0aW9ucz8uYmFzaHJjUGF0aCA/PyBcIi9ob21lLyR7VVNFUk5BTUV9Ly5iYXNocmNcIjtcblx0Y29uc3Qgb3JkZXIgPSBvcHRpb25zPy5vcmRlciA/PyBTdGVwT3JkZXIuZmVhdHVyZXMgKyAzMDA7XG5cblx0cmV0dXJuIChkb2NrZXJmaWxlKSA9PiB7XG5cdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKFxuXHRcdFx0RG9ja2VyU3RlcC5yYXcoXG5cdFx0XHRcdFwidnNjb2RlLWJvb3Rsb2FkZXItZml4XCIsXG5cdFx0XHRcdGBSVU4gY2F0IDw8J0VPRicgPj4gXCIke2Jhc2hyY1BhdGh9XCJcXG4ke1ZTQ09ERV9CT09UTE9BREVSX0ZJWF9CQVNIX1NOSVBQRVR9XFxuRU9GYCxcblx0XHRcdFx0b3JkZXIsXG5cdFx0XHQpLFxuXHRcdCk7XG5cdH07XG59XG5cbmV4cG9ydCBjbGFzcyBEb2NrZXJmaWxlTW9kZWwgaW1wbGVtZW50cyBLZXllZE1vZGVsIHtcblx0cHVibGljIHJlYWRvbmx5IGtleSA9IFdFTExfS05PV05fRklMRVMuRE9DS0VSRklMRTtcblx0cHJpdmF0ZSByZWFkb25seSBfc3RlcHMgPSBuZXcgTWFwPHN0cmluZywgRG9ja2VyU3RlcD4oKTtcblx0cHJpdmF0ZSByZWFkb25seSBfbGF5ZXJXcml0ZXJzOiBMYXllcldyaXRlcltdID0gW107XG5cdHByaXZhdGUgX2Zyb21JbWFnZTogc3RyaW5nO1xuXHRwcml2YXRlIF9sYXllckNvdW50ZXIgPSAwO1xuXG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihiYXNlSW1hZ2U6IHN0cmluZykge1xuXHRcdHRoaXMuX2Zyb21JbWFnZSA9IGJhc2VJbWFnZTtcblx0XHR0aGlzLnJlZ2lzdGVyQmFzZUxheWVycygpO1xuXHR9XG5cblx0cHVibGljIGZyb20oYmFzZUltYWdlOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9mcm9tSW1hZ2UgPSBiYXNlSW1hZ2U7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgYWRkTGF5ZXIobGF5ZXI6IExheWVyV3JpdGVyIHwgc3RyaW5nLCBvcmRlciA9IFN0ZXBPcmRlci5mZWF0dXJlcyk6IHRoaXMge1xuXHRcdGlmICh0eXBlb2YgbGF5ZXIgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGNvbnN0IGlkeCA9ICsrdGhpcy5fbGF5ZXJDb3VudGVyO1xuXHRcdFx0Y29uc3Qga2V5ID0gYGxheWVyLXJ1bi0ke2lkeH1gO1xuXHRcdFx0dGhpcy5fbGF5ZXJXcml0ZXJzLnB1c2goKGRvY2tlcmZpbGUpID0+IHtcblx0XHRcdFx0ZG9ja2VyZmlsZS5hZGRTdGVwKERvY2tlclN0ZXAucnVuKGtleSwgbGF5ZXIsIG9yZGVyICsgaWR4KSk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdHRoaXMuX2xheWVyV3JpdGVycy5wdXNoKGxheWVyKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBhZGRTdGVwKHN0ZXA6IERvY2tlclN0ZXApOiB0aGlzIHtcblx0XHR0aGlzLl9zdGVwcy5zZXQoc3RlcC5rZXksIHN0ZXApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIHJlbW92ZVN0ZXAoa2V5OiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLl9zdGVwcy5kZWxldGUoa2V5KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHB1YmxpYyBlbnRyeXBvaW50KHZhbHVlOiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXSwgb3JkZXIgPSBTdGVwT3JkZXIuZW50cnlwb2ludCk6IHRoaXMge1xuXHRcdHRoaXMuYWRkU3RlcChEb2NrZXJTdGVwLmVudHJ5cG9pbnQoXCJlbnRyeXBvaW50XCIsIHZhbHVlLCBvcmRlcikpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0cHVibGljIGFkZFJ1blN0ZXAoY21kOiBzdHJpbmcpOiB0aGlzIHtcblx0XHRyZXR1cm4gdGhpcy5hZGRMYXllcihjbWQpO1xuXHR9XG5cblx0cHVibGljIGJ1aWxkKCk6IHN0cmluZyB7XG5cdFx0Zm9yIChjb25zdCBsYXllcldyaXRlciBvZiB0aGlzLl9sYXllcldyaXRlcnMpIHtcblx0XHRcdGxheWVyV3JpdGVyKHRoaXMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGxpbmVzID0gW2BGUk9NICR7dGhpcy5fZnJvbUltYWdlfWBdO1xuXHRcdGNvbnN0IHNvcnRlZFN0ZXBzID0gWy4uLnRoaXMuX3N0ZXBzLnZhbHVlcygpXS5zb3J0KChsZWZ0LCByaWdodCkgPT4ge1xuXHRcdFx0aWYgKGxlZnQub3JkZXIgIT09IHJpZ2h0Lm9yZGVyKSB7XG5cdFx0XHRcdHJldHVybiBsZWZ0Lm9yZGVyIC0gcmlnaHQub3JkZXI7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbGVmdC5rZXkubG9jYWxlQ29tcGFyZShyaWdodC5rZXksIFwiZW5cIik7XG5cdFx0fSk7XG5cblx0XHRmb3IgKGNvbnN0IHN0ZXAgb2Ygc29ydGVkU3RlcHMpIHtcblx0XHRcdGxpbmVzLnB1c2goXCJcIiwgc3RlcC5jb250ZW50KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7bGluZXMuam9pbihcIlxcblwiKX1cXG5gO1xuXHR9XG5cblx0cHJvdGVjdGVkIHJlZ2lzdGVyQmFzZUxheWVycygpOiB2b2lkIHtcblx0XHQvLyBHZW5lcmljIGJhc2UgbW9kZWwgaW50ZW50aW9uYWxseSBoYXMgbm8gZGVmYXVsdCBsYXllcnMuXG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuL0RvY2tlcmZpbGVcIixcblx0XHRcdFx0Y29udGVudDogdGhpcy5idWlsZCgpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBEZXZDb250YWluZXJJbWFnZU1vZGVsIGV4dGVuZHMgRG9ja2VyZmlsZU1vZGVsIHtcblx0cHJvdGVjdGVkIG92ZXJyaWRlIHJlZ2lzdGVyQmFzZUxheWVycygpOiB2b2lkIHtcblx0XHRzdXBlci5yZWdpc3RlckJhc2VMYXllcnMoKTtcblx0XHR0aGlzLmFkZExheWVyKHdpdGhDb21tYW5kSGlzdG9yeSgpKS5hZGRMYXllcih3aXRoVnNDb2RlSnNEZWJ1Z0Jvb3Rsb2FkZXJGaXgoKSk7XG5cdH1cblxuXHRwdWJsaWMgZmlsZXMoKTogU291cmNlRmlsZVtdIHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZGV2Y29udGFpbmVyL0RvY2tlcmZpbGVcIixcblx0XHRcdFx0Y29udGVudDogdGhpcy5idWlsZCgpLFxuXHRcdFx0fSxcblx0XHRdO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiV0VMTF9LTk9XTl9GSUxFUyIsIkRvY2tlclN0ZXAiLCJrZXkiLCJjb250ZW50Iiwib3JkZXIiLCJydW4iLCJjb21tYW5kIiwicmF3IiwiZW50cnlwb2ludCIsInZhbHVlIiwiSlNPTiIsInN0cmluZ2lmeSIsIlN0ZXBPcmRlciIsImJhc2UiLCJmZWF0dXJlcyIsInVzZXIiLCJWU0NPREVfQk9PVExPQURFUl9GSVhfQkFTSF9TTklQUEVUIiwid2l0aENvbW1hbmRIaXN0b3J5Iiwib3B0aW9ucyIsImhpc3RvcnlEaXIiLCJoaXN0b3J5RmlsZU5hbWUiLCJoaXN0b3J5RmlsZSIsImRvY2tlcmZpbGUiLCJhZGRTdGVwIiwid2l0aE5vZGVVc2VyIiwidXNlcm5hbWUiLCJpbmNsdWRlVXNlckluc3RydWN0aW9uIiwid2l0aFBucG0iLCJ2ZXJzaW9uIiwidXNlcm5hbWVFeHByIiwid2l0aFdvcmtzcGFjZU5vZGVNb2R1bGVzT3duZXJzaGlwIiwid29ya3NwYWNlRGlyIiwid2l0aFZzQ29kZUpzRGVidWdCb290bG9hZGVyRml4IiwiYmFzaHJjUGF0aCIsIkRvY2tlcmZpbGVNb2RlbCIsIkRPQ0tFUkZJTEUiLCJfc3RlcHMiLCJNYXAiLCJfbGF5ZXJXcml0ZXJzIiwiX2Zyb21JbWFnZSIsIl9sYXllckNvdW50ZXIiLCJiYXNlSW1hZ2UiLCJyZWdpc3RlckJhc2VMYXllcnMiLCJmcm9tIiwiYWRkTGF5ZXIiLCJsYXllciIsImlkeCIsInB1c2giLCJzdGVwIiwic2V0IiwicmVtb3ZlU3RlcCIsImRlbGV0ZSIsImFkZFJ1blN0ZXAiLCJjbWQiLCJidWlsZCIsImxheWVyV3JpdGVyIiwibGluZXMiLCJzb3J0ZWRTdGVwcyIsInZhbHVlcyIsInNvcnQiLCJsZWZ0IiwicmlnaHQiLCJsb2NhbGVDb21wYXJlIiwiam9p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
package/es6/src/runner.js CHANGED
@@ -30,8 +30,27 @@ const BUILDER_IMAGE = `ghcr.io/decohere/scaffold:${CREATE_VERSION}`;
30
30
  }
31
31
  const volumes = [
32
32
  "-v",
33
- `${targetDir}:/workspace`
33
+ `${targetDir}:/workspace`,
34
+ "-v",
35
+ "/npm-cache"
34
36
  ];
37
+ const commandArgs = [
38
+ "webapi",
39
+ "-d",
40
+ "."
41
+ ];
42
+ if (opts.databaseProvider != null) {
43
+ commandArgs.push("--database", opts.databaseProvider);
44
+ }
45
+ if (opts.authProvider != null) {
46
+ commandArgs.push("--auth", opts.authProvider);
47
+ }
48
+ if (opts.postmanProvider != null) {
49
+ commandArgs.push("--postman", opts.postmanProvider);
50
+ }
51
+ if (opts.installDependencies != null) {
52
+ commandArgs.push("--install", opts.installDependencies);
53
+ }
35
54
  console.log(" Running scaffolding in a sandboxed container...\n");
36
55
  const result = spawnSync("docker", [
37
56
  "run",
@@ -40,16 +59,18 @@ const BUILDER_IMAGE = `ghcr.io/decohere/scaffold:${CREATE_VERSION}`;
40
59
  ...volumes,
41
60
  "-e",
42
61
  "DECOHERE_BUILDER=1",
62
+ "-e",
63
+ "NPM_CONFIG_CACHE=/npm-cache",
64
+ "-e",
65
+ "NPM_CONFIG_PREFER_OFFLINE=true",
43
66
  "-w",
44
67
  "/workspace",
45
68
  BUILDER_IMAGE,
46
- "webapi",
47
- "-d",
48
- "."
69
+ ...commandArgs
49
70
  ], {
50
71
  stdio: "inherit"
51
72
  });
52
73
  process.exit(result.status ?? 0);
53
74
  }
54
75
 
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcblxuY29uc3QgQlVJTERFUl9JTUFHRSA9IGBnaGNyLmlvL2RlY29oZXJlL3NjYWZmb2xkOiR7Q1JFQVRFX1ZFUlNJT059YDtcblxuLyoqXG4gKiBSdW4gdGhlIHNjYWZmb2xkIGluc2lkZSBhIHByZS1idWlsdCBEb2NrZXIgYnVpbGRlciBpbWFnZS5cbiAqXG4gKiBDYWxsZWQgd2hlbiBgREVDT0hFUkVfQlVJTERFUmAgaXMgbm90IHNldCDigJQgaS5lLiB0aGUgQ0xJIGlzIHJ1bm5pbmcgb24gdGhlXG4gKiBob3N0LCBvdXRzaWRlIHRoZSBjb250YWluZXIuIE1vdW50cyB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhcyBgL3dvcmtzcGFjZWAgc29cbiAqIHRoZSBzY2FmZm9sZGVkIGZpbGVzIGFyZSB3cml0dGVuIGJhY2sgdG8gdGhlIGhvc3QgZmlsZXN5c3RlbS5cbiAqXG4gKiBJZiBgfi8uY29uZmlnL2F1dGgwYCBleGlzdHMgb24gdGhlIGhvc3QgdGhlIGRpcmVjdG9yeSBpcyBhbHNvIG1vdW50ZWQgc29cbiAqIHRoZSBhdXRoMCBDTEkgaW5zaWRlIHRoZSBjb250YWluZXIgY2FuIHJldXNlIGV4aXN0aW5nIGNyZWRlbnRpYWxzIHNpbGVudGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuSW5CdWlsZGVyKG9wdHM6IHsgZD86IHN0cmluZyB9KTogbmV2ZXIge1xuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKG9wdHMuZCA/PyBcIi5cIik7XG5cdG1rZGlyU3luYyh0YXJnZXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdC8vIEVuc3VyZSBEb2NrZXIgaXMgYXZhaWxhYmxlLlxuXHR0cnkge1xuXHRcdGV4ZWNGaWxlU3luYyhcImRvY2tlclwiLCBbXCJpbmZvXCJdLCB7IHN0ZGlvOiBcInBpcGVcIiB9KTtcblx0fSBjYXRjaCB7XG5cdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFwiXFxuICBEb2NrZXIgaXMgcmVxdWlyZWQgdG8gc2NhZmZvbGQgYSBEZWNvaGVyZSBwcm9qZWN0LlxcblwiICtcblx0XHRcdFx0XCIgIEluc3RhbGwgRG9ja2VyIERlc2t0b3A6IGh0dHBzOi8vd3d3LmRvY2tlci5jb20vcHJvZHVjdHMvZG9ja2VyLWRlc2t0b3BcXG5cIixcblx0XHQpO1xuXHRcdHByb2Nlc3MuZXhpdCgxKTtcblx0fVxuXG5cdGNvbnN0IHZvbHVtZXM6IHN0cmluZ1tdID0gW1wiLXZcIiwgYCR7dGFyZ2V0RGlyfTovd29ya3NwYWNlYF07XG5cblx0Y29uc29sZS5sb2coXCIgIFJ1bm5pbmcgc2NhZmZvbGRpbmcgaW4gYSBzYW5kYm94ZWQgY29udGFpbmVyLi4uXFxuXCIpO1xuXG5cdGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhcblx0XHRcImRvY2tlclwiLFxuXHRcdFtcblx0XHRcdFwicnVuXCIsXG5cdFx0XHRcIi0tcm1cIixcblx0XHRcdFwiLWl0XCIsXG5cdFx0XHQuLi52b2x1bWVzLFxuXHRcdFx0XCItZVwiLFxuXHRcdFx0XCJERUNPSEVSRV9CVUlMREVSPTFcIixcblx0XHRcdFwiLXdcIixcblx0XHRcdFwiL3dvcmtzcGFjZVwiLFxuXHRcdFx0QlVJTERFUl9JTUFHRSxcblx0XHRcdFwid2ViYXBpXCIsXG5cdFx0XHRcIi1kXCIsXG5cdFx0XHRcIi5cIixcblx0XHRdLFxuXHRcdHsgc3RkaW86IFwiaW5oZXJpdFwiIH0sXG5cdCk7XG5cblx0cHJvY2Vzcy5leGl0KHJlc3VsdC5zdGF0dXMgPz8gMCk7XG59XG4iXSwibmFtZXMiOlsiZXhlY0ZpbGVTeW5jIiwic3Bhd25TeW5jIiwibWtkaXJTeW5jIiwicmVzb2x2ZSIsIkNSRUFURV9WRVJTSU9OIiwiQlVJTERFUl9JTUFHRSIsInJ1bkluQnVpbGRlciIsIm9wdHMiLCJ0YXJnZXREaXIiLCJkIiwicmVjdXJzaXZlIiwic3RkaW8iLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsInZvbHVtZXMiLCJsb2ciLCJyZXN1bHQiLCJzdGF0dXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFlBQVksRUFBRUMsU0FBUyxRQUFRLHFCQUFxQjtBQUM3RCxTQUFTQyxTQUFTLFFBQVEsVUFBVTtBQUNwQyxTQUFTQyxPQUFPLFFBQVEsWUFBWTtBQUNwQyxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUU5QyxNQUFNQyxnQkFBZ0IsQ0FBQywwQkFBMEIsRUFBRUQsZ0JBQWdCO0FBRW5FOzs7Ozs7Ozs7Q0FTQyxHQUNELE9BQU8sU0FBU0UsYUFBYUMsSUFBb0I7SUFDaEQsTUFBTUMsWUFBWUwsUUFBUUksS0FBS0UsQ0FBQyxJQUFJO0lBQ3BDUCxVQUFVTSxXQUFXO1FBQUVFLFdBQVc7SUFBSztJQUV2Qyw4QkFBOEI7SUFDOUIsSUFBSTtRQUNIVixhQUFhLFVBQVU7WUFBQztTQUFPLEVBQUU7WUFBRVcsT0FBTztRQUFPO0lBQ2xELEVBQUUsT0FBTTtRQUNQQyxRQUFRQyxLQUFLLENBQ1osNkRBQ0M7UUFFRkMsUUFBUUMsSUFBSSxDQUFDO0lBQ2Q7SUFFQSxNQUFNQyxVQUFvQjtRQUFDO1FBQU0sR0FBR1IsVUFBVSxXQUFXLENBQUM7S0FBQztJQUUzREksUUFBUUssR0FBRyxDQUFDO0lBRVosTUFBTUMsU0FBU2pCLFVBQ2QsVUFDQTtRQUNDO1FBQ0E7UUFDQTtXQUNHZTtRQUNIO1FBQ0E7UUFDQTtRQUNBO1FBQ0FYO1FBQ0E7UUFDQTtRQUNBO0tBQ0EsRUFDRDtRQUFFTSxPQUFPO0lBQVU7SUFHcEJHLFFBQVFDLElBQUksQ0FBQ0csT0FBT0MsTUFBTSxJQUFJO0FBQy9CIn0=
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvcnVubmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4ZWNGaWxlU3luYywgc3Bhd25TeW5jIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbWtkaXJTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBDUkVBVEVfVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmltcG9ydCB0eXBlIHsgQXBpT3B0aW9ucyB9IGZyb20gXCIuL3dlYmFwaS9jcmVhdGUtYXBpLmpzXCI7XG5cbmNvbnN0IEJVSUxERVJfSU1BR0UgPSBgZ2hjci5pby9kZWNvaGVyZS9zY2FmZm9sZDoke0NSRUFURV9WRVJTSU9OfWA7XG5cbi8qKlxuICogUnVuIHRoZSBzY2FmZm9sZCBpbnNpZGUgYSBwcmUtYnVpbHQgRG9ja2VyIGJ1aWxkZXIgaW1hZ2UuXG4gKlxuICogQ2FsbGVkIHdoZW4gYERFQ09IRVJFX0JVSUxERVJgIGlzIG5vdCBzZXQg4oCUIGkuZS4gdGhlIENMSSBpcyBydW5uaW5nIG9uIHRoZVxuICogaG9zdCwgb3V0c2lkZSB0aGUgY29udGFpbmVyLiBNb3VudHMgdGhlIHRhcmdldCBkaXJlY3RvcnkgYXMgYC93b3Jrc3BhY2VgIHNvXG4gKiB0aGUgc2NhZmZvbGRlZCBmaWxlcyBhcmUgd3JpdHRlbiBiYWNrIHRvIHRoZSBob3N0IGZpbGVzeXN0ZW0uXG4gKlxuICogSWYgYH4vLmNvbmZpZy9hdXRoMGAgZXhpc3RzIG9uIHRoZSBob3N0IHRoZSBkaXJlY3RvcnkgaXMgYWxzbyBtb3VudGVkIHNvXG4gKiB0aGUgYXV0aDAgQ0xJIGluc2lkZSB0aGUgY29udGFpbmVyIGNhbiByZXVzZSBleGlzdGluZyBjcmVkZW50aWFscyBzaWxlbnRseS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkluQnVpbGRlcihvcHRzOiBBcGlPcHRpb25zKTogbmV2ZXIge1xuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKG9wdHMuZCA/PyBcIi5cIik7XG5cdG1rZGlyU3luYyh0YXJnZXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdC8vIEVuc3VyZSBEb2NrZXIgaXMgYXZhaWxhYmxlLlxuXHR0cnkge1xuXHRcdGV4ZWNGaWxlU3luYyhcImRvY2tlclwiLCBbXCJpbmZvXCJdLCB7IHN0ZGlvOiBcInBpcGVcIiB9KTtcblx0fSBjYXRjaCB7XG5cdFx0Y29uc29sZS5lcnJvcihcblx0XHRcdFwiXFxuICBEb2NrZXIgaXMgcmVxdWlyZWQgdG8gc2NhZmZvbGQgYSBEZWNvaGVyZSBwcm9qZWN0LlxcblwiICtcblx0XHRcdFx0XCIgIEluc3RhbGwgRG9ja2VyIERlc2t0b3A6IGh0dHBzOi8vd3d3LmRvY2tlci5jb20vcHJvZHVjdHMvZG9ja2VyLWRlc2t0b3BcXG5cIixcblx0XHQpO1xuXHRcdHByb2Nlc3MuZXhpdCgxKTtcblx0fVxuXG5cdGNvbnN0IHZvbHVtZXM6IHN0cmluZ1tdID0gW1wiLXZcIiwgYCR7dGFyZ2V0RGlyfTovd29ya3NwYWNlYCwgXCItdlwiLCBcIi9ucG0tY2FjaGVcIl07XG5cblx0Y29uc3QgY29tbWFuZEFyZ3M6IHN0cmluZ1tdID0gW1wid2ViYXBpXCIsIFwiLWRcIiwgXCIuXCJdO1xuXHRpZiAob3B0cy5kYXRhYmFzZVByb3ZpZGVyICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1kYXRhYmFzZVwiLCBvcHRzLmRhdGFiYXNlUHJvdmlkZXIpO1xuXHR9XG5cdGlmIChvcHRzLmF1dGhQcm92aWRlciAhPSBudWxsKSB7XG5cdFx0Y29tbWFuZEFyZ3MucHVzaChcIi0tYXV0aFwiLCBvcHRzLmF1dGhQcm92aWRlcik7XG5cdH1cblx0aWYgKG9wdHMucG9zdG1hblByb3ZpZGVyICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1wb3N0bWFuXCIsIG9wdHMucG9zdG1hblByb3ZpZGVyKTtcblx0fVxuXHRpZiAob3B0cy5pbnN0YWxsRGVwZW5kZW5jaWVzICE9IG51bGwpIHtcblx0XHRjb21tYW5kQXJncy5wdXNoKFwiLS1pbnN0YWxsXCIsIG9wdHMuaW5zdGFsbERlcGVuZGVuY2llcyk7XG5cdH1cblxuXHRjb25zb2xlLmxvZyhcIiAgUnVubmluZyBzY2FmZm9sZGluZyBpbiBhIHNhbmRib3hlZCBjb250YWluZXIuLi5cXG5cIik7XG5cblx0Y29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKFxuXHRcdFwiZG9ja2VyXCIsXG5cdFx0W1xuXHRcdFx0XCJydW5cIixcblx0XHRcdFwiLS1ybVwiLFxuXHRcdFx0XCItaXRcIixcblx0XHRcdC4uLnZvbHVtZXMsXG5cdFx0XHRcIi1lXCIsXG5cdFx0XHRcIkRFQ09IRVJFX0JVSUxERVI9MVwiLFxuXHRcdFx0XCItZVwiLFxuXHRcdFx0XCJOUE1fQ09ORklHX0NBQ0hFPS9ucG0tY2FjaGVcIixcblx0XHRcdFwiLWVcIixcblx0XHRcdFwiTlBNX0NPTkZJR19QUkVGRVJfT0ZGTElORT10cnVlXCIsXG5cdFx0XHRcIi13XCIsXG5cdFx0XHRcIi93b3Jrc3BhY2VcIixcblx0XHRcdEJVSUxERVJfSU1BR0UsXG5cdFx0XHQuLi5jb21tYW5kQXJncyxcblx0XHRdLFxuXHRcdHsgc3RkaW86IFwiaW5oZXJpdFwiIH0sXG5cdCk7XG5cblx0cHJvY2Vzcy5leGl0KHJlc3VsdC5zdGF0dXMgPz8gMCk7XG59XG4iXSwibmFtZXMiOlsiZXhlY0ZpbGVTeW5jIiwic3Bhd25TeW5jIiwibWtkaXJTeW5jIiwicmVzb2x2ZSIsIkNSRUFURV9WRVJTSU9OIiwiQlVJTERFUl9JTUFHRSIsInJ1bkluQnVpbGRlciIsIm9wdHMiLCJ0YXJnZXREaXIiLCJkIiwicmVjdXJzaXZlIiwic3RkaW8iLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzIiwiZXhpdCIsInZvbHVtZXMiLCJjb21tYW5kQXJncyIsImRhdGFiYXNlUHJvdmlkZXIiLCJwdXNoIiwiYXV0aFByb3ZpZGVyIiwicG9zdG1hblByb3ZpZGVyIiwiaW5zdGFsbERlcGVuZGVuY2llcyIsImxvZyIsInJlc3VsdCIsInN0YXR1cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsWUFBWSxFQUFFQyxTQUFTLFFBQVEscUJBQXFCO0FBQzdELFNBQVNDLFNBQVMsUUFBUSxVQUFVO0FBQ3BDLFNBQVNDLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBRzlDLE1BQU1DLGdCQUFnQixDQUFDLDBCQUEwQixFQUFFRCxnQkFBZ0I7QUFFbkU7Ozs7Ozs7OztDQVNDLEdBQ0QsT0FBTyxTQUFTRSxhQUFhQyxJQUFnQjtJQUM1QyxNQUFNQyxZQUFZTCxRQUFRSSxLQUFLRSxDQUFDLElBQUk7SUFDcENQLFVBQVVNLFdBQVc7UUFBRUUsV0FBVztJQUFLO0lBRXZDLDhCQUE4QjtJQUM5QixJQUFJO1FBQ0hWLGFBQWEsVUFBVTtZQUFDO1NBQU8sRUFBRTtZQUFFVyxPQUFPO1FBQU87SUFDbEQsRUFBRSxPQUFNO1FBQ1BDLFFBQVFDLEtBQUssQ0FDWiw2REFDQztRQUVGQyxRQUFRQyxJQUFJLENBQUM7SUFDZDtJQUVBLE1BQU1DLFVBQW9CO1FBQUM7UUFBTSxHQUFHUixVQUFVLFdBQVcsQ0FBQztRQUFFO1FBQU07S0FBYTtJQUUvRSxNQUFNUyxjQUF3QjtRQUFDO1FBQVU7UUFBTTtLQUFJO0lBQ25ELElBQUlWLEtBQUtXLGdCQUFnQixJQUFJLE1BQU07UUFDbENELFlBQVlFLElBQUksQ0FBQyxjQUFjWixLQUFLVyxnQkFBZ0I7SUFDckQ7SUFDQSxJQUFJWCxLQUFLYSxZQUFZLElBQUksTUFBTTtRQUM5QkgsWUFBWUUsSUFBSSxDQUFDLFVBQVVaLEtBQUthLFlBQVk7SUFDN0M7SUFDQSxJQUFJYixLQUFLYyxlQUFlLElBQUksTUFBTTtRQUNqQ0osWUFBWUUsSUFBSSxDQUFDLGFBQWFaLEtBQUtjLGVBQWU7SUFDbkQ7SUFDQSxJQUFJZCxLQUFLZSxtQkFBbUIsSUFBSSxNQUFNO1FBQ3JDTCxZQUFZRSxJQUFJLENBQUMsYUFBYVosS0FBS2UsbUJBQW1CO0lBQ3ZEO0lBRUFWLFFBQVFXLEdBQUcsQ0FBQztJQUVaLE1BQU1DLFNBQVN2QixVQUNkLFVBQ0E7UUFDQztRQUNBO1FBQ0E7V0FDR2U7UUFDSDtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0FYO1dBQ0dZO0tBQ0gsRUFDRDtRQUFFTixPQUFPO0lBQVU7SUFHcEJHLFFBQVFDLElBQUksQ0FBQ1MsT0FBT0MsTUFBTSxJQUFJO0FBQy9CIn0=
@@ -2,7 +2,6 @@ import { resolve } from "node:path";
2
2
  import { DockerCompose } from "../models/compose.model.js";
3
3
  import { ConfigYaml } from "../models/config-yaml.model.js";
4
4
  import { WELL_KNOWN_FILES } from "../models/const.js";
5
- import { DockerfileModel } from "../models/container-image.model.js";
6
5
  import { DevContainer } from "../models/dev-container.model.js";
7
6
  import { EnvFile } from "../models/env-file.model.js";
8
7
  import { Gitignore } from "../models/gitignore.model.js";
@@ -20,6 +19,7 @@ import { ApiPackageJson } from "./models/api-package-json.model.js";
20
19
  import { ControllerSourceFile } from "./models/controller-source-file.model.js";
21
20
  import { MainSourceFile } from "./models/main-source-file.model.js";
22
21
  import { SampleConfigModel, SampleServiceModel } from "./models/sample-files.model.js";
22
+ import { WebapiDevContainer } from "./models/webapi-image.model.js";
23
23
  export const WEBAPI_PROJECT_DIR = "projects/api";
24
24
  const features = [
25
25
  DatabaseFeature,
@@ -51,7 +51,7 @@ function createWorkspace(targetDir) {
51
51
  // Workspace-level models (repo root)
52
52
  monoRepo.addModel(compose);
53
53
  monoRepo.addModel(devContainer);
54
- monoRepo.addModel(new DockerfileModel());
54
+ monoRepo.addModel(new WebapiDevContainer());
55
55
  monoRepo.addModel(new VSCodeSettings(name));
56
56
  monoRepo.addModel(new LaunchJson());
57
57
  monoRepo.addModel(new TsConfig());
@@ -148,4 +148,4 @@ function createWorkspace(targetDir) {
148
148
  return monoRepo;
149
149
  }
150
150
 
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNvbXBvc2UgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvc2UubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRG9ja2VyZmlsZU1vZGVsIH0gZnJvbSBcIi4uL21vZGVscy9jb250YWluZXItaW1hZ2UubW9kZWwuanNcIjtcbmltcG9ydCB7IERldkNvbnRhaW5lciB9IGZyb20gXCIuLi9tb2RlbHMvZGV2LWNvbnRhaW5lci5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgRW52RmlsZSB9IGZyb20gXCIuLi9tb2RlbHMvZW52LWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IEdpdGlnbm9yZSB9IGZyb20gXCIuLi9tb2RlbHMvZ2l0aWdub3JlLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBMYXVuY2hKc29uIH0gZnJvbSBcIi4uL21vZGVscy9sYXVuY2gtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgUGFja2FnZUpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL3BhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTW9ub1JlcG9TY2FmZm9sZCwgUHJvamVjdFNjYWZmb2xkIH0gZnJvbSBcIi4uL21vZGVscy9wcm9qZWN0Lm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBUc0NvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvdHNjb25maWcubW9kZWwuanNcIjtcbmltcG9ydCB7IFZTQ29kZVNldHRpbmdzIH0gZnJvbSBcIi4uL21vZGVscy92c2NvZGUtc2V0dGluZ3MubW9kZWwuanNcIjtcbmltcG9ydCB7IFNjYWZmb2xkU2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy9zY2FmZm9sZC5zZXJ2aWNlLmpzXCI7XG5pbXBvcnQgeyBBdXRoRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL2F1dGguZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRGF0YWJhc2VGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZGF0YWJhc2UuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgRmluYWxpemVGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvZmluYWxpemUuZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgUG9zdG1hbkZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9wb3N0bWFuLmZlYXR1cmUuanNcIjtcbmltcG9ydCB7IEFwaVBhY2thZ2VKc29uIH0gZnJvbSBcIi4vbW9kZWxzL2FwaS1wYWNrYWdlLWpzb24ubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbnRyb2xsZXJTb3VyY2VGaWxlIH0gZnJvbSBcIi4vbW9kZWxzL2NvbnRyb2xsZXItc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IE1haW5Tb3VyY2VGaWxlIH0gZnJvbSBcIi4vbW9kZWxzL21haW4tc291cmNlLWZpbGUubW9kZWwuanNcIjtcbmltcG9ydCB7IFNhbXBsZUNvbmZpZ01vZGVsLCBTYW1wbGVTZXJ2aWNlTW9kZWwgfSBmcm9tIFwiLi9tb2RlbHMvc2FtcGxlLWZpbGVzLm1vZGVsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBXRUJBUElfUFJPSkVDVF9ESVIgPSBcInByb2plY3RzL2FwaVwiO1xuXG5leHBvcnQgdHlwZSBBcGlPcHRpb25zID0ge1xuXHRkPzogc3RyaW5nO1xuXHRhdXRoUHJvdmlkZXI/OiBzdHJpbmc7XG5cdGRhdGFiYXNlUHJvdmlkZXI/OiBcIm5vbmVcIiB8IFwicG9zdGdyZXMvdHlwZW9ybVwiO1xufTtcblxuY29uc3QgZmVhdHVyZXMgPSBbRGF0YWJhc2VGZWF0dXJlLCBBdXRoRmVhdHVyZSwgUG9zdG1hbkZlYXR1cmUsIEZpbmFsaXplRmVhdHVyZV07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzY2FmZm9sZEFwaShjbGlPcHRpb25zOiBBcGlPcHRpb25zKSB7XG5cdGNvbnN0IHRhcmdldERpciA9IHJlc29sdmUoY2xpT3B0aW9ucy5kID8/IFwiLlwiKTtcblx0Y29uc3Qgd29ya3NwYWNlID0gY3JlYXRlV29ya3NwYWNlKHRhcmdldERpcik7XG5cdGF3YWl0IFNjYWZmb2xkU2VydmljZS5zY2FmZm9sZCh3b3Jrc3BhY2UsIGNsaU9wdGlvbnMsIGZlYXR1cmVzKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV29ya3NwYWNlKHRhcmdldERpcjogc3RyaW5nKTogTW9ub1JlcG9TY2FmZm9sZCB7XG5cdGNvbnN0IG1vbm9SZXBvID0gbmV3IE1vbm9SZXBvU2NhZmZvbGQoKTtcblx0bW9ub1JlcG8udGFyZ2V0RGlyID0gdGFyZ2V0RGlyO1xuXHRjb25zdCBuYW1lID0gbW9ub1JlcG8ubmFtZTtcblxuXHRjb25zdCBjb21wb3NlID0gbmV3IERvY2tlckNvbXBvc2UoKVxuXHRcdC5hZGRTZXJ2aWNlKFwiZGV2Y29udGFpbmVyXCIsIHtcblx0XHRcdGJ1aWxkOiBcIi5cIixcblx0XHRcdHZvbHVtZXM6IFtcblx0XHRcdFx0YFxcJHtIT01FfS8ubnBtLyR7bmFtZX06L2hvbWUvbm9kZS8ubnBtLWNvbmZpZ2AsXG5cdFx0XHRcdFwid2ViYXBpLW5vZGUtbW9kdWxlczovd29ya3NwYWNlL25vZGVfbW9kdWxlc1wiLFxuXHRcdFx0XSxcblx0XHRcdGVudmlyb25tZW50OiB7IE5QTV9DT05GSUdfVVNFUkNPTkZJRzogXCIvaG9tZS9ub2RlLy5ucG0tY29uZmlnLy5ucG1yY1wiIH0sXG5cdFx0XHRjb21tYW5kOiBcInNsZWVwIGluZmluaXR5XCIsXG5cdFx0fSlcblx0XHQuYWRkVm9sdW1lKFwid2ViYXBpLW5vZGUtbW9kdWxlc1wiKTtcblxuXHRjb25zdCBkZXZDb250YWluZXIgPSBuZXcgRGV2Q29udGFpbmVyKClcblx0XHQuYWRkRXh0ZW5zaW9uKFwiYmlvbWVqcy5iaW9tZVwiLCBcInZpdGVzdC5leHBsb3JlclwiKVxuXHRcdC5zZXRQb3N0U3RhcnRDb21tYW5kKFwibnBtIHdob2FtaSAyPi9kZXYvbnVsbCB8fCBucG0gbG9naW5cIilcblx0XHQudXNlQ29tcG9zZSgpO1xuXG5cdC8vIFdvcmtzcGFjZS1sZXZlbCBtb2RlbHMgKHJlcG8gcm9vdClcblx0bW9ub1JlcG8uYWRkTW9kZWwoY29tcG9zZSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKGRldkNvbnRhaW5lcik7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBEb2NrZXJmaWxlTW9kZWwoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBWU0NvZGVTZXR0aW5ncyhuYW1lKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBMYXVuY2hKc29uKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgVHNDb25maWcoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBQYWNrYWdlSnNvbihgJHtuYW1lfS5hcGlgKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBDb25maWdZYW1sKFdFTExfS05PV05fRklMRVMuQ09ORklHX1lBTUwsIFwiY29uZmlnL2NvbmZpZy55YW1sXCIsIFwiXCIpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwoXG5cdFx0bmV3IENvbmZpZ1lhbWwoV0VMTF9LTk9XTl9GSUxFUy5DT05GSUdfREVWX1lBTUwsIFwiY29uZmlnL2NvbmZpZy5kZXYueWFtbFwiLCBcIlwiKSxcblx0KTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IEdpdGlnbm9yZSgpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IEVudkZpbGUoKSk7XG5cblx0Ly8gQmlvbWUgZm9ybWF0dGVyL2xpbnRlciBjb25maWdcblx0bW9ub1JlcG8uYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiYmlvbWUuanNvblwiLFxuXHRcdFx0XHRjb250ZW50OiBKU09OLnN0cmluZ2lmeShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQkc2NoZW1hOiBcImh0dHBzOi8vYmlvbWVqcy5kZXYvc2NoZW1hcy8yLjAuMC9zY2hlbWEuanNvblwiLFxuXHRcdFx0XHRcdFx0ZmlsZXM6IHtcblx0XHRcdFx0XHRcdFx0aW5jbHVkZXM6IFtcIioqLyoudHNcIiwgXCIqKi8qLmpzXCIsIFwiKiovKi5qc29uXCIsIFwiKiovKi55bWxcIiwgXCIqKi8qLnlhbWxcIl0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0YXNzaXN0OiB7IGFjdGlvbnM6IHsgc291cmNlOiB7IG9yZ2FuaXplSW1wb3J0czogXCJvblwiIH0gfSB9LFxuXHRcdFx0XHRcdFx0dmNzOiB7IGVuYWJsZWQ6IHRydWUsIGNsaWVudEtpbmQ6IFwiZ2l0XCIsIHVzZUlnbm9yZUZpbGU6IHRydWUgfSxcblx0XHRcdFx0XHRcdGZvcm1hdHRlcjoge1xuXHRcdFx0XHRcdFx0XHRlbmFibGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRmb3JtYXRXaXRoRXJyb3JzOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbmRlbnRTdHlsZTogXCJ0YWJcIixcblx0XHRcdFx0XHRcdFx0bGluZVdpZHRoOiA5NSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRqYXZhc2NyaXB0OiB7IHBhcnNlcjogeyB1bnNhZmVQYXJhbWV0ZXJEZWNvcmF0b3JzRW5hYmxlZDogdHJ1ZSB9IH0sXG5cdFx0XHRcdFx0XHRsaW50ZXI6IHtcblx0XHRcdFx0XHRcdFx0cnVsZXM6IHtcblx0XHRcdFx0XHRcdFx0XHRzdHlsZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0dXNlQ29uc2lzdGVudE1lbWJlckFjY2Vzc2liaWxpdHk6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bGV2ZWw6IFwiZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9uczogeyBhY2Nlc3NpYmlsaXR5OiBcImV4cGxpY2l0XCIgfSxcblx0XHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvdmVycmlkZXM6IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdGluY2x1ZGVzOiBbXCIqKi8qLmpzb25cIl0sXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybWF0dGVyOiB7IGluZGVudFN0eWxlOiBcInNwYWNlXCIsIGluZGVudFdpZHRoOiAyIH0sXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0bnVsbCxcblx0XHRcdFx0XHQyLFxuXHRcdFx0XHQpLFxuXHRcdFx0fSxcblx0XHRdLFxuXHR9KTtcblxuXHQvLyBOUE0gdG9rZW4gcGxhY2Vob2xkZXIg4oCUIGdpdGlnbm9yZWQsIHNldCBtYW51YWxseSBhZnRlciBzY2FmZm9sZFxuXHRtb25vUmVwby5hZGRGaWxlKHtcblx0XHRmaWxlczogKCkgPT4gW1xuXHRcdFx0e1xuXHRcdFx0XHRmaWxlUGF0aDogXCIuZW52LmxvY2FsXCIsXG5cdFx0XHRcdGNvbnRlbnQ6XG5cdFx0XHRcdFx0XCIjIFNldCB5b3VyIG5wbSBhY2Nlc3MgdG9rZW4gaGVyZSAoY3JlYXRlZCB3aXRoOiBucG0gdG9rZW4gY3JlYXRlKVxcbk5QTV9UT0tFTj1cXG5cIixcblx0XHRcdH0sXG5cdFx0XSxcblx0fSk7XG5cblx0Ly8gUHJvamVjdC1sZXZlbCBtb2RlbHMgKHBhdGhzIHJlbGF0aXZlIHRvIHByb2plY3RzL2FwaSlcblx0Y29uc3QgYXBpUHJvamVjdCA9IG5ldyBQcm9qZWN0U2NhZmZvbGQoV0VCQVBJX1BST0pFQ1RfRElSKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgQXBpUGFja2FnZUpzb24obmFtZSkpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBNYWluU291cmNlRmlsZShgJHtuYW1lfS5hcGlgKSk7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IENvbnRyb2xsZXJTb3VyY2VGaWxlKCkpO1xuXG5cdC8vIFNhbXBsZVNlcnZpY2UgKyBTYW1wbGVDb25maWcgYXJlIHBhcnQgb2YgdGhlIGNvcmUgc2NhZmZvbGQg4oCUIEhlbGxvQ29udHJvbGxlclxuXHQvLyBpbmplY3RzIFNhbXBsZVNlcnZpY2UgdG8gZGVtb25zdHJhdGUgY29uZmlnLWRyaXZlbiBiZWhhdmlvdXIgb3V0IG9mIHRoZSBib3guXG5cdGFwaVByb2plY3QuYWRkRmlsZShuZXcgU2FtcGxlQ29uZmlnTW9kZWwoKSk7XG5cdGFwaVByb2plY3QuYWRkRmlsZShuZXcgU2FtcGxlU2VydmljZU1vZGVsKCkpO1xuXG5cdG1vbm9SZXBvLmFkZFByb2plY3QoYXBpUHJvamVjdCk7XG5cblx0cmV0dXJuIG1vbm9SZXBvO1xufVxuIl0sIm5hbWVzIjpbInJlc29sdmUiLCJEb2NrZXJDb21wb3NlIiwiQ29uZmlnWWFtbCIsIldFTExfS05PV05fRklMRVMiLCJEb2NrZXJmaWxlTW9kZWwiLCJEZXZDb250YWluZXIiLCJFbnZGaWxlIiwiR2l0aWdub3JlIiwiTGF1bmNoSnNvbiIsIlBhY2thZ2VKc29uIiwiTW9ub1JlcG9TY2FmZm9sZCIsIlByb2plY3RTY2FmZm9sZCIsIlRzQ29uZmlnIiwiVlNDb2RlU2V0dGluZ3MiLCJTY2FmZm9sZFNlcnZpY2UiLCJBdXRoRmVhdHVyZSIsIkRhdGFiYXNlRmVhdHVyZSIsIkZpbmFsaXplRmVhdHVyZSIsIlBvc3RtYW5GZWF0dXJlIiwiQXBpUGFja2FnZUpzb24iLCJDb250cm9sbGVyU291cmNlRmlsZSIsIk1haW5Tb3VyY2VGaWxlIiwiU2FtcGxlQ29uZmlnTW9kZWwiLCJTYW1wbGVTZXJ2aWNlTW9kZWwiLCJXRUJBUElfUFJPSkVDVF9ESVIiLCJmZWF0dXJlcyIsInNjYWZmb2xkQXBpIiwiY2xpT3B0aW9ucyIsInRhcmdldERpciIsImQiLCJ3b3Jrc3BhY2UiLCJjcmVhdGVXb3Jrc3BhY2UiLCJzY2FmZm9sZCIsIm1vbm9SZXBvIiwibmFtZSIsImNvbXBvc2UiLCJhZGRTZXJ2aWNlIiwiYnVpbGQiLCJ2b2x1bWVzIiwiZW52aXJvbm1lbnQiLCJOUE1fQ09ORklHX1VTRVJDT05GSUciLCJjb21tYW5kIiwiYWRkVm9sdW1lIiwiZGV2Q29udGFpbmVyIiwiYWRkRXh0ZW5zaW9uIiwic2V0UG9zdFN0YXJ0Q29tbWFuZCIsInVzZUNvbXBvc2UiLCJhZGRNb2RlbCIsIkNPTkZJR19ZQU1MIiwiQ09ORklHX0RFVl9ZQU1MIiwiYWRkRmlsZSIsImZpbGVzIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsIiRzY2hlbWEiLCJpbmNsdWRlcyIsImFzc2lzdCIsImFjdGlvbnMiLCJzb3VyY2UiLCJvcmdhbml6ZUltcG9ydHMiLCJ2Y3MiLCJlbmFibGVkIiwiY2xpZW50S2luZCIsInVzZUlnbm9yZUZpbGUiLCJmb3JtYXR0ZXIiLCJmb3JtYXRXaXRoRXJyb3JzIiwiaW5kZW50U3R5bGUiLCJsaW5lV2lkdGgiLCJqYXZhc2NyaXB0IiwicGFyc2VyIiwidW5zYWZlUGFyYW1ldGVyRGVjb3JhdG9yc0VuYWJsZWQiLCJsaW50ZXIiLCJydWxlcyIsInN0eWxlIiwidXNlQ29uc2lzdGVudE1lbWJlckFjY2Vzc2liaWxpdHkiLCJsZXZlbCIsIm9wdGlvbnMiLCJhY2Nlc3NpYmlsaXR5Iiwib3ZlcnJpZGVzIiwiaW5kZW50V2lkdGgiLCJhcGlQcm9qZWN0IiwiYWRkUHJvamVjdCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsT0FBTyxRQUFRLFlBQVk7QUFDcEMsU0FBU0MsYUFBYSxRQUFRLDZCQUE2QjtBQUMzRCxTQUFTQyxVQUFVLFFBQVEsaUNBQWlDO0FBQzVELFNBQVNDLGdCQUFnQixRQUFRLHFCQUFxQjtBQUN0RCxTQUFTQyxlQUFlLFFBQVEscUNBQXFDO0FBQ3JFLFNBQVNDLFlBQVksUUFBUSxtQ0FBbUM7QUFDaEUsU0FBU0MsT0FBTyxRQUFRLDhCQUE4QjtBQUN0RCxTQUFTQyxTQUFTLFFBQVEsK0JBQStCO0FBQ3pELFNBQVNDLFVBQVUsUUFBUSxpQ0FBaUM7QUFDNUQsU0FBU0MsV0FBVyxRQUFRLGtDQUFrQztBQUM5RCxTQUFTQyxnQkFBZ0IsRUFBRUMsZUFBZSxRQUFRLDZCQUE2QjtBQUMvRSxTQUFTQyxRQUFRLFFBQVEsOEJBQThCO0FBQ3ZELFNBQVNDLGNBQWMsUUFBUSxxQ0FBcUM7QUFDcEUsU0FBU0MsZUFBZSxRQUFRLGtDQUFrQztBQUNsRSxTQUFTQyxXQUFXLFFBQVEsNkJBQTZCO0FBQ3pELFNBQVNDLGVBQWUsUUFBUSxpQ0FBaUM7QUFDakUsU0FBU0MsZUFBZSxRQUFRLGlDQUFpQztBQUNqRSxTQUFTQyxjQUFjLFFBQVEsZ0NBQWdDO0FBQy9ELFNBQVNDLGNBQWMsUUFBUSxxQ0FBcUM7QUFDcEUsU0FBU0Msb0JBQW9CLFFBQVEsMkNBQTJDO0FBQ2hGLFNBQVNDLGNBQWMsUUFBUSxxQ0FBcUM7QUFDcEUsU0FBU0MsaUJBQWlCLEVBQUVDLGtCQUFrQixRQUFRLGlDQUFpQztBQUV2RixPQUFPLE1BQU1DLHFCQUFxQixlQUFlO0FBUWpELE1BQU1DLFdBQVc7SUFBQ1Q7SUFBaUJEO0lBQWFHO0lBQWdCRDtDQUFnQjtBQUVoRixPQUFPLGVBQWVTLFlBQVlDLFVBQXNCO0lBQ3ZELE1BQU1DLFlBQVk1QixRQUFRMkIsV0FBV0UsQ0FBQyxJQUFJO0lBQzFDLE1BQU1DLFlBQVlDLGdCQUFnQkg7SUFDbEMsTUFBTWQsZ0JBQWdCa0IsUUFBUSxDQUFDRixXQUFXSCxZQUFZRjtBQUN2RDtBQUVBLFNBQVNNLGdCQUFnQkgsU0FBaUI7SUFDekMsTUFBTUssV0FBVyxJQUFJdkI7SUFDckJ1QixTQUFTTCxTQUFTLEdBQUdBO0lBQ3JCLE1BQU1NLE9BQU9ELFNBQVNDLElBQUk7SUFFMUIsTUFBTUMsVUFBVSxJQUFJbEMsZ0JBQ2xCbUMsVUFBVSxDQUFDLGdCQUFnQjtRQUMzQkMsT0FBTztRQUNQQyxTQUFTO1lBQ1IsQ0FBQyxjQUFjLEVBQUVKLEtBQUssdUJBQXVCLENBQUM7WUFDOUM7U0FDQTtRQUNESyxhQUFhO1lBQUVDLHVCQUF1QjtRQUFnQztRQUN0RUMsU0FBUztJQUNWLEdBQ0NDLFNBQVMsQ0FBQztJQUVaLE1BQU1DLGVBQWUsSUFBSXRDLGVBQ3ZCdUMsWUFBWSxDQUFDLGlCQUFpQixtQkFDOUJDLG1CQUFtQixDQUFDLHVDQUNwQkMsVUFBVTtJQUVaLHFDQUFxQztJQUNyQ2IsU0FBU2MsUUFBUSxDQUFDWjtJQUNsQkYsU0FBU2MsUUFBUSxDQUFDSjtJQUNsQlYsU0FBU2MsUUFBUSxDQUFDLElBQUkzQztJQUN0QjZCLFNBQVNjLFFBQVEsQ0FBQyxJQUFJbEMsZUFBZXFCO0lBQ3JDRCxTQUFTYyxRQUFRLENBQUMsSUFBSXZDO0lBQ3RCeUIsU0FBU2MsUUFBUSxDQUFDLElBQUluQztJQUN0QnFCLFNBQVNjLFFBQVEsQ0FBQyxJQUFJdEMsWUFBWSxHQUFHeUIsS0FBSyxJQUFJLENBQUM7SUFDL0NELFNBQVNjLFFBQVEsQ0FBQyxJQUFJN0MsV0FBV0MsaUJBQWlCNkMsV0FBVyxFQUFFLHNCQUFzQjtJQUNyRmYsU0FBU2MsUUFBUSxDQUNoQixJQUFJN0MsV0FBV0MsaUJBQWlCOEMsZUFBZSxFQUFFLDBCQUEwQjtJQUU1RWhCLFNBQVNjLFFBQVEsQ0FBQyxJQUFJeEM7SUFDdEIwQixTQUFTYyxRQUFRLENBQUMsSUFBSXpDO0lBRXRCLGdDQUFnQztJQUNoQzJCLFNBQVNpQixPQUFPLENBQUM7UUFDaEJDLE9BQU8sSUFBTTtnQkFDWjtvQkFDQ0MsVUFBVTtvQkFDVkMsU0FBU0MsS0FBS0MsU0FBUyxDQUN0Qjt3QkFDQ0MsU0FBUzt3QkFDVEwsT0FBTzs0QkFDTk0sVUFBVTtnQ0FBQztnQ0FBVztnQ0FBVztnQ0FBYTtnQ0FBWTs2QkFBWTt3QkFDdkU7d0JBQ0FDLFFBQVE7NEJBQUVDLFNBQVM7Z0NBQUVDLFFBQVE7b0NBQUVDLGlCQUFpQjtnQ0FBSzs0QkFBRTt3QkFBRTt3QkFDekRDLEtBQUs7NEJBQUVDLFNBQVM7NEJBQU1DLFlBQVk7NEJBQU9DLGVBQWU7d0JBQUs7d0JBQzdEQyxXQUFXOzRCQUNWSCxTQUFTOzRCQUNUSSxrQkFBa0I7NEJBQ2xCQyxhQUFhOzRCQUNiQyxXQUFXO3dCQUNaO3dCQUNBQyxZQUFZOzRCQUFFQyxRQUFRO2dDQUFFQyxrQ0FBa0M7NEJBQUs7d0JBQUU7d0JBQ2pFQyxRQUFROzRCQUNQQyxPQUFPO2dDQUNOQyxPQUFPO29DQUNOQyxrQ0FBa0M7d0NBQ2pDQyxPQUFPO3dDQUNQQyxTQUFTOzRDQUFFQyxlQUFlO3dDQUFXO29DQUN0QztnQ0FDRDs0QkFDRDt3QkFDRDt3QkFDQUMsV0FBVzs0QkFDVjtnQ0FDQ3ZCLFVBQVU7b0NBQUM7aUNBQVk7Z0NBQ3ZCUyxXQUFXO29DQUFFRSxhQUFhO29DQUFTYSxhQUFhO2dDQUFFOzRCQUNuRDt5QkFDQTtvQkFDRixHQUNBLE1BQ0E7Z0JBRUY7YUFDQTtJQUNGO0lBRUEsa0VBQWtFO0lBQ2xFaEQsU0FBU2lCLE9BQU8sQ0FBQztRQUNoQkMsT0FBTyxJQUFNO2dCQUNaO29CQUNDQyxVQUFVO29CQUNWQyxTQUNDO2dCQUNGO2FBQ0E7SUFDRjtJQUVBLHdEQUF3RDtJQUN4RCxNQUFNNkIsYUFBYSxJQUFJdkUsZ0JBQWdCYTtJQUN2QzBELFdBQVduQyxRQUFRLENBQUMsSUFBSTVCLGVBQWVlO0lBQ3ZDZ0QsV0FBV25DLFFBQVEsQ0FBQyxJQUFJMUIsZUFBZSxHQUFHYSxLQUFLLElBQUksQ0FBQztJQUNwRGdELFdBQVduQyxRQUFRLENBQUMsSUFBSTNCO0lBRXhCLCtFQUErRTtJQUMvRSwrRUFBK0U7SUFDL0U4RCxXQUFXaEMsT0FBTyxDQUFDLElBQUk1QjtJQUN2QjRELFdBQVdoQyxPQUFPLENBQUMsSUFBSTNCO0lBRXZCVSxTQUFTa0QsVUFBVSxDQUFDRDtJQUVwQixPQUFPakQ7QUFDUiJ9
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2NyZWF0ZS1hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IERvY2tlckNvbXBvc2UgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbXBvc2UubW9kZWwuanNcIjtcbmltcG9ydCB7IENvbmZpZ1lhbWwgfSBmcm9tIFwiLi4vbW9kZWxzL2NvbmZpZy15YW1sLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBXRUxMX0tOT1dOX0ZJTEVTIH0gZnJvbSBcIi4uL21vZGVscy9jb25zdC5qc1wiO1xuaW1wb3J0IHsgRGV2Q29udGFpbmVyIH0gZnJvbSBcIi4uL21vZGVscy9kZXYtY29udGFpbmVyLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBFbnZGaWxlIH0gZnJvbSBcIi4uL21vZGVscy9lbnYtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgR2l0aWdub3JlIH0gZnJvbSBcIi4uL21vZGVscy9naXRpZ25vcmUubW9kZWwuanNcIjtcbmltcG9ydCB7IExhdW5jaEpzb24gfSBmcm9tIFwiLi4vbW9kZWxzL2xhdW5jaC1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBQYWNrYWdlSnNvbiB9IGZyb20gXCIuLi9tb2RlbHMvcGFja2FnZS1qc29uLm1vZGVsLmpzXCI7XG5pbXBvcnQgeyBNb25vUmVwb1NjYWZmb2xkLCBQcm9qZWN0U2NhZmZvbGQgfSBmcm9tIFwiLi4vbW9kZWxzL3Byb2plY3QubW9kZWwuanNcIjtcbmltcG9ydCB7IFRzQ29uZmlnIH0gZnJvbSBcIi4uL21vZGVscy90c2NvbmZpZy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgVlNDb2RlU2V0dGluZ3MgfSBmcm9tIFwiLi4vbW9kZWxzL3ZzY29kZS1zZXR0aW5ncy5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2NhZmZvbGRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcbmltcG9ydCB7IEF1dGhGZWF0dXJlIH0gZnJvbSBcIi4vZmVhdHVyZXMvYXV0aC5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBEYXRhYmFzZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9kYXRhYmFzZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBGaW5hbGl6ZUZlYXR1cmUgfSBmcm9tIFwiLi9mZWF0dXJlcy9maW5hbGl6ZS5mZWF0dXJlLmpzXCI7XG5pbXBvcnQgeyBQb3N0bWFuRmVhdHVyZSB9IGZyb20gXCIuL2ZlYXR1cmVzL3Bvc3RtYW4uZmVhdHVyZS5qc1wiO1xuaW1wb3J0IHsgQXBpUGFja2FnZUpzb24gfSBmcm9tIFwiLi9tb2RlbHMvYXBpLXBhY2thZ2UtanNvbi5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgQ29udHJvbGxlclNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvY29udHJvbGxlci1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgTWFpblNvdXJjZUZpbGUgfSBmcm9tIFwiLi9tb2RlbHMvbWFpbi1zb3VyY2UtZmlsZS5tb2RlbC5qc1wiO1xuaW1wb3J0IHsgU2FtcGxlQ29uZmlnTW9kZWwsIFNhbXBsZVNlcnZpY2VNb2RlbCB9IGZyb20gXCIuL21vZGVscy9zYW1wbGUtZmlsZXMubW9kZWwuanNcIjtcbmltcG9ydCB7IFdlYmFwaURldkNvbnRhaW5lciB9IGZyb20gXCIuL21vZGVscy93ZWJhcGktaW1hZ2UubW9kZWwuanNcIjtcblxuZXhwb3J0IGNvbnN0IFdFQkFQSV9QUk9KRUNUX0RJUiA9IFwicHJvamVjdHMvYXBpXCI7XG5cbmV4cG9ydCB0eXBlIEFwaU9wdGlvbnMgPSB7XG5cdGQ/OiBzdHJpbmc7XG5cdGF1dGhQcm92aWRlcj86IFwiYXV0aDBcIiB8IFwibm9uZVwiO1xuXHRkYXRhYmFzZVByb3ZpZGVyPzogXCJub25lXCIgfCBcInBvc3RncmVzL3R5cGVvcm1cIjtcblx0cG9zdG1hblByb3ZpZGVyPzogXCJhcGlcIiB8IFwibG9jYWxcIiB8IFwibm9uZVwiO1xuXHRpbnN0YWxsRGVwZW5kZW5jaWVzPzogXCJ5ZXNcIiB8IFwibm9cIjtcbn07XG5cbmNvbnN0IGZlYXR1cmVzID0gW0RhdGFiYXNlRmVhdHVyZSwgQXV0aEZlYXR1cmUsIFBvc3RtYW5GZWF0dXJlLCBGaW5hbGl6ZUZlYXR1cmVdO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGRBcGkoY2xpT3B0aW9uczogQXBpT3B0aW9ucykge1xuXHRjb25zdCB0YXJnZXREaXIgPSByZXNvbHZlKGNsaU9wdGlvbnMuZCA/PyBcIi5cIik7XG5cdGNvbnN0IHdvcmtzcGFjZSA9IGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXIpO1xuXHRhd2FpdCBTY2FmZm9sZFNlcnZpY2Uuc2NhZmZvbGQod29ya3NwYWNlLCBjbGlPcHRpb25zLCBmZWF0dXJlcyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVdvcmtzcGFjZSh0YXJnZXREaXI6IHN0cmluZyk6IE1vbm9SZXBvU2NhZmZvbGQge1xuXHRjb25zdCBtb25vUmVwbyA9IG5ldyBNb25vUmVwb1NjYWZmb2xkKCk7XG5cdG1vbm9SZXBvLnRhcmdldERpciA9IHRhcmdldERpcjtcblx0Y29uc3QgbmFtZSA9IG1vbm9SZXBvLm5hbWU7XG5cblx0Y29uc3QgY29tcG9zZSA9IG5ldyBEb2NrZXJDb21wb3NlKClcblx0XHQuYWRkU2VydmljZShcImRldmNvbnRhaW5lclwiLCB7XG5cdFx0XHRidWlsZDogXCIuXCIsXG5cdFx0XHR2b2x1bWVzOiBbXG5cdFx0XHRcdGBcXCR7SE9NRX0vLm5wbS8ke25hbWV9Oi9ob21lL25vZGUvLm5wbS1jb25maWdgLFxuXHRcdFx0XHRcIndlYmFwaS1ub2RlLW1vZHVsZXM6L3dvcmtzcGFjZS9ub2RlX21vZHVsZXNcIixcblx0XHRcdF0sXG5cdFx0XHRlbnZpcm9ubWVudDogeyBOUE1fQ09ORklHX1VTRVJDT05GSUc6IFwiL2hvbWUvbm9kZS8ubnBtLWNvbmZpZy8ubnBtcmNcIiB9LFxuXHRcdFx0Y29tbWFuZDogXCJzbGVlcCBpbmZpbml0eVwiLFxuXHRcdH0pXG5cdFx0LmFkZFZvbHVtZShcIndlYmFwaS1ub2RlLW1vZHVsZXNcIik7XG5cblx0Y29uc3QgZGV2Q29udGFpbmVyID0gbmV3IERldkNvbnRhaW5lcigpXG5cdFx0LmFkZEV4dGVuc2lvbihcImJpb21lanMuYmlvbWVcIiwgXCJ2aXRlc3QuZXhwbG9yZXJcIilcblx0XHQuc2V0UG9zdFN0YXJ0Q29tbWFuZChcIm5wbSB3aG9hbWkgMj4vZGV2L251bGwgfHwgbnBtIGxvZ2luXCIpXG5cdFx0LnVzZUNvbXBvc2UoKTtcblxuXHQvLyBXb3Jrc3BhY2UtbGV2ZWwgbW9kZWxzIChyZXBvIHJvb3QpXG5cdG1vbm9SZXBvLmFkZE1vZGVsKGNvbXBvc2UpO1xuXHRtb25vUmVwby5hZGRNb2RlbChkZXZDb250YWluZXIpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgV2ViYXBpRGV2Q29udGFpbmVyKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgVlNDb2RlU2V0dGluZ3MobmFtZSkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgTGF1bmNoSnNvbigpKTtcblx0bW9ub1JlcG8uYWRkTW9kZWwobmV3IFRzQ29uZmlnKCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgUGFja2FnZUpzb24oYCR7bmFtZX0uYXBpYCkpO1xuXHRtb25vUmVwby5hZGRNb2RlbChuZXcgQ29uZmlnWWFtbChXRUxMX0tOT1dOX0ZJTEVTLkNPTkZJR19ZQU1MLCBcImNvbmZpZy9jb25maWcueWFtbFwiLCBcIlwiKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKFxuXHRcdG5ldyBDb25maWdZYW1sKFdFTExfS05PV05fRklMRVMuQ09ORklHX0RFVl9ZQU1MLCBcImNvbmZpZy9jb25maWcuZGV2LnlhbWxcIiwgXCJcIiksXG5cdCk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBHaXRpZ25vcmUoKSk7XG5cdG1vbm9SZXBvLmFkZE1vZGVsKG5ldyBFbnZGaWxlKCkpO1xuXG5cdC8vIEJpb21lIGZvcm1hdHRlci9saW50ZXIgY29uZmlnXG5cdG1vbm9SZXBvLmFkZEZpbGUoe1xuXHRcdGZpbGVzOiAoKSA9PiBbXG5cdFx0XHR7XG5cdFx0XHRcdGZpbGVQYXRoOiBcImJpb21lLmpzb25cIixcblx0XHRcdFx0Y29udGVudDogSlNPTi5zdHJpbmdpZnkoXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0JHNjaGVtYTogXCJodHRwczovL2Jpb21lanMuZGV2L3NjaGVtYXMvMi4wLjAvc2NoZW1hLmpzb25cIixcblx0XHRcdFx0XHRcdGZpbGVzOiB7XG5cdFx0XHRcdFx0XHRcdGluY2x1ZGVzOiBbXCIqKi8qLnRzXCIsIFwiKiovKi5qc1wiLCBcIioqLyouanNvblwiLCBcIioqLyoueW1sXCIsIFwiKiovKi55YW1sXCJdLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdGFzc2lzdDogeyBhY3Rpb25zOiB7IHNvdXJjZTogeyBvcmdhbml6ZUltcG9ydHM6IFwib25cIiB9IH0gfSxcblx0XHRcdFx0XHRcdHZjczogeyBlbmFibGVkOiB0cnVlLCBjbGllbnRLaW5kOiBcImdpdFwiLCB1c2VJZ25vcmVGaWxlOiB0cnVlIH0sXG5cdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHtcblx0XHRcdFx0XHRcdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0Zm9ybWF0V2l0aEVycm9yczogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5kZW50U3R5bGU6IFwidGFiXCIsXG5cdFx0XHRcdFx0XHRcdGxpbmVXaWR0aDogOTUsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0amF2YXNjcmlwdDogeyBwYXJzZXI6IHsgdW5zYWZlUGFyYW1ldGVyRGVjb3JhdG9yc0VuYWJsZWQ6IHRydWUgfSB9LFxuXHRcdFx0XHRcdFx0bGludGVyOiB7XG5cdFx0XHRcdFx0XHRcdHJ1bGVzOiB7XG5cdFx0XHRcdFx0XHRcdFx0c3R5bGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHVzZUNvbnNpc3RlbnRNZW1iZXJBY2Nlc3NpYmlsaXR5OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGxldmVsOiBcImVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnM6IHsgYWNjZXNzaWJpbGl0eTogXCJleHBsaWNpdFwiIH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b3ZlcnJpZGVzOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRpbmNsdWRlczogW1wiKiovKi5qc29uXCJdLFxuXHRcdFx0XHRcdFx0XHRcdGZvcm1hdHRlcjogeyBpbmRlbnRTdHlsZTogXCJzcGFjZVwiLCBpbmRlbnRXaWR0aDogMiB9LFxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG51bGwsXG5cdFx0XHRcdFx0Mixcblx0XHRcdFx0KSxcblx0XHRcdH0sXG5cdFx0XSxcblx0fSk7XG5cblx0Ly8gTlBNIHRva2VuIHBsYWNlaG9sZGVyIOKAlCBnaXRpZ25vcmVkLCBzZXQgbWFudWFsbHkgYWZ0ZXIgc2NhZmZvbGRcblx0bW9ub1JlcG8uYWRkRmlsZSh7XG5cdFx0ZmlsZXM6ICgpID0+IFtcblx0XHRcdHtcblx0XHRcdFx0ZmlsZVBhdGg6IFwiLmVudi5sb2NhbFwiLFxuXHRcdFx0XHRjb250ZW50OlxuXHRcdFx0XHRcdFwiIyBTZXQgeW91ciBucG0gYWNjZXNzIHRva2VuIGhlcmUgKGNyZWF0ZWQgd2l0aDogbnBtIHRva2VuIGNyZWF0ZSlcXG5OUE1fVE9LRU49XFxuXCIsXG5cdFx0XHR9LFxuXHRcdF0sXG5cdH0pO1xuXG5cdC8vIFByb2plY3QtbGV2ZWwgbW9kZWxzIChwYXRocyByZWxhdGl2ZSB0byBwcm9qZWN0cy9hcGkpXG5cdGNvbnN0IGFwaVByb2plY3QgPSBuZXcgUHJvamVjdFNjYWZmb2xkKFdFQkFQSV9QUk9KRUNUX0RJUik7XG5cdGFwaVByb2plY3QuYWRkTW9kZWwobmV3IEFwaVBhY2thZ2VKc29uKG5hbWUpKTtcblx0YXBpUHJvamVjdC5hZGRNb2RlbChuZXcgTWFpblNvdXJjZUZpbGUoYCR7bmFtZX0uYXBpYCkpO1xuXHRhcGlQcm9qZWN0LmFkZE1vZGVsKG5ldyBDb250cm9sbGVyU291cmNlRmlsZSgpKTtcblxuXHQvLyBTYW1wbGVTZXJ2aWNlICsgU2FtcGxlQ29uZmlnIGFyZSBwYXJ0IG9mIHRoZSBjb3JlIHNjYWZmb2xkIOKAlCBIZWxsb0NvbnRyb2xsZXJcblx0Ly8gaW5qZWN0cyBTYW1wbGVTZXJ2aWNlIHRvIGRlbW9uc3RyYXRlIGNvbmZpZy1kcml2ZW4gYmVoYXZpb3VyIG91dCBvZiB0aGUgYm94LlxuXHRhcGlQcm9qZWN0LmFkZEZpbGUobmV3IFNhbXBsZUNvbmZpZ01vZGVsKCkpO1xuXHRhcGlQcm9qZWN0LmFkZEZpbGUobmV3IFNhbXBsZVNlcnZpY2VNb2RlbCgpKTtcblxuXHRtb25vUmVwby5hZGRQcm9qZWN0KGFwaVByb2plY3QpO1xuXG5cdHJldHVybiBtb25vUmVwbztcbn1cbiJdLCJuYW1lcyI6WyJyZXNvbHZlIiwiRG9ja2VyQ29tcG9zZSIsIkNvbmZpZ1lhbWwiLCJXRUxMX0tOT1dOX0ZJTEVTIiwiRGV2Q29udGFpbmVyIiwiRW52RmlsZSIsIkdpdGlnbm9yZSIsIkxhdW5jaEpzb24iLCJQYWNrYWdlSnNvbiIsIk1vbm9SZXBvU2NhZmZvbGQiLCJQcm9qZWN0U2NhZmZvbGQiLCJUc0NvbmZpZyIsIlZTQ29kZVNldHRpbmdzIiwiU2NhZmZvbGRTZXJ2aWNlIiwiQXV0aEZlYXR1cmUiLCJEYXRhYmFzZUZlYXR1cmUiLCJGaW5hbGl6ZUZlYXR1cmUiLCJQb3N0bWFuRmVhdHVyZSIsIkFwaVBhY2thZ2VKc29uIiwiQ29udHJvbGxlclNvdXJjZUZpbGUiLCJNYWluU291cmNlRmlsZSIsIlNhbXBsZUNvbmZpZ01vZGVsIiwiU2FtcGxlU2VydmljZU1vZGVsIiwiV2ViYXBpRGV2Q29udGFpbmVyIiwiV0VCQVBJX1BST0pFQ1RfRElSIiwiZmVhdHVyZXMiLCJzY2FmZm9sZEFwaSIsImNsaU9wdGlvbnMiLCJ0YXJnZXREaXIiLCJkIiwid29ya3NwYWNlIiwiY3JlYXRlV29ya3NwYWNlIiwic2NhZmZvbGQiLCJtb25vUmVwbyIsIm5hbWUiLCJjb21wb3NlIiwiYWRkU2VydmljZSIsImJ1aWxkIiwidm9sdW1lcyIsImVudmlyb25tZW50IiwiTlBNX0NPTkZJR19VU0VSQ09ORklHIiwiY29tbWFuZCIsImFkZFZvbHVtZSIsImRldkNvbnRhaW5lciIsImFkZEV4dGVuc2lvbiIsInNldFBvc3RTdGFydENvbW1hbmQiLCJ1c2VDb21wb3NlIiwiYWRkTW9kZWwiLCJDT05GSUdfWUFNTCIsIkNPTkZJR19ERVZfWUFNTCIsImFkZEZpbGUiLCJmaWxlcyIsImZpbGVQYXRoIiwiY29udGVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCIkc2NoZW1hIiwiaW5jbHVkZXMiLCJhc3Npc3QiLCJhY3Rpb25zIiwic291cmNlIiwib3JnYW5pemVJbXBvcnRzIiwidmNzIiwiZW5hYmxlZCIsImNsaWVudEtpbmQiLCJ1c2VJZ25vcmVGaWxlIiwiZm9ybWF0dGVyIiwiZm9ybWF0V2l0aEVycm9ycyIsImluZGVudFN0eWxlIiwibGluZVdpZHRoIiwiamF2YXNjcmlwdCIsInBhcnNlciIsInVuc2FmZVBhcmFtZXRlckRlY29yYXRvcnNFbmFibGVkIiwibGludGVyIiwicnVsZXMiLCJzdHlsZSIsInVzZUNvbnNpc3RlbnRNZW1iZXJBY2Nlc3NpYmlsaXR5IiwibGV2ZWwiLCJvcHRpb25zIiwiYWNjZXNzaWJpbGl0eSIsIm92ZXJyaWRlcyIsImluZGVudFdpZHRoIiwiYXBpUHJvamVjdCIsImFkZFByb2plY3QiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLGFBQWEsUUFBUSw2QkFBNkI7QUFDM0QsU0FBU0MsVUFBVSxRQUFRLGlDQUFpQztBQUM1RCxT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
@@ -3,15 +3,22 @@ import { ask } from "../../domain/prompt.js";
3
3
  // State resolved during scaffold(), consumed by finalize().
4
4
  let _pm = null;
5
5
  let _shouldInstall = true;
6
- async function getOptions(_workspace, _cliOptions) {
6
+ async function getOptions(_workspace, cliOptions) {
7
+ if (cliOptions.installDependencies != null) {
8
+ _shouldInstall = cliOptions.installDependencies === "yes";
9
+ }
7
10
  return {};
8
11
  }
9
- async function scaffold(workspace, _options) {
12
+ async function scaffold(workspace, options) {
10
13
  if (process.env.DECOHERE_BUILDER === "1") {
11
14
  _shouldInstall = false;
12
15
  return;
13
16
  }
14
17
  _pm = detectPackageManager(workspace.targetDir) ?? await promptForPackageManager();
18
+ if (options.installDependencies != null) {
19
+ _shouldInstall = options.installDependencies === "yes";
20
+ return;
21
+ }
15
22
  const answer = await ask("\nInstall dependencies now? [yes/no] (yes): ", "yes");
16
23
  _shouldInstall = answer.toLowerCase() !== "no";
17
24
  }
@@ -38,4 +45,4 @@ export const FinalizeFeature = {
38
45
  finalize
39
46
  };
40
47
 
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2ZpbmFsaXplLmZlYXR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlTWFuYWdlciB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW50ZXJvcFwiO1xuaW1wb3J0IHsgZGV0ZWN0UGFja2FnZU1hbmFnZXIsIHByb21wdEZvclBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pbnRlcm9wXCI7XG5pbXBvcnQgeyBhc2sgfSBmcm9tIFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcblxuLy8gU3RhdGUgcmVzb2x2ZWQgZHVyaW5nIHNjYWZmb2xkKCksIGNvbnN1bWVkIGJ5IGZpbmFsaXplKCkuXG5sZXQgX3BtOiBQYWNrYWdlTWFuYWdlciB8IG51bGwgPSBudWxsO1xubGV0IF9zaG91bGRJbnN0YWxsID0gdHJ1ZTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0T3B0aW9ucyhcblx0X3dvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdF9jbGlPcHRpb25zOiBvYmplY3QsXG4pOiBQcm9taXNlPG9iamVjdD4ge1xuXHRyZXR1cm4ge307XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNjYWZmb2xkKHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsIF9vcHRpb25zOiBvYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0aWYgKHByb2Nlc3MuZW52LkRFQ09IRVJFX0JVSUxERVIgPT09IFwiMVwiKSB7XG5cdFx0X3Nob3VsZEluc3RhbGwgPSBmYWxzZTtcblx0XHRyZXR1cm47XG5cdH1cblx0X3BtID0gZGV0ZWN0UGFja2FnZU1hbmFnZXIod29ya3NwYWNlLnRhcmdldERpcikgPz8gKGF3YWl0IHByb21wdEZvclBhY2thZ2VNYW5hZ2VyKCkpO1xuXHRjb25zdCBhbnN3ZXIgPSBhd2FpdCBhc2soXCJcXG5JbnN0YWxsIGRlcGVuZGVuY2llcyBub3c/IFt5ZXMvbm9dICh5ZXMpOiBcIiwgXCJ5ZXNcIik7XG5cdF9zaG91bGRJbnN0YWxsID0gYW5zd2VyLnRvTG93ZXJDYXNlKCkgIT09IFwibm9cIjtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluYWxpemUod29ya3NwYWNlOiBXb3Jrc3BhY2VTY2FmZm9sZCwgX29wdGlvbnM6IG9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAoX3Nob3VsZEluc3RhbGwpIHtcblx0XHRjb25zdCBwbSA9IF9wbSE7XG5cdFx0Y29uc29sZS5sb2coYFxcblNjYWZmb2xkZWQgJHt3b3Jrc3BhY2UubmFtZX0uIEluc3RhbGxpbmcgZGVwZW5kZW5jaWVzLi4uXFxuYCk7XG5cdFx0YXdhaXQgcG0uaW5zdGFsbCh7IGN3ZDogd29ya3NwYWNlLnRhcmdldERpciB9KTtcblx0fVxuXG5cdGNvbnNvbGUubG9nKGBcXG5Eb25lISAke19zaG91bGRJbnN0YWxsID8gXCJOZXh0XCIgOiBcIlRvIGdldCBzdGFydGVkOlwifSBzdGVwczpcXG5gKTtcblx0Y29uc29sZS5sb2coYCAgY2QgJHt3b3Jrc3BhY2UubmFtZX1gKTtcblx0aWYgKCFfc2hvdWxkSW5zdGFsbCkge1xuXHRcdGNvbnN0IHBtTmFtZSA9IF9wbT8ubmFtZSA/PyBcInBucG1cIjtcblx0XHRjb25zb2xlLmxvZyhgICAke3BtTmFtZX0gaW5zdGFsbGApO1xuXHR9XG5cdGNvbnNvbGUubG9nKFwiICBjb2RlIC4gICAgICAgICAjIG9wZW4gaW4gVlMgQ29kZVwiKTtcblx0Y29uc29sZS5sb2coXCIgICAgICAgICAgICAgICAgICMgdGhlbjogUmVvcGVuIGluIENvbnRhaW5lclxcblwiKTtcbn1cblxuZXhwb3J0IGNvbnN0IEZpbmFsaXplRmVhdHVyZTogRmVhdHVyZSA9IHsgZ2V0T3B0aW9ucywgc2NhZmZvbGQsIGZpbmFsaXplIH07XG4iXSwibmFtZXMiOlsiZGV0ZWN0UGFja2FnZU1hbmFnZXIiLCJwcm9tcHRGb3JQYWNrYWdlTWFuYWdlciIsImFzayIsIl9wbSIsIl9zaG91bGRJbnN0YWxsIiwiZ2V0T3B0aW9ucyIsIl93b3Jrc3BhY2UiLCJfY2xpT3B0aW9ucyIsInNjYWZmb2xkIiwid29ya3NwYWNlIiwiX29wdGlvbnMiLCJwcm9jZXNzIiwiZW52IiwiREVDT0hFUkVfQlVJTERFUiIsInRhcmdldERpciIsImFuc3dlciIsInRvTG93ZXJDYXNlIiwiZmluYWxpemUiLCJwbSIsImNvbnNvbGUiLCJsb2ciLCJuYW1lIiwiaW5zdGFsbCIsImN3ZCIsInBtTmFtZSIsIkZpbmFsaXplRmVhdHVyZSJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0Esb0JBQW9CLEVBQUVDLHVCQUF1QixRQUFRLDBCQUEwQjtBQUN4RixTQUFTQyxHQUFHLFFBQVEseUJBQXlCO0FBSTdDLDREQUE0RDtBQUM1RCxJQUFJQyxNQUE2QjtBQUNqQyxJQUFJQyxpQkFBaUI7QUFFckIsZUFBZUMsV0FDZEMsVUFBNkIsRUFDN0JDLFdBQW1CO0lBRW5CLE9BQU8sQ0FBQztBQUNUO0FBRUEsZUFBZUMsU0FBU0MsU0FBNEIsRUFBRUMsUUFBZ0I7SUFDckUsSUFBSUMsUUFBUUMsR0FBRyxDQUFDQyxnQkFBZ0IsS0FBSyxLQUFLO1FBQ3pDVCxpQkFBaUI7UUFDakI7SUFDRDtJQUNBRCxNQUFNSCxxQkFBcUJTLFVBQVVLLFNBQVMsS0FBTSxNQUFNYjtJQUMxRCxNQUFNYyxTQUFTLE1BQU1iLElBQUksZ0RBQWdEO0lBQ3pFRSxpQkFBaUJXLE9BQU9DLFdBQVcsT0FBTztBQUMzQztBQUVBLGVBQWVDLFNBQVNSLFNBQTRCLEVBQUVDLFFBQWdCO0lBQ3JFLElBQUlOLGdCQUFnQjtRQUNuQixNQUFNYyxLQUFLZjtRQUNYZ0IsUUFBUUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFWCxVQUFVWSxJQUFJLENBQUMsOEJBQThCLENBQUM7UUFDMUUsTUFBTUgsR0FBR0ksT0FBTyxDQUFDO1lBQUVDLEtBQUtkLFVBQVVLLFNBQVM7UUFBQztJQUM3QztJQUVBSyxRQUFRQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUVoQixpQkFBaUIsU0FBUyxrQkFBa0IsU0FBUyxDQUFDO0lBQzdFZSxRQUFRQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUVYLFVBQVVZLElBQUksRUFBRTtJQUNwQyxJQUFJLENBQUNqQixnQkFBZ0I7UUFDcEIsTUFBTW9CLFNBQVNyQixLQUFLa0IsUUFBUTtRQUM1QkYsUUFBUUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFSSxPQUFPLFFBQVEsQ0FBQztJQUNsQztJQUNBTCxRQUFRQyxHQUFHLENBQUM7SUFDWkQsUUFBUUMsR0FBRyxDQUFDO0FBQ2I7QUFFQSxPQUFPLE1BQU1LLGtCQUEyQjtJQUFFcEI7SUFBWUc7SUFBVVM7QUFBUyxFQUFFIn0=
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL2ZlYXR1cmVzL2ZpbmFsaXplLmZlYXR1cmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQYWNrYWdlTWFuYWdlciB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW50ZXJvcFwiO1xuaW1wb3J0IHsgZGV0ZWN0UGFja2FnZU1hbmFnZXIsIHByb21wdEZvclBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9pbnRlcm9wXCI7XG5pbXBvcnQgeyBhc2sgfSBmcm9tIFwiLi4vLi4vZG9tYWluL3Byb21wdC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTY2FmZm9sZCB9IGZyb20gXCIuLi8uLi9tb2RlbHMvcHJvamVjdC5tb2RlbC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBGZWF0dXJlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NjYWZmb2xkLnNlcnZpY2UuanNcIjtcblxuLy8gU3RhdGUgcmVzb2x2ZWQgZHVyaW5nIHNjYWZmb2xkKCksIGNvbnN1bWVkIGJ5IGZpbmFsaXplKCkuXG5sZXQgX3BtOiBQYWNrYWdlTWFuYWdlciB8IG51bGwgPSBudWxsO1xubGV0IF9zaG91bGRJbnN0YWxsID0gdHJ1ZTtcblxudHlwZSBGaW5hbGl6ZU9wdGlvbnMgPSB7XG5cdGluc3RhbGxEZXBlbmRlbmNpZXM/OiBcInllc1wiIHwgXCJub1wiO1xufTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0T3B0aW9ucyhcblx0X3dvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdGNsaU9wdGlvbnM6IFBhcnRpYWw8RmluYWxpemVPcHRpb25zPixcbik6IFByb21pc2U8b2JqZWN0PiB7XG5cdGlmIChjbGlPcHRpb25zLmluc3RhbGxEZXBlbmRlbmNpZXMgIT0gbnVsbCkge1xuXHRcdF9zaG91bGRJbnN0YWxsID0gY2xpT3B0aW9ucy5pbnN0YWxsRGVwZW5kZW5jaWVzID09PSBcInllc1wiO1xuXHR9XG5cdHJldHVybiB7fTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2NhZmZvbGQoXG5cdHdvcmtzcGFjZTogV29ya3NwYWNlU2NhZmZvbGQsXG5cdG9wdGlvbnM6IEZpbmFsaXplT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuXHRpZiAocHJvY2Vzcy5lbnYuREVDT0hFUkVfQlVJTERFUiA9PT0gXCIxXCIpIHtcblx0XHRfc2hvdWxkSW5zdGFsbCA9IGZhbHNlO1xuXHRcdHJldHVybjtcblx0fVxuXHRfcG0gPSBkZXRlY3RQYWNrYWdlTWFuYWdlcih3b3Jrc3BhY2UudGFyZ2V0RGlyKSA/PyAoYXdhaXQgcHJvbXB0Rm9yUGFja2FnZU1hbmFnZXIoKSk7XG5cdGlmIChvcHRpb25zLmluc3RhbGxEZXBlbmRlbmNpZXMgIT0gbnVsbCkge1xuXHRcdF9zaG91bGRJbnN0YWxsID0gb3B0aW9ucy5pbnN0YWxsRGVwZW5kZW5jaWVzID09PSBcInllc1wiO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IGFuc3dlciA9IGF3YWl0IGFzayhcIlxcbkluc3RhbGwgZGVwZW5kZW5jaWVzIG5vdz8gW3llcy9ub10gKHllcyk6IFwiLCBcInllc1wiKTtcblx0X3Nob3VsZEluc3RhbGwgPSBhbnN3ZXIudG9Mb3dlckNhc2UoKSAhPT0gXCJub1wiO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5hbGl6ZSh3b3Jrc3BhY2U6IFdvcmtzcGFjZVNjYWZmb2xkLCBfb3B0aW9uczogb2JqZWN0KTogUHJvbWlzZTx2b2lkPiB7XG5cdGlmIChfc2hvdWxkSW5zdGFsbCkge1xuXHRcdGNvbnN0IHBtID0gX3BtITtcblx0XHRjb25zb2xlLmxvZyhgXFxuU2NhZmZvbGRlZCAke3dvcmtzcGFjZS5uYW1lfS4gSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi5cXG5gKTtcblx0XHRhd2FpdCBwbS5pbnN0YWxsKHsgY3dkOiB3b3Jrc3BhY2UudGFyZ2V0RGlyIH0pO1xuXHR9XG5cblx0Y29uc29sZS5sb2coYFxcbkRvbmUhICR7X3Nob3VsZEluc3RhbGwgPyBcIk5leHRcIiA6IFwiVG8gZ2V0IHN0YXJ0ZWQ6XCJ9IHN0ZXBzOlxcbmApO1xuXHRjb25zb2xlLmxvZyhgICBjZCAke3dvcmtzcGFjZS5uYW1lfWApO1xuXHRpZiAoIV9zaG91bGRJbnN0YWxsKSB7XG5cdFx0Y29uc3QgcG1OYW1lID0gX3BtPy5uYW1lID8/IFwicG5wbVwiO1xuXHRcdGNvbnNvbGUubG9nKGAgICR7cG1OYW1lfSBpbnN0YWxsYCk7XG5cdH1cblx0Y29uc29sZS5sb2coXCIgIGNvZGUgLiAgICAgICAgICMgb3BlbiBpbiBWUyBDb2RlXCIpO1xuXHRjb25zb2xlLmxvZyhcIiAgICAgICAgICAgICAgICAgIyB0aGVuOiBSZW9wZW4gaW4gQ29udGFpbmVyXFxuXCIpO1xufVxuXG5leHBvcnQgY29uc3QgRmluYWxpemVGZWF0dXJlOiBGZWF0dXJlID0geyBnZXRPcHRpb25zLCBzY2FmZm9sZCwgZmluYWxpemUgfTtcbiJdLCJuYW1lcyI6WyJkZXRlY3RQYWNrYWdlTWFuYWdlciIsInByb21wdEZvclBhY2thZ2VNYW5hZ2VyIiwiYXNrIiwiX3BtIiwiX3Nob3VsZEluc3RhbGwiLCJnZXRPcHRpb25zIiwiX3dvcmtzcGFjZSIsImNsaU9wdGlvbnMiLCJpbnN0YWxsRGVwZW5kZW5jaWVzIiwic2NhZmZvbGQiLCJ3b3Jrc3BhY2UiLCJvcHRpb25zIiwicHJvY2VzcyIsImVudiIsIkRFQ09IRVJFX0JVSUxERVIiLCJ0YXJnZXREaXIiLCJhbnN3ZXIiLCJ0b0xvd2VyQ2FzZSIsImZpbmFsaXplIiwiX29wdGlvbnMiLCJwbSIsImNvbnNvbGUiLCJsb2ciLCJuYW1lIiwiaW5zdGFsbCIsImN3ZCIsInBtTmFtZSIsIkZpbmFsaXplRmVhdHVyZSJdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBU0Esb0JBQW9CLEVBQUVDLHVCQUF1QixRQUFRLDBCQUEwQjtBQUN4RixTQUFTQyxHQUFHLFFBQVEseUJBQXlCO0FBSTdDLDREQUE0RDtBQUM1RCxJQUFJQyxNQUE2QjtBQUNqQyxJQUFJQyxpQkFBaUI7QUFNckIsZUFBZUMsV0FDZEMsVUFBNkIsRUFDN0JDLFVBQW9DO0lBRXBDLElBQUlBLFdBQVdDLG1CQUFtQixJQUFJLE1BQU07UUFDM0NKLGlCQUFpQkcsV0FBV0MsbUJBQW1CLEtBQUs7SUFDckQ7SUFDQSxPQUFPLENBQUM7QUFDVDtBQUVBLGVBQWVDLFNBQ2RDLFNBQTRCLEVBQzVCQyxPQUF3QjtJQUV4QixJQUFJQyxRQUFRQyxHQUFHLENBQUNDLGdCQUFnQixLQUFLLEtBQUs7UUFDekNWLGlCQUFpQjtRQUNqQjtJQUNEO0lBQ0FELE1BQU1ILHFCQUFxQlUsVUFBVUssU0FBUyxLQUFNLE1BQU1kO0lBQzFELElBQUlVLFFBQVFILG1CQUFtQixJQUFJLE1BQU07UUFDeENKLGlCQUFpQk8sUUFBUUgsbUJBQW1CLEtBQUs7UUFDakQ7SUFDRDtJQUVBLE1BQU1RLFNBQVMsTUFBTWQsSUFBSSxnREFBZ0Q7SUFDekVFLGlCQUFpQlksT0FBT0MsV0FBVyxPQUFPO0FBQzNDO0FBRUEsZUFBZUMsU0FBU1IsU0FBNEIsRUFBRVMsUUFBZ0I7SUFDckUsSUFBSWYsZ0JBQWdCO1FBQ25CLE1BQU1nQixLQUFLakI7UUFDWGtCLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRVosVUFBVWEsSUFBSSxDQUFDLDhCQUE4QixDQUFDO1FBQzFFLE1BQU1ILEdBQUdJLE9BQU8sQ0FBQztZQUFFQyxLQUFLZixVQUFVSyxTQUFTO1FBQUM7SUFDN0M7SUFFQU0sUUFBUUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFbEIsaUJBQWlCLFNBQVMsa0JBQWtCLFNBQVMsQ0FBQztJQUM3RWlCLFFBQVFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRVosVUFBVWEsSUFBSSxFQUFFO0lBQ3BDLElBQUksQ0FBQ25CLGdCQUFnQjtRQUNwQixNQUFNc0IsU0FBU3ZCLEtBQUtvQixRQUFRO1FBQzVCRixRQUFRQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUVJLE9BQU8sUUFBUSxDQUFDO0lBQ2xDO0lBQ0FMLFFBQVFDLEdBQUcsQ0FBQztJQUNaRCxRQUFRQyxHQUFHLENBQUM7QUFDYjtBQUVBLE9BQU8sTUFBTUssa0JBQTJCO0lBQUV0QjtJQUFZSTtJQUFVUztBQUFTLEVBQUUifQ==
@@ -0,0 +1,12 @@
1
+ import { DevContainerImageModel, withNodeUser, withPnpm, withWorkspaceNodeModulesOwnership } from "../../models/docker-image.model.js";
2
+ export class WebapiDevContainer extends DevContainerImageModel {
3
+ constructor(baseImage = "node:24"){
4
+ super(baseImage);
5
+ }
6
+ registerBaseLayers() {
7
+ super.registerBaseLayers();
8
+ this.addLayer(withNodeUser()).addLayer(withPnpm()).addLayer(withWorkspaceNodeModulesOwnership());
9
+ }
10
+ }
11
+
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL21vZGVscy93ZWJhcGktaW1hZ2UubW9kZWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0RGV2Q29udGFpbmVySW1hZ2VNb2RlbCxcblx0d2l0aE5vZGVVc2VyLFxuXHR3aXRoUG5wbSxcblx0d2l0aFdvcmtzcGFjZU5vZGVNb2R1bGVzT3duZXJzaGlwLFxufSBmcm9tIFwiLi4vLi4vbW9kZWxzL2RvY2tlci1pbWFnZS5tb2RlbC5qc1wiO1xuXG5leHBvcnQgY2xhc3MgV2ViYXBpRGV2Q29udGFpbmVyIGV4dGVuZHMgRGV2Q29udGFpbmVySW1hZ2VNb2RlbCB7XG5cdHB1YmxpYyBjb25zdHJ1Y3RvcihiYXNlSW1hZ2UgPSBcIm5vZGU6MjRcIikge1xuXHRcdHN1cGVyKGJhc2VJbWFnZSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVnaXN0ZXJCYXNlTGF5ZXJzKCk6IHZvaWQge1xuXHRcdHN1cGVyLnJlZ2lzdGVyQmFzZUxheWVycygpO1xuXHRcdHRoaXMuYWRkTGF5ZXIod2l0aE5vZGVVc2VyKCkpXG5cdFx0XHQuYWRkTGF5ZXIod2l0aFBucG0oKSlcblx0XHRcdC5hZGRMYXllcih3aXRoV29ya3NwYWNlTm9kZU1vZHVsZXNPd25lcnNoaXAoKSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJEZXZDb250YWluZXJJbWFnZU1vZGVsIiwid2l0aE5vZGVVc2VyIiwid2l0aFBucG0iLCJ3aXRoV29ya3NwYWNlTm9kZU1vZHVsZXNPd25lcnNoaXAiLCJXZWJhcGlEZXZDb250YWluZXIiLCJiYXNlSW1hZ2UiLCJyZWdpc3RlckJhc2VMYXllcnMiLCJhZGRMYXllciJdLCJtYXBwaW5ncyI6IkFBQUEsU0FDQ0Esc0JBQXNCLEVBQ3RCQyxZQUFZLEVBQ1pDLFFBQVEsRUFDUkMsaUNBQWlDLFFBQzNCLHFDQUFxQztBQUU1QyxPQUFPLE1BQU1DLDJCQUEyQko7SUFDdkMsWUFBbUJLLFlBQVksU0FBUyxDQUFFO1FBQ3pDLEtBQUssQ0FBQ0E7SUFDUDtJQUVtQkMscUJBQTJCO1FBQzdDLEtBQUssQ0FBQ0E7UUFDTixJQUFJLENBQUNDLFFBQVEsQ0FBQ04sZ0JBQ1pNLFFBQVEsQ0FBQ0wsWUFDVEssUUFBUSxDQUFDSjtJQUNaO0FBQ0QifQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decohere/create",
3
- "version": "0.0.1-dev.21",
3
+ "version": "0.0.1-dev.22",
4
4
  "description": "Scaffold a new Decohere project — build with Forge, serve with Flux",
5
5
  "keywords": [
6
6
  "decohere",
@@ -21,7 +21,7 @@
21
21
  "test": "echo \"Error: no test specified\" && exit 1"
22
22
  },
23
23
  "dependencies": {
24
- "@decohere/nexus": "0.0.1-dev.21",
24
+ "@decohere/nexus": "0.0.1-dev.22",
25
25
  "commander": "^13.1.0"
26
26
  },
27
27
  "devDependencies": {}
@@ -0,0 +1,56 @@
1
+ import type { KeyedModel, SourceFile } from "./source-file.js";
2
+ export type LayerWriter = (dockerfile: DockerfileModel) => void;
3
+ export declare class DockerStep {
4
+ readonly key: string;
5
+ readonly content: string;
6
+ readonly order: number;
7
+ constructor(key: string, content: string, order?: number);
8
+ static run(key: string, command: string, order?: number): DockerStep;
9
+ static raw(key: string, content: string, order?: number): DockerStep;
10
+ static entrypoint(key: string, value: string | readonly string[], order?: number): DockerStep;
11
+ }
12
+ export declare function withCommandHistory(options?: {
13
+ historyDir?: string;
14
+ historyFileName?: string;
15
+ order?: number;
16
+ }): LayerWriter;
17
+ export declare function withNodeUser(options?: {
18
+ username?: string;
19
+ includeUserInstruction?: boolean;
20
+ order?: number;
21
+ }): LayerWriter;
22
+ export declare function withPnpm(options?: {
23
+ version?: string;
24
+ usernameExpr?: string;
25
+ order?: number;
26
+ }): LayerWriter;
27
+ export declare function withWorkspaceNodeModulesOwnership(options?: {
28
+ workspaceDir?: string;
29
+ usernameExpr?: string;
30
+ order?: number;
31
+ }): LayerWriter;
32
+ export declare function withVsCodeJsDebugBootloaderFix(options?: {
33
+ bashrcPath?: string;
34
+ order?: number;
35
+ }): LayerWriter;
36
+ export declare class DockerfileModel implements KeyedModel {
37
+ readonly key: string;
38
+ private readonly _steps;
39
+ private readonly _layerWriters;
40
+ private _fromImage;
41
+ private _layerCounter;
42
+ constructor(baseImage: string);
43
+ from(baseImage: string): this;
44
+ addLayer(layer: LayerWriter | string, order?: 5000): this;
45
+ addStep(step: DockerStep): this;
46
+ removeStep(key: string): this;
47
+ entrypoint(value: string | readonly string[], order?: 10000): this;
48
+ addRunStep(cmd: string): this;
49
+ build(): string;
50
+ protected registerBaseLayers(): void;
51
+ files(): SourceFile[];
52
+ }
53
+ export declare class DevContainerImageModel extends DockerfileModel {
54
+ protected registerBaseLayers(): void;
55
+ files(): SourceFile[];
56
+ }
@@ -1,3 +1,4 @@
1
+ import type { ApiOptions } from "./webapi/create-api.js";
1
2
  /**
2
3
  * Run the scaffold inside a pre-built Docker builder image.
3
4
  *
@@ -8,6 +9,4 @@
8
9
  * If `~/.config/auth0` exists on the host the directory is also mounted so
9
10
  * the auth0 CLI inside the container can reuse existing credentials silently.
10
11
  */
11
- export declare function runInBuilder(opts: {
12
- d?: string;
13
- }): never;
12
+ export declare function runInBuilder(opts: ApiOptions): never;
@@ -1,7 +1,9 @@
1
1
  export declare const WEBAPI_PROJECT_DIR = "projects/api";
2
2
  export type ApiOptions = {
3
3
  d?: string;
4
- authProvider?: string;
4
+ authProvider?: "auth0" | "none";
5
5
  databaseProvider?: "none" | "postgres/typeorm";
6
+ postmanProvider?: "api" | "local" | "none";
7
+ installDependencies?: "yes" | "no";
6
8
  };
7
9
  export declare function scaffoldApi(cliOptions: ApiOptions): Promise<void>;
@@ -0,0 +1,5 @@
1
+ import { DevContainerImageModel } from "../../models/docker-image.model.js";
2
+ export declare class WebapiDevContainer extends DevContainerImageModel {
3
+ constructor(baseImage?: string);
4
+ protected registerBaseLayers(): void;
5
+ }