@intentic/scaffold 1.15.1
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.
- package/LICENSE +21 -0
- package/dist/deploy-config.d.ts +6 -0
- package/dist/deploy-config.d.ts.map +1 -0
- package/dist/deploy-config.js +199 -0
- package/dist/deploy-config.js.map +1 -0
- package/dist/exec.d.ts +8 -0
- package/dist/exec.d.ts.map +1 -0
- package/dist/exec.js +5 -0
- package/dist/exec.js.map +1 -0
- package/dist/git.d.ts +40 -0
- package/dist/git.d.ts.map +1 -0
- package/dist/git.js +75 -0
- package/dist/git.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/inject-template.d.ts +26 -0
- package/dist/inject-template.d.ts.map +1 -0
- package/dist/inject-template.js +136 -0
- package/dist/inject-template.js.map +1 -0
- package/dist/intent-repo.d.ts +6 -0
- package/dist/intent-repo.d.ts.map +1 -0
- package/dist/intent-repo.js +19 -0
- package/dist/intent-repo.js.map +1 -0
- package/dist/secret-inventory.d.ts +11 -0
- package/dist/secret-inventory.d.ts.map +1 -0
- package/dist/secret-inventory.js +58 -0
- package/dist/secret-inventory.js.map +1 -0
- package/dist/template-manifest.d.ts +27 -0
- package/dist/template-manifest.d.ts.map +1 -0
- package/dist/template-manifest.js +13 -0
- package/dist/template-manifest.js.map +1 -0
- package/dist/workspace-layout.d.ts +14 -0
- package/dist/workspace-layout.d.ts.map +1 -0
- package/dist/workspace-layout.js +13 -0
- package/dist/workspace-layout.js.map +1 -0
- package/package.json +47 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Artur Kurowski
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { InventoryEntry } from "@intentic/sandbox-contract";
|
|
2
|
+
export declare const hostSshKeyVar: (name: string) => string;
|
|
3
|
+
export declare const writeManagedRegion: (src: string, entries: readonly InventoryEntry[]) => string;
|
|
4
|
+
export declare const readManagedRegion: (src: string) => InventoryEntry[];
|
|
5
|
+
export declare const scaffoldDeployConfig: (entries: readonly InventoryEntry[]) => string;
|
|
6
|
+
//# sourceMappingURL=deploy-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-config.d.ts","sourceRoot":"","sources":["../src/deploy-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAkC,MAAM,4BAA4B,CAAC;AA2FjG,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAA8E,CAAC;AAkE5H,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,EAAE,SAAS,SAAS,cAAc,EAAE,KAAG,MAepF,CAAC;AAyCF,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,cAAc,EA6D7D,CAAC;AAIF,eAAO,MAAM,oBAAoB,GAAI,SAAS,SAAS,cAAc,EAAE,KAAG,MAU1D,CAAC"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
const BEGIN_TAG = `// <intentic>`;
|
|
2
|
+
const END_TAG = `// </intentic>`;
|
|
3
|
+
const BEGIN_MARKER = `${BEGIN_TAG} managed — do not edit by hand`;
|
|
4
|
+
const INDENT = ` `;
|
|
5
|
+
const REGISTRY = {
|
|
6
|
+
host: {
|
|
7
|
+
fields: [
|
|
8
|
+
{ key: `address`, source: `string` },
|
|
9
|
+
{ key: `user`, source: `string` },
|
|
10
|
+
{ key: `port`, source: `number` },
|
|
11
|
+
{ key: `via`, source: `string`, optional: true },
|
|
12
|
+
{ key: `sshKey`, source: `env`, envVar: `HOST_SSH_KEY` },
|
|
13
|
+
],
|
|
14
|
+
},
|
|
15
|
+
cloudflare: {
|
|
16
|
+
fields: [
|
|
17
|
+
{ key: `apiToken`, source: `env`, envVar: `CLOUDFLARE_API_TOKEN` },
|
|
18
|
+
{ key: `zone`, source: `string`, optional: true },
|
|
19
|
+
],
|
|
20
|
+
},
|
|
21
|
+
github: {
|
|
22
|
+
fields: [{ key: `token`, source: `env`, envVar: `GITHUB_TOKEN` }],
|
|
23
|
+
},
|
|
24
|
+
gitlab: {
|
|
25
|
+
fields: [
|
|
26
|
+
{ key: `url`, source: `string`, optional: true },
|
|
27
|
+
{ key: `token`, source: `env`, envVar: `GITLAB_TOKEN` },
|
|
28
|
+
],
|
|
29
|
+
},
|
|
30
|
+
stripe: {
|
|
31
|
+
fields: [{ key: `apiKey`, source: `env`, envVar: `STRIPE_API_KEY` }],
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const SERVICE_REGISTRY = {
|
|
35
|
+
signoz: { fields: [{ key: `domain`, source: `string` }] },
|
|
36
|
+
outline: { fields: [{ key: `domain`, source: `string` }] },
|
|
37
|
+
paperless: { fields: [{ key: `domain`, source: `string` }] },
|
|
38
|
+
openproject: { fields: [{ key: `domain`, source: `string` }] },
|
|
39
|
+
invoiceninja: { fields: [{ key: `domain`, source: `string` }] },
|
|
40
|
+
infisical: { fields: [{ key: `domain`, source: `string` }] },
|
|
41
|
+
};
|
|
42
|
+
export const hostSshKeyVar = (name) => (name === `self` ? `HOST_SSH_KEY` : `${name.toUpperCase()}_SSH_KEY`);
|
|
43
|
+
const hostSshKeyEnvVar = (entry, field) => entry.kind === `backend` && entry.provider === `host` && field.key === `sshKey` ? hostSshKeyVar(entry.name) : undefined;
|
|
44
|
+
const renderOption = (entry, field) => {
|
|
45
|
+
if (field.source === `env`) {
|
|
46
|
+
return `${field.key}: env(${JSON.stringify(hostSshKeyEnvVar(entry, field) ?? field.envVar ?? ``)})`;
|
|
47
|
+
}
|
|
48
|
+
const value = entry.values[field.key];
|
|
49
|
+
if (field.optional && (value === undefined || value === ``)) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
if (field.source === `number`) {
|
|
53
|
+
return `${field.key}: ${typeof value === `number` ? value : Number(value ?? 0)}`;
|
|
54
|
+
}
|
|
55
|
+
return `${field.key}: ${JSON.stringify(String(value ?? ``))}`;
|
|
56
|
+
};
|
|
57
|
+
const renderBackendEntry = (entry) => {
|
|
58
|
+
const spec = REGISTRY[entry.provider];
|
|
59
|
+
const options = spec.fields
|
|
60
|
+
.map((field) => renderOption(entry, field))
|
|
61
|
+
.filter((option) => option !== undefined)
|
|
62
|
+
.join(`, `);
|
|
63
|
+
return `${INDENT}const ${entry.name} = i.have.${entry.provider}(${JSON.stringify(entry.name)}, { ${options} });`;
|
|
64
|
+
};
|
|
65
|
+
const renderServiceEntry = (entry) => {
|
|
66
|
+
const spec = SERVICE_REGISTRY[entry.service];
|
|
67
|
+
const options = [
|
|
68
|
+
`kind: ${JSON.stringify(entry.service)}`,
|
|
69
|
+
`on: ${entry.on}`,
|
|
70
|
+
`expose: ${entry.expose}`,
|
|
71
|
+
...spec.fields.map((field) => renderOption(entry, field)).filter((option) => option !== undefined),
|
|
72
|
+
].join(`, `);
|
|
73
|
+
return `${INDENT}const ${entry.name} = i.want.service(${JSON.stringify(entry.name)}, { ${options} });`;
|
|
74
|
+
};
|
|
75
|
+
const renderAppEntry = (entry) => {
|
|
76
|
+
const domain = JSON.stringify(String(entry.values[`domain`] ?? ``));
|
|
77
|
+
const options = `on: ${entry.on}, expose: ${entry.expose}, environments: { production: { domain: ${domain}, branch: "main" } }`;
|
|
78
|
+
return `${INDENT}const ${entry.name} = i.want.app(${JSON.stringify(entry.name)}, { ${options} });`;
|
|
79
|
+
};
|
|
80
|
+
const renderEntry = (entry) => {
|
|
81
|
+
if (entry.kind === `service`) {
|
|
82
|
+
return renderServiceEntry(entry);
|
|
83
|
+
}
|
|
84
|
+
if (entry.kind === `app`) {
|
|
85
|
+
return renderAppEntry(entry);
|
|
86
|
+
}
|
|
87
|
+
return renderBackendEntry(entry);
|
|
88
|
+
};
|
|
89
|
+
const renderRegion = (entries) => [`${INDENT}${BEGIN_MARKER}`, ...entries.map(renderEntry), `${INDENT}${END_TAG}`].join(`\n`);
|
|
90
|
+
export const writeManagedRegion = (src, entries) => {
|
|
91
|
+
const lines = src.split(`\n`);
|
|
92
|
+
const begin = lines.findIndex((line) => line.trim().startsWith(BEGIN_TAG));
|
|
93
|
+
const end = lines.findIndex((line) => line.trim().startsWith(END_TAG));
|
|
94
|
+
const region = renderRegion(entries).split(`\n`);
|
|
95
|
+
if (begin !== -1 && end !== -1 && end > begin) {
|
|
96
|
+
return [...lines.slice(0, begin), ...region, ...lines.slice(end + 1)].join(`\n`);
|
|
97
|
+
}
|
|
98
|
+
const open = lines.findIndex((line) => /defineIntent\(\s*\(?\s*\w*\s*\)?\s*=>\s*\{/.test(line));
|
|
99
|
+
if (open === -1) {
|
|
100
|
+
throw new Error(`deploy.config.ts has no defineIntent((i) => { … }) body to insert the managed region into.`);
|
|
101
|
+
}
|
|
102
|
+
return [...lines.slice(0, open + 1), ...region, ``, ...lines.slice(open + 1)].join(`\n`);
|
|
103
|
+
};
|
|
104
|
+
const parseValues = (optionsSrc) => {
|
|
105
|
+
const values = {};
|
|
106
|
+
for (const match of optionsSrc.matchAll(/(\w+)\s*:\s*"([^"]*)"/g)) {
|
|
107
|
+
const key = match[1];
|
|
108
|
+
const value = match[2];
|
|
109
|
+
if (key !== undefined && value !== undefined) {
|
|
110
|
+
values[key] = value;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
for (const match of optionsSrc.matchAll(/(\w+)\s*:\s*(-?\d+)\b/g)) {
|
|
114
|
+
const key = match[1];
|
|
115
|
+
const value = match[2];
|
|
116
|
+
if (key !== undefined && value !== undefined && !(key in values)) {
|
|
117
|
+
values[key] = Number(value);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return values;
|
|
121
|
+
};
|
|
122
|
+
const KNOWN_PROVIDERS = new Set(Object.keys(REGISTRY));
|
|
123
|
+
const KNOWN_SERVICES = new Set(Object.keys(SERVICE_REGISTRY));
|
|
124
|
+
const serviceValues = (kind, all) => {
|
|
125
|
+
const values = {};
|
|
126
|
+
for (const field of SERVICE_REGISTRY[kind].fields) {
|
|
127
|
+
if (field.key in all) {
|
|
128
|
+
values[field.key] = all[field.key];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return values;
|
|
132
|
+
};
|
|
133
|
+
export const readManagedRegion = (src) => {
|
|
134
|
+
const lines = src.split(`\n`);
|
|
135
|
+
const begin = lines.findIndex((line) => line.trim().startsWith(BEGIN_TAG));
|
|
136
|
+
const end = lines.findIndex((line) => line.trim().startsWith(END_TAG));
|
|
137
|
+
if (begin === -1 || end === -1 || end <= begin) {
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
const entries = [];
|
|
141
|
+
for (const line of lines.slice(begin + 1, end)) {
|
|
142
|
+
const serviceMatch = /i\.want\.service\(\s*"([^"]+)"\s*,\s*\{(.*)\}\s*\)/.exec(line);
|
|
143
|
+
if (serviceMatch) {
|
|
144
|
+
const name = serviceMatch[1];
|
|
145
|
+
const optionsSrc = serviceMatch[2];
|
|
146
|
+
const kind = /\bkind\s*:\s*"([^"]+)"/.exec(optionsSrc ?? ``)?.[1];
|
|
147
|
+
const on = /\bon\s*:\s*([a-zA-Z_]\w*)/.exec(optionsSrc ?? ``)?.[1];
|
|
148
|
+
const expose = /\bexpose\s*:\s*([a-zA-Z_]\w*)/.exec(optionsSrc ?? ``)?.[1];
|
|
149
|
+
if (name !== undefined &&
|
|
150
|
+
optionsSrc !== undefined &&
|
|
151
|
+
kind !== undefined &&
|
|
152
|
+
KNOWN_SERVICES.has(kind) &&
|
|
153
|
+
on !== undefined &&
|
|
154
|
+
expose !== undefined) {
|
|
155
|
+
entries.push({
|
|
156
|
+
kind: `service`,
|
|
157
|
+
service: kind,
|
|
158
|
+
name,
|
|
159
|
+
on,
|
|
160
|
+
expose,
|
|
161
|
+
values: serviceValues(kind, parseValues(optionsSrc)),
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
const appMatch = /i\.want\.app\(\s*"([^"]+)"\s*,\s*\{(.*)\}\s*\)/.exec(line);
|
|
167
|
+
if (appMatch) {
|
|
168
|
+
const name = appMatch[1];
|
|
169
|
+
const optionsSrc = appMatch[2];
|
|
170
|
+
const on = /\bon\s*:\s*([a-zA-Z_]\w*)/.exec(optionsSrc ?? ``)?.[1];
|
|
171
|
+
const expose = /\bexpose\s*:\s*([a-zA-Z_]\w*)/.exec(optionsSrc ?? ``)?.[1];
|
|
172
|
+
const domain = /\bdomain\s*:\s*"([^"]*)"/.exec(optionsSrc ?? ``)?.[1];
|
|
173
|
+
if (name !== undefined && on !== undefined && expose !== undefined && domain !== undefined) {
|
|
174
|
+
entries.push({ kind: `app`, name, on, expose, values: { domain } });
|
|
175
|
+
}
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const match = /i\.have\.(\w+)\(\s*"([^"]+)"\s*,\s*\{(.*)\}\s*\)/.exec(line);
|
|
179
|
+
const provider = match?.[1];
|
|
180
|
+
const name = match?.[2];
|
|
181
|
+
const optionsSrc = match?.[3];
|
|
182
|
+
if (provider === undefined || name === undefined || optionsSrc === undefined || !KNOWN_PROVIDERS.has(provider)) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
entries.push({ kind: `backend`, provider: provider, name, values: parseValues(optionsSrc) });
|
|
186
|
+
}
|
|
187
|
+
return entries;
|
|
188
|
+
};
|
|
189
|
+
export const scaffoldDeployConfig = (entries) => [
|
|
190
|
+
`import { env } from "@intentic/graph";`,
|
|
191
|
+
`import { defineIntent } from "@intentic/sdk";`,
|
|
192
|
+
``,
|
|
193
|
+
`export const intent = defineIntent((i) => {`,
|
|
194
|
+
renderRegion(entries),
|
|
195
|
+
``,
|
|
196
|
+
`});`,
|
|
197
|
+
``,
|
|
198
|
+
].join(`\n`);
|
|
199
|
+
//# sourceMappingURL=deploy-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deploy-config.js","sourceRoot":"","sources":["../src/deploy-config.ts"],"names":[],"mappings":"AAmBA,MAAM,SAAS,GAAG,eAAe,CAAC;AAClC,MAAM,OAAO,GAAG,gBAAgB,CAAC;AACjC,MAAM,YAAY,GAAG,GAAG,SAAS,gCAAgC,CAAC;AAClE,MAAM,MAAM,GAAG,MAAM,CAAC;AAoBtB,MAAM,QAAQ,GAA4C;IACtD,IAAI,EAAE;QACF,MAAM,EAAE;YACJ,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;YACpC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;YACjC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;YAEjC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;YAChD,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE;SAC3D;KACJ;IACD,UAAU,EAAE;QACR,MAAM,EAAE;YACJ,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE;YAGlE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;SACpD;KACJ;IACD,MAAM,EAAE;QACJ,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;KACpE;IAGD,MAAM,EAAE;QACJ,MAAM,EAAE;YACJ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE;YAChD,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE;SAC1D;KACJ;IACD,MAAM,EAAE;QACJ,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;KACvE;CACJ,CAAC;AAIF,MAAM,gBAAgB,GAAsC;IACxD,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;IACzD,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC1D,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC5D,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC9D,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;IAC/D,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE;CAC/D,CAAC;AAKF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AAG5H,MAAM,gBAAgB,GAAG,CAAC,KAAqB,EAAE,KAAgB,EAAsB,EAAE,CACrF,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAE5H,MAAM,YAAY,GAAG,CAAC,KAAqB,EAAE,KAAgB,EAAsB,EAAE;IACjF,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,KAAK,CAAC,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,CAAC;IACxG,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC,EAAE,CAAC;QAC1D,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;IACrF,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CAAC,KAAmD,EAAU,EAAE;IACvF,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM;SACtB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SAC1C,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC;SAC1D,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,OAAO,GAAG,MAAM,SAAS,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,MAAM,CAAC;AACrH,CAAC,CAAC;AAIF,MAAM,kBAAkB,GAAG,CAAC,KAAmB,EAAU,EAAE;IACvD,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG;QACZ,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;QACxC,OAAO,KAAK,CAAC,EAAE,EAAE;QACjB,WAAW,KAAK,CAAC,MAAM,EAAE;QACzB,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAoB,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC;KACvH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO,GAAG,MAAM,SAAS,KAAK,CAAC,IAAI,qBAAqB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,MAAM,CAAC;AAC3G,CAAC,CAAC;AAIF,MAAM,cAAc,GAAG,CAAC,KAAe,EAAU,EAAE;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,EAAE,aAAa,KAAK,CAAC,MAAM,2CAA2C,MAAM,sBAAsB,CAAC;IAChI,OAAO,GAAG,MAAM,SAAS,KAAK,CAAC,IAAI,iBAAiB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO,MAAM,CAAC;AACvG,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAqB,EAAU,EAAE;IAClD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,OAAkC,EAAU,EAAE,CAChE,CAAC,GAAG,MAAM,GAAG,YAAY,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAIhG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE,OAAkC,EAAU,EAAE;IAC1F,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEjD,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,4CAA4C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAChG,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;IAClH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7F,CAAC,CAAC;AAIF,MAAM,WAAW,GAAG,CAAC,UAAkB,EAAmC,EAAE;IACxE,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAChE,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;IACL,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAChE,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/D,MAAM,cAAc,GAAG,IAAI,GAAG,CAAS,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAItE,MAAM,aAAa,GAAG,CAAC,IAAiB,EAAE,GAAoC,EAAmC,EAAE;IAC/G,MAAM,MAAM,GAAoC,EAAE,CAAC;IACnD,KAAK,MAAM,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QAChD,IAAI,KAAK,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;YACnB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;QAC1D,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAoB,EAAE;IAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3E,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;IACvE,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;QAC7C,OAAO,EAAE,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAE7C,MAAM,YAAY,GAAG,oDAAoD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrF,IAAI,YAAY,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,UAAU,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,wBAAwB,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,EAAE,GAAG,2BAA2B,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,+BAA+B,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3E,IACI,IAAI,KAAK,SAAS;gBAClB,UAAU,KAAK,SAAS;gBACxB,IAAI,KAAK,SAAS;gBAClB,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;gBACxB,EAAE,KAAK,SAAS;gBAChB,MAAM,KAAK,SAAS,EACtB,CAAC;gBACC,OAAO,CAAC,IAAI,CAAC;oBACT,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,IAAmB;oBAC5B,IAAI;oBACJ,EAAE;oBACF,MAAM;oBACN,MAAM,EAAE,aAAa,CAAC,IAAmB,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;iBACtE,CAAC,CAAC;YACP,CAAC;YACD,SAAS;QACb,CAAC;QAED,MAAM,QAAQ,GAAG,gDAAgD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,IAAI,QAAQ,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,EAAE,GAAG,2BAA2B,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,+BAA+B,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtE,IAAI,IAAI,KAAK,SAAS,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,SAAS;QACb,CAAC;QAED,MAAM,KAAK,GAAG,kDAAkD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,UAAU,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,QAAQ,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7G,SAAS;QACb,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,QAA6B,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACtH,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAkC,EAAU,EAAE,CAC/E;IACI,wCAAwC;IACxC,+CAA+C;IAC/C,EAAE;IACF,6CAA6C;IAC7C,YAAY,CAAC,OAAO,CAAC;IACrB,EAAE;IACF,KAAK;IACL,EAAE;CACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
|
package/dist/exec.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
export declare const exec: typeof execFile.__promisify__;
|
|
3
|
+
export type GitRunner = (dir: string, args: readonly string[]) => Promise<{
|
|
4
|
+
readonly stdout: string;
|
|
5
|
+
readonly stderr: string;
|
|
6
|
+
}>;
|
|
7
|
+
export declare const defaultGit: GitRunner;
|
|
8
|
+
//# sourceMappingURL=exec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAK9C,eAAO,MAAM,IAAI,+BAAsB,CAAC;AAIxC,MAAM,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAChI,eAAO,MAAM,UAAU,EAAE,SAA4D,CAAC"}
|
package/dist/exec.js
ADDED
package/dist/exec.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../src/exec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC,MAAM,CAAC,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAKxC,MAAM,CAAC,MAAM,UAAU,GAAc,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC"}
|
package/dist/git.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type GitRunner } from "./exec.js";
|
|
2
|
+
export declare const gitInit: (dir: string, separateGitDir?: string, git?: GitRunner) => Promise<void>;
|
|
3
|
+
export interface GitCloneOptions {
|
|
4
|
+
readonly branch?: string;
|
|
5
|
+
readonly authHeader?: string;
|
|
6
|
+
readonly separateGitDir?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const gitClone: (parentDir: string, name: string, cloneUrl: string, options?: GitCloneOptions, git?: GitRunner) => Promise<void>;
|
|
9
|
+
export interface GitStatus {
|
|
10
|
+
readonly branch: string;
|
|
11
|
+
readonly dirty: boolean;
|
|
12
|
+
readonly files: string[];
|
|
13
|
+
}
|
|
14
|
+
export declare const gitStatus: (dir: string, git?: GitRunner) => Promise<GitStatus>;
|
|
15
|
+
export declare const gitCommitAll: (dir: string, message: string, author: {
|
|
16
|
+
readonly name: string;
|
|
17
|
+
readonly email: string;
|
|
18
|
+
}, git?: GitRunner) => Promise<boolean>;
|
|
19
|
+
export declare const gitPush: (dir: string, branch: string, git?: GitRunner) => Promise<void>;
|
|
20
|
+
export declare const gitCheckout: (dir: string, ref: string, git?: GitRunner) => Promise<void>;
|
|
21
|
+
export declare const gitHead: (dir: string, git?: GitRunner) => Promise<string>;
|
|
22
|
+
export declare const gitListFiles: (dir: string, git?: GitRunner) => Promise<string[]>;
|
|
23
|
+
export type GitSyncResult = {
|
|
24
|
+
readonly status: "updated";
|
|
25
|
+
readonly behind: number;
|
|
26
|
+
readonly head: string;
|
|
27
|
+
} | {
|
|
28
|
+
readonly status: "current";
|
|
29
|
+
} | {
|
|
30
|
+
readonly status: "dirty";
|
|
31
|
+
readonly behind: number;
|
|
32
|
+
} | {
|
|
33
|
+
readonly status: "diverged";
|
|
34
|
+
readonly ahead: number;
|
|
35
|
+
readonly behind: number;
|
|
36
|
+
} | {
|
|
37
|
+
readonly status: "no-remote";
|
|
38
|
+
};
|
|
39
|
+
export declare const gitSync: (dir: string, git?: GitRunner) => Promise<GitSyncResult>;
|
|
40
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAQvD,eAAO,MAAM,OAAO,GAAU,KAAK,MAAM,EAAE,iBAAiB,MAAM,EAAE,MAAK,SAAsB,KAAG,OAAO,CAAC,IAAI,CAO7G,CAAC;AAEF,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAGzB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACpC;AAID,eAAO,MAAM,QAAQ,GACjB,WAAW,MAAM,EACjB,MAAM,MAAM,EACZ,UAAU,MAAM,EAChB,UAAU,eAAe,EACzB,MAAK,SAAsB,KAC5B,OAAO,CAAC,IAAI,CAad,CAAC;AAQF,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAGxB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,eAAO,MAAM,SAAS,GAAU,KAAK,MAAM,EAAE,MAAK,SAAsB,KAAG,OAAO,CAAC,SAAS,CAI3F,CAAC;AAKF,eAAO,MAAM,YAAY,GACrB,KAAK,MAAM,EACX,SAAS,MAAM,EACf,QAAQ;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACzD,MAAK,SAAsB,KAC5B,OAAO,CAAC,OAAO,CAOjB,CAAC;AAEF,eAAO,MAAM,OAAO,GAAU,KAAK,MAAM,EAAE,QAAQ,MAAM,EAAE,MAAK,SAAsB,KAAG,OAAO,CAAC,IAAI,CAEpG,CAAC;AAIF,eAAO,MAAM,WAAW,GAAU,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAK,SAAsB,KAAG,OAAO,CAAC,IAAI,CAErG,CAAC;AAGF,eAAO,MAAM,OAAO,GAAU,KAAK,MAAM,EAAE,MAAK,SAAsB,KAAG,OAAO,CAAC,MAAM,CACnB,CAAC;AAIrE,eAAO,MAAM,YAAY,GAAU,KAAK,MAAM,EAAE,MAAK,SAAsB,KAAG,OAAO,CAAC,MAAM,EAAE,CAIxD,CAAC;AAEvC,MAAM,MAAM,aAAa,GACnB;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9E;IAAE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrD;IAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChF;IAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAAE,CAAC;AAOvC,eAAO,MAAM,OAAO,GAAU,KAAK,MAAM,EAAE,MAAK,SAAsB,KAAG,OAAO,CAAC,aAAa,CA6B7F,CAAC"}
|
package/dist/git.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { mkdir } from "node:fs/promises";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { defaultGit } from "./exec.js";
|
|
4
|
+
export const gitInit = async (dir, separateGitDir, git = defaultGit) => {
|
|
5
|
+
await mkdir(dir, { recursive: true });
|
|
6
|
+
if (separateGitDir !== undefined) {
|
|
7
|
+
await mkdir(dirname(separateGitDir), { recursive: true });
|
|
8
|
+
}
|
|
9
|
+
await git(dir, ["init", "-q", "--initial-branch=main", ...(separateGitDir !== undefined ? [`--separate-git-dir=${separateGitDir}`] : [])]);
|
|
10
|
+
};
|
|
11
|
+
export const gitClone = async (parentDir, name, cloneUrl, options, git = defaultGit) => {
|
|
12
|
+
if (options?.separateGitDir !== undefined) {
|
|
13
|
+
await mkdir(dirname(options.separateGitDir), { recursive: true });
|
|
14
|
+
}
|
|
15
|
+
await git(parentDir, [
|
|
16
|
+
...(options?.authHeader !== undefined ? ["-c", `http.extraheader=${options.authHeader}`] : []),
|
|
17
|
+
"clone",
|
|
18
|
+
...(options?.branch !== undefined ? ["--branch", options.branch] : []),
|
|
19
|
+
...(options?.separateGitDir !== undefined ? [`--separate-git-dir=${options.separateGitDir}`] : []),
|
|
20
|
+
cloneUrl,
|
|
21
|
+
name,
|
|
22
|
+
]);
|
|
23
|
+
};
|
|
24
|
+
const porcelainFiles = (stdout) => stdout
|
|
25
|
+
.split("\n")
|
|
26
|
+
.map((line) => line.trim())
|
|
27
|
+
.filter((line) => line !== "");
|
|
28
|
+
export const gitStatus = async (dir, git = defaultGit) => {
|
|
29
|
+
const branch = (await git(dir, ["rev-parse", "--abbrev-ref", "HEAD"])).stdout.trim();
|
|
30
|
+
const files = porcelainFiles((await git(dir, ["status", "--porcelain"])).stdout);
|
|
31
|
+
return { branch, dirty: files.length > 0, files };
|
|
32
|
+
};
|
|
33
|
+
export const gitCommitAll = async (dir, message, author, git = defaultGit) => {
|
|
34
|
+
await git(dir, ["add", "-A"]);
|
|
35
|
+
if (porcelainFiles((await git(dir, ["status", "--porcelain"])).stdout).length === 0) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
await git(dir, ["-c", `user.name=${author.name}`, "-c", `user.email=${author.email}`, "commit", "-m", message]);
|
|
39
|
+
return true;
|
|
40
|
+
};
|
|
41
|
+
export const gitPush = async (dir, branch, git = defaultGit) => {
|
|
42
|
+
await git(dir, ["push", "origin", `HEAD:${branch}`]);
|
|
43
|
+
};
|
|
44
|
+
export const gitCheckout = async (dir, ref, git = defaultGit) => {
|
|
45
|
+
await git(dir, ["checkout", "--detach", "-q", ref]);
|
|
46
|
+
};
|
|
47
|
+
export const gitHead = async (dir, git = defaultGit) => (await git(dir, ["rev-parse", "--short", "HEAD"])).stdout.trim();
|
|
48
|
+
export const gitListFiles = async (dir, git = defaultGit) => (await git(dir, ["ls-files"])).stdout
|
|
49
|
+
.split("\n")
|
|
50
|
+
.map((line) => line.trim())
|
|
51
|
+
.filter((line) => line !== "");
|
|
52
|
+
export const gitSync = async (dir, git = defaultGit) => {
|
|
53
|
+
const remotes = (await git(dir, ["remote"])).stdout.split("\n").map((line) => line.trim());
|
|
54
|
+
if (!remotes.includes("origin")) {
|
|
55
|
+
return { status: "no-remote" };
|
|
56
|
+
}
|
|
57
|
+
await git(dir, ["fetch", "--quiet", "origin"]);
|
|
58
|
+
const upstream = await git(dir, ["rev-parse", "--abbrev-ref", "--symbolic-full-name", "@{u}"]).then((r) => r.stdout.trim(), () => "");
|
|
59
|
+
if (upstream === "") {
|
|
60
|
+
return { status: "no-remote" };
|
|
61
|
+
}
|
|
62
|
+
const [behind = 0, ahead = 0] = (await git(dir, ["rev-list", "--left-right", "--count", "@{u}...HEAD"])).stdout.trim().split(/\s+/).map(Number);
|
|
63
|
+
if (behind === 0) {
|
|
64
|
+
return { status: "current" };
|
|
65
|
+
}
|
|
66
|
+
if (porcelainFiles((await git(dir, ["status", "--porcelain"])).stdout).length > 0) {
|
|
67
|
+
return { status: "dirty", behind };
|
|
68
|
+
}
|
|
69
|
+
if (ahead > 0) {
|
|
70
|
+
return { status: "diverged", ahead, behind };
|
|
71
|
+
}
|
|
72
|
+
await git(dir, ["merge", "--ff-only", "--quiet", "@{u}"]);
|
|
73
|
+
return { status: "updated", behind, head: await gitHead(dir, git) };
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=git.js.map
|
package/dist/git.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../src/git.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./deploy-config.js";
|
|
2
|
+
export * from "./exec.js";
|
|
3
|
+
export * from "./git.js";
|
|
4
|
+
export * from "./inject-template.js";
|
|
5
|
+
export * from "./intent-repo.js";
|
|
6
|
+
export * from "./secret-inventory.js";
|
|
7
|
+
export * from "./template-manifest.js";
|
|
8
|
+
export * from "./workspace-layout.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./deploy-config.js";
|
|
2
|
+
export * from "./exec.js";
|
|
3
|
+
export * from "./git.js";
|
|
4
|
+
export * from "./inject-template.js";
|
|
5
|
+
export * from "./intent-repo.js";
|
|
6
|
+
export * from "./secret-inventory.js";
|
|
7
|
+
export * from "./template-manifest.js";
|
|
8
|
+
export * from "./workspace-layout.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type AppInstanceInput, type TemplateManifest } from "./template-manifest.js";
|
|
2
|
+
export declare const injectMonorepoShell: (opts: {
|
|
3
|
+
repoDir: string;
|
|
4
|
+
sourceDir: string;
|
|
5
|
+
manifest: TemplateManifest;
|
|
6
|
+
}) => Promise<void>;
|
|
7
|
+
export declare const injectApps: (opts: {
|
|
8
|
+
repoDir: string;
|
|
9
|
+
sourceDir: string;
|
|
10
|
+
manifest: TemplateManifest;
|
|
11
|
+
apps: readonly AppInstanceInput[];
|
|
12
|
+
}) => Promise<void>;
|
|
13
|
+
export declare const fetchTemplateManifest: (source: string, ref: string) => Promise<TemplateManifest>;
|
|
14
|
+
export declare const scaffoldMonorepo: (opts: {
|
|
15
|
+
repoDir: string;
|
|
16
|
+
source: string;
|
|
17
|
+
ref: string;
|
|
18
|
+
}) => Promise<void>;
|
|
19
|
+
export declare function addAppsToMonorepo(opts: {
|
|
20
|
+
repoDir: string;
|
|
21
|
+
source: string;
|
|
22
|
+
ref: string;
|
|
23
|
+
apps: readonly AppInstanceInput[];
|
|
24
|
+
install?: boolean;
|
|
25
|
+
}): AsyncGenerator<string>;
|
|
26
|
+
//# sourceMappingURL=inject-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-template.d.ts","sourceRoot":"","sources":["../src/inject-template.ts"],"names":[],"mappings":"AAOA,OAAO,EAAkC,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AA+DtH,eAAO,MAAM,mBAAmB,GAAU,MAAM;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAIhI,CAAC;AAuBF,eAAO,MAAM,UAAU,GAAU,MAAM;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACrC,KAAG,OAAO,CAAC,IAAI,CAqBf,CAAC;AAeF,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,gBAAgB,CACV,CAAC;AAKnF,eAAO,MAAM,gBAAgB,GAAI,MAAM;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAGjG,CAAC;AAiCN,wBAAuB,iBAAiB,CAAC,IAAI,EAAE;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,cAAc,CAAC,MAAM,CAAC,CAiBzB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { execFile, spawn } from "node:child_process";
|
|
2
|
+
import { createInterface } from "node:readline";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { cp, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
5
|
+
import { tmpdir } from "node:os";
|
|
6
|
+
import { basename, dirname, join } from "node:path";
|
|
7
|
+
import { promisify } from "node:util";
|
|
8
|
+
import { isAppDir, readTemplateManifest } from "./template-manifest.js";
|
|
9
|
+
const exec = promisify(execFile);
|
|
10
|
+
const DENY_DIRS = new Set(["node_modules", ".git", ".cache", ".turbo", "dist", "generated", "out-tsc", "deploy"]);
|
|
11
|
+
const copyTree = (src, dest) => cp(src, dest, { recursive: true, filter: (from) => !DENY_DIRS.has(basename(from)) });
|
|
12
|
+
const copyItems = async (sourceDir, repoDir, items) => {
|
|
13
|
+
for (const item of items) {
|
|
14
|
+
const from = join(sourceDir, item);
|
|
15
|
+
const to = join(repoDir, item);
|
|
16
|
+
if (existsSync(from) && !existsSync(to)) {
|
|
17
|
+
await copyTree(from, to);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const copyAndRenameApp = async (sourceDir, repoDir, item, instanceName, templateKey, scope) => {
|
|
22
|
+
const from = join(sourceDir, item);
|
|
23
|
+
if (!existsSync(from)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const renamedItem = join(dirname(item), instanceName);
|
|
27
|
+
const to = join(repoDir, renamedItem);
|
|
28
|
+
if (existsSync(to)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
await copyTree(from, to);
|
|
32
|
+
const pkgPath = join(to, "package.json");
|
|
33
|
+
if (existsSync(pkgPath)) {
|
|
34
|
+
const raw = await readFile(pkgPath, "utf8");
|
|
35
|
+
const pkg = JSON.parse(raw);
|
|
36
|
+
const templatePkg = basename(item);
|
|
37
|
+
if (pkg.name === `${scope}${templatePkg}`) {
|
|
38
|
+
pkg.name = `${scope}${instanceName}`;
|
|
39
|
+
}
|
|
40
|
+
pkg.intentic = { template: templateKey };
|
|
41
|
+
await writeFile(pkgPath, `${JSON.stringify(pkg, undefined, 4)}\n`);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
export const injectMonorepoShell = async (opts) => {
|
|
45
|
+
await mkdir(opts.repoDir, { recursive: true });
|
|
46
|
+
await copyItems(opts.sourceDir, opts.repoDir, [...opts.manifest.shell, ...opts.manifest.shared]);
|
|
47
|
+
await exec("git", ["init", "-q", opts.repoDir]);
|
|
48
|
+
};
|
|
49
|
+
const stampTemplateMarker = async (repoDir, item, templateKey) => {
|
|
50
|
+
const pkgPath = join(repoDir, item, "package.json");
|
|
51
|
+
if (!existsSync(pkgPath)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const raw = await readFile(pkgPath, "utf8");
|
|
55
|
+
const pkg = JSON.parse(raw);
|
|
56
|
+
if (pkg.intentic?.template === templateKey) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
pkg.intentic = { template: templateKey };
|
|
60
|
+
await writeFile(pkgPath, `${JSON.stringify(pkg, undefined, 4)}\n`);
|
|
61
|
+
};
|
|
62
|
+
export const injectApps = async (opts) => {
|
|
63
|
+
for (const app of opts.apps) {
|
|
64
|
+
const def = opts.manifest.templates[app.template];
|
|
65
|
+
if (def === undefined) {
|
|
66
|
+
throw new Error(`unknown app "${app.template}" — known: ${Object.keys(opts.manifest.templates).join(", ")}`);
|
|
67
|
+
}
|
|
68
|
+
for (const item of def.instance) {
|
|
69
|
+
if (isAppDir(item) && app.name !== app.template) {
|
|
70
|
+
await copyAndRenameApp(opts.sourceDir, opts.repoDir, item, app.name, app.template, opts.manifest.scope);
|
|
71
|
+
}
|
|
72
|
+
else if (isAppDir(item)) {
|
|
73
|
+
await copyItems(opts.sourceDir, opts.repoDir, [item]);
|
|
74
|
+
await stampTemplateMarker(opts.repoDir, item, app.template);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
await copyItems(opts.sourceDir, opts.repoDir, [item]);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
const withTemplateClone = async (source, ref, fn) => {
|
|
83
|
+
const sourceDir = await mkdtemp(join(tmpdir(), "intentic-template-"));
|
|
84
|
+
try {
|
|
85
|
+
await exec("git", ["clone", "-q", "--depth", "1", "--branch", ref, source, sourceDir]);
|
|
86
|
+
return await fn(sourceDir);
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
await rm(sourceDir, { recursive: true, force: true });
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
export const fetchTemplateManifest = (source, ref) => withTemplateClone(source, ref, (sourceDir) => readTemplateManifest(sourceDir));
|
|
93
|
+
export const scaffoldMonorepo = (opts) => withTemplateClone(opts.source, opts.ref, (sourceDir) => injectMonorepoShell({ repoDir: opts.repoDir, sourceDir, manifest: readTemplateManifest(sourceDir) }));
|
|
94
|
+
async function* runStreaming(command, args, cwd) {
|
|
95
|
+
const child = spawn(command, args, { cwd, stdio: ["ignore", "pipe", "pipe"] });
|
|
96
|
+
const stderrTail = [];
|
|
97
|
+
createInterface({ input: child.stderr }).on("line", (line) => {
|
|
98
|
+
stderrTail.push(line);
|
|
99
|
+
if (stderrTail.length > 20) {
|
|
100
|
+
stderrTail.shift();
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
const exit = new Promise((resolve, reject) => {
|
|
104
|
+
child.on("error", reject);
|
|
105
|
+
child.on("close", (code) => resolve(code ?? 1));
|
|
106
|
+
});
|
|
107
|
+
for await (const line of createInterface({ input: child.stdout })) {
|
|
108
|
+
if (line.trim() !== "") {
|
|
109
|
+
yield line;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const code = await exit;
|
|
113
|
+
if (code !== 0) {
|
|
114
|
+
throw new Error(`${command} ${args.join(" ")} exited with ${code}${stderrTail.length > 0 ? `\n${stderrTail.join("\n")}` : ""}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
export async function* addAppsToMonorepo(opts) {
|
|
118
|
+
yield "Fetching the template source…";
|
|
119
|
+
const sourceDir = await mkdtemp(join(tmpdir(), "intentic-template-"));
|
|
120
|
+
try {
|
|
121
|
+
await exec("git", ["clone", "-q", "--depth", "1", "--branch", opts.ref, opts.source, sourceDir]);
|
|
122
|
+
const manifest = readTemplateManifest(sourceDir);
|
|
123
|
+
for (const app of opts.apps) {
|
|
124
|
+
yield app.name === app.template ? `Adding ${app.name}…` : `Adding ${app.name} (${app.template})…`;
|
|
125
|
+
await injectApps({ repoDir: opts.repoDir, sourceDir, manifest, apps: [app] });
|
|
126
|
+
}
|
|
127
|
+
if (opts.install !== false) {
|
|
128
|
+
yield "Installing dependencies — this can take a few minutes…";
|
|
129
|
+
yield* runStreaming("pnpm", ["install", "--reporter=append-only"], opts.repoDir);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
await rm(sourceDir, { recursive: true, force: true });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=inject-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject-template.js","sourceRoot":"","sources":["../src/inject-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const TARGET_GITIGNORE = ".env\n.secrets.json\n.secrets-sync.json\n.last-applied.json\n";
|
|
2
|
+
export declare const INTENT_GITIGNORE = "node_modules/\n";
|
|
3
|
+
export declare const INTENT_TSCONFIG: string;
|
|
4
|
+
export declare const libsLinkSpec: (pkg: "graph" | "sdk") => string;
|
|
5
|
+
export declare const intentPackageJson: (graphSpec: string, sdkSpec: string) => string;
|
|
6
|
+
//# sourceMappingURL=intent-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent-repo.d.ts","sourceRoot":"","sources":["../src/intent-repo.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,gBAAgB,kEAA6E,CAAC;AAI3G,eAAO,MAAM,gBAAgB,oBAAoB,CAAC;AAIlD,eAAO,MAAM,eAAe,QAOvB,CAAC;AASN,eAAO,MAAM,YAAY,GAAI,KAAK,OAAO,GAAG,KAAK,KAAG,MAAuC,CAAC;AAI5F,eAAO,MAAM,iBAAiB,GAAI,WAAW,MAAM,EAAE,SAAS,MAAM,KAAG,MAW9D,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { dirname, join } from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { CONFIG_FILE, ENV_FILE, LAST_APPLIED_FILE, SECRETS_FILE } from "./workspace-layout.js";
|
|
4
|
+
export const TARGET_GITIGNORE = `${ENV_FILE}\n${SECRETS_FILE}\n.secrets-sync.json\n${LAST_APPLIED_FILE}\n`;
|
|
5
|
+
export const INTENT_GITIGNORE = "node_modules/\n";
|
|
6
|
+
export const INTENT_TSCONFIG = `${JSON.stringify({
|
|
7
|
+
compilerOptions: { module: "nodenext", moduleResolution: "nodenext", target: "ES2024", strict: true, skipLibCheck: true, noEmit: true },
|
|
8
|
+
include: [CONFIG_FILE],
|
|
9
|
+
}, undefined, 4)}\n`;
|
|
10
|
+
const LIBS_DIR = join(dirname(fileURLToPath(import.meta.url)), "..", "..");
|
|
11
|
+
export const libsLinkSpec = (pkg) => `link:${join(LIBS_DIR, pkg)}`;
|
|
12
|
+
export const intentPackageJson = (graphSpec, sdkSpec) => `${JSON.stringify({
|
|
13
|
+
name: "intent",
|
|
14
|
+
version: "0.0.0",
|
|
15
|
+
private: true,
|
|
16
|
+
type: "module",
|
|
17
|
+
dependencies: { "@intentic/graph": graphSpec, "@intentic/sdk": sdkSpec },
|
|
18
|
+
}, undefined, 4)}\n`;
|
|
19
|
+
//# sourceMappingURL=intent-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent-repo.js","sourceRoot":"","sources":["../src/intent-repo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAM/F,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,QAAQ,KAAK,YAAY,yBAAyB,iBAAiB,IAAI,CAAC;AAI3G,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAIlD,MAAM,CAAC,MAAM,eAAe,GAAG,GAAG,IAAI,CAAC,SAAS,CAC5C;IACI,eAAe,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACvI,OAAO,EAAE,CAAC,WAAW,CAAC;CACzB,EACD,SAAS,EACT,CAAC,CACJ,IAAI,CAAC;AAIN,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAK3E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAoB,EAAU,EAAE,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC;AAI5F,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,OAAe,EAAU,EAAE,CAC5E,GAAG,IAAI,CAAC,SAAS,CACb;IACI,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,QAAQ;IACd,YAAY,EAAE,EAAE,iBAAiB,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE;CAC3E,EACD,SAAS,EACT,CAAC,CACJ,IAAI,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { SecretInventoryEntry } from "@intentic/sandbox-contract";
|
|
2
|
+
export declare const SYNC_FILE = ".secrets-sync.json";
|
|
3
|
+
export declare const secretDigest: (value: string) => string;
|
|
4
|
+
export type SyncState = Readonly<Record<string, {
|
|
5
|
+
readonly digest: string;
|
|
6
|
+
readonly pushedAt: string;
|
|
7
|
+
}>>;
|
|
8
|
+
export declare const readSyncState: (dir: string) => Promise<SyncState>;
|
|
9
|
+
export declare const writeSyncState: (dir: string, state: SyncState) => Promise<void>;
|
|
10
|
+
export declare const collectSecretInventory: (dir: string) => Promise<SecretInventoryEntry[]>;
|
|
11
|
+
//# sourceMappingURL=secret-inventory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-inventory.d.ts","sourceRoot":"","sources":["../src/secret-inventory.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAQvE,eAAO,MAAM,SAAS,uBAAuB,CAAC;AAE9C,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,MAA0D,CAAC;AAExG,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAAC;AAUzG,eAAO,MAAM,aAAa,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,SAAS,CAA4D,CAAC;AAEhI,eAAO,MAAM,cAAc,GAAU,KAAK,MAAM,EAAE,OAAO,SAAS,KAAG,OAAO,CAAC,IAAI,CAEhF,CAAC;AAQF,eAAO,MAAM,sBAAsB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,oBAAoB,EAAE,CA0CxF,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { parseEnv } from "node:util";
|
|
5
|
+
import { collectSecretUsage } from "@intentic/graph";
|
|
6
|
+
const ARTIFACT_FILE = "desired-state.json";
|
|
7
|
+
const ENV_FILE = ".env";
|
|
8
|
+
const SECRETS_FILE = ".secrets.json";
|
|
9
|
+
export const SYNC_FILE = ".secrets-sync.json";
|
|
10
|
+
export const secretDigest = (value) => createHash("sha256").update(value).digest("hex");
|
|
11
|
+
const readJson = async (path) => {
|
|
12
|
+
try {
|
|
13
|
+
return JSON.parse(await readFile(path, "utf8"));
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
export const readSyncState = async (dir) => (await readJson(join(dir, SYNC_FILE))) ?? {};
|
|
20
|
+
export const writeSyncState = async (dir, state) => {
|
|
21
|
+
await writeFile(join(dir, SYNC_FILE), `${JSON.stringify(state, undefined, 4)}\n`, { mode: 0o600 });
|
|
22
|
+
};
|
|
23
|
+
export const collectSecretInventory = async (dir) => {
|
|
24
|
+
const graph = await readJson(join(dir, ARTIFACT_FILE));
|
|
25
|
+
const usage = graph === undefined ? [] : collectSecretUsage(graph);
|
|
26
|
+
const envValues = parseEnv(await readFile(join(dir, ENV_FILE), "utf8").catch(() => ""));
|
|
27
|
+
const generatedValues = (await readJson(join(dir, SECRETS_FILE))) ?? {};
|
|
28
|
+
const sync = await readSyncState(dir);
|
|
29
|
+
const adopted = Object.keys(sync).length > 0;
|
|
30
|
+
const entry = (key, kind, requiredBy) => {
|
|
31
|
+
const value = kind === "env" ? envValues[key] : generatedValues[key];
|
|
32
|
+
const record = sync[key];
|
|
33
|
+
return {
|
|
34
|
+
key,
|
|
35
|
+
kind,
|
|
36
|
+
status: value === undefined ? "missing" : "set",
|
|
37
|
+
requiredBy,
|
|
38
|
+
storedAt: kind === "env" ? `desired-state/${ENV_FILE}` : `desired-state/${SECRETS_FILE}`,
|
|
39
|
+
revealable: true,
|
|
40
|
+
...(adopted && value !== undefined
|
|
41
|
+
? {
|
|
42
|
+
ci: {
|
|
43
|
+
synced: record !== undefined && record.digest === secretDigest(value),
|
|
44
|
+
...(record !== undefined ? { pushedAt: record.pushedAt } : {}),
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
: {}),
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
const declared = usage.map((u) => entry(u.key, u.source, u.requiredBy.map(({ id, type }) => ({ resourceId: id, type }))));
|
|
51
|
+
const declaredKeys = new Set(usage.map((u) => u.key));
|
|
52
|
+
const undeclared = Object.keys(envValues)
|
|
53
|
+
.filter((key) => !declaredKeys.has(key))
|
|
54
|
+
.sort()
|
|
55
|
+
.map((key) => entry(key, "env", []));
|
|
56
|
+
return [...declared, ...undeclared];
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=secret-inventory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secret-inventory.js","sourceRoot":"","sources":["../src/secret-inventory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,kBAAkB,EAA0B,MAAM,iBAAiB,CAAC;AAG7E,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC;AACxB,MAAM,YAAY,GAAG,eAAe,CAAC;AAIrC,MAAM,CAAC,MAAM,SAAS,GAAG,oBAAoB,CAAC;AAE9C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAIxG,MAAM,QAAQ,GAAG,KAAK,EAAK,IAAY,EAA0B,EAAE;IAC/D,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAM,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,SAAS,CAAC;IACrB,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,GAAW,EAAsB,EAAE,CAAC,CAAC,MAAM,QAAQ,CAAY,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAEhI,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,GAAW,EAAE,KAAgB,EAAiB,EAAE;IACjF,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACvG,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,GAAW,EAAmC,EAAE;IACzF,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAoB,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxF,MAAM,eAAe,GAAG,CAAC,MAAM,QAAQ,CAAyB,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChG,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAE7C,MAAM,KAAK,GAAG,CAAC,GAAW,EAAE,IAAyB,EAAE,UAA8C,EAAwB,EAAE;QAC3H,MAAM,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO;YACH,GAAG;YACH,IAAI;YACJ,MAAM,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;YAC/C,UAAU;YACV,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC,CAAC,iBAAiB,YAAY,EAAE;YACxF,UAAU,EAAE,IAAI;YAChB,GAAG,CAAC,OAAO,IAAI,KAAK,KAAK,SAAS;gBAC9B,CAAC,CAAC;oBACI,EAAE,EAAE;wBACA,MAAM,EAAE,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,KAAK,CAAC;wBACrE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACjE;iBACJ;gBACH,CAAC,CAAC,EAAE,CAAC;SACZ,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7B,KAAK,CACD,CAAC,CAAC,GAAG,EACL,CAAC,CAAC,MAAM,EACR,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CACjE,CACJ,CAAC;IACF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;SACpC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACvC,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,UAAU,CAAC,CAAC;AACxC,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare const DEFAULT_TEMPLATE_SOURCE = "https://github.com/radarsu/00-canonical-repo";
|
|
2
|
+
export declare const DEFAULT_TEMPLATE_REF = "main";
|
|
3
|
+
export interface TemplatePreview {
|
|
4
|
+
readonly package: string;
|
|
5
|
+
readonly dev: string;
|
|
6
|
+
readonly port: number;
|
|
7
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
8
|
+
}
|
|
9
|
+
export interface TemplateDef {
|
|
10
|
+
readonly label: string;
|
|
11
|
+
readonly description: string;
|
|
12
|
+
readonly instance: readonly string[];
|
|
13
|
+
readonly previews: readonly TemplatePreview[];
|
|
14
|
+
}
|
|
15
|
+
export interface TemplateManifest {
|
|
16
|
+
readonly scope: string;
|
|
17
|
+
readonly shell: readonly string[];
|
|
18
|
+
readonly shared: readonly string[];
|
|
19
|
+
readonly templates: Readonly<Record<string, TemplateDef>>;
|
|
20
|
+
}
|
|
21
|
+
export interface AppInstanceInput {
|
|
22
|
+
readonly template: string;
|
|
23
|
+
readonly name: string;
|
|
24
|
+
}
|
|
25
|
+
export declare const isAppDir: (dir: string) => boolean;
|
|
26
|
+
export declare const readTemplateManifest: (sourceDir: string) => TemplateManifest;
|
|
27
|
+
//# sourceMappingURL=template-manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-manifest.d.ts","sourceRoot":"","sources":["../src/template-manifest.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,uBAAuB,iDAAiD,CAAC;AACtF,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAM3C,MAAM,WAAW,eAAe;IAG5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAGzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAItB,QAAQ,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AACD,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAG7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAGrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;CACjD;AACD,MAAM,WAAW,gBAAgB;IAG7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAElC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;CAC7D;AAKD,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACzB;AAKD,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,KAAG,OAAmC,CAAC;AAI3E,eAAO,MAAM,oBAAoB,GAAI,WAAW,MAAM,KAAG,gBAMxD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
export const DEFAULT_TEMPLATE_SOURCE = "https://github.com/radarsu/00-canonical-repo";
|
|
4
|
+
export const DEFAULT_TEMPLATE_REF = "main";
|
|
5
|
+
export const isAppDir = (dir) => dir.startsWith("_apps/");
|
|
6
|
+
export const readTemplateManifest = (sourceDir) => {
|
|
7
|
+
const manifest = JSON.parse(readFileSync(join(sourceDir, "templates.json"), "utf8"));
|
|
8
|
+
if (typeof manifest.scope !== "string" || typeof manifest.templates !== "object") {
|
|
9
|
+
throw new Error(`${join(sourceDir, "templates.json")} is not a valid template manifest (missing scope/templates)`);
|
|
10
|
+
}
|
|
11
|
+
return manifest;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=template-manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-manifest.js","sourceRoot":"","sources":["../src/template-manifest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,uBAAuB,GAAG,8CAA8C,CAAC;AACtF,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAoD3C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAW,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAI3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAiB,EAAoB,EAAE;IACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC,CAAqB,CAAC;IACzG,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,6DAA6D,CAAC,CAAC;IACvH,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type RepoRole = "intent" | "desired-state" | "app";
|
|
2
|
+
export declare const REPO_ROLES: readonly RepoRole[];
|
|
3
|
+
export declare const INTENT_DIR = "intent";
|
|
4
|
+
export declare const TARGET_DIR = "desired-state";
|
|
5
|
+
export declare const APP_DIR = "app";
|
|
6
|
+
export declare const CONFIG_FILE = "deploy.config.ts";
|
|
7
|
+
export declare const ARTIFACT_FILE = "desired-state.json";
|
|
8
|
+
export declare const LAST_APPLIED_FILE = ".last-applied.json";
|
|
9
|
+
export declare const STATUS_FILE = "status.json";
|
|
10
|
+
export declare const ACCESS_FILE = "access.md";
|
|
11
|
+
export declare const ENV_FILE = ".env";
|
|
12
|
+
export declare const SECRETS_FILE = ".secrets.json";
|
|
13
|
+
export declare const KNOWN_HOSTS_FILE = ".known-hosts.json";
|
|
14
|
+
//# sourceMappingURL=workspace-layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-layout.d.ts","sourceRoot":"","sources":["../src/workspace-layout.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,eAAe,GAAG,KAAK,CAAC;AAC1D,eAAO,MAAM,UAAU,EAAE,SAAS,QAAQ,EAAuC,CAAC;AAIlF,eAAO,MAAM,UAAU,WAAW,CAAC;AACnC,eAAO,MAAM,UAAU,kBAAkB,CAAC;AAC1C,eAAO,MAAM,OAAO,QAAQ,CAAC;AAG7B,eAAO,MAAM,WAAW,qBAAqB,CAAC;AAC9C,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAClD,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AACtD,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,WAAW,cAAc,CAAC;AACvC,eAAO,MAAM,QAAQ,SAAS,CAAC;AAC/B,eAAO,MAAM,YAAY,kBAAkB,CAAC;AAG5C,eAAO,MAAM,gBAAgB,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const REPO_ROLES = ["intent", "desired-state", "app"];
|
|
2
|
+
export const INTENT_DIR = "intent";
|
|
3
|
+
export const TARGET_DIR = "desired-state";
|
|
4
|
+
export const APP_DIR = "app";
|
|
5
|
+
export const CONFIG_FILE = "deploy.config.ts";
|
|
6
|
+
export const ARTIFACT_FILE = "desired-state.json";
|
|
7
|
+
export const LAST_APPLIED_FILE = ".last-applied.json";
|
|
8
|
+
export const STATUS_FILE = "status.json";
|
|
9
|
+
export const ACCESS_FILE = "access.md";
|
|
10
|
+
export const ENV_FILE = ".env";
|
|
11
|
+
export const SECRETS_FILE = ".secrets.json";
|
|
12
|
+
export const KNOWN_HOSTS_FILE = ".known-hosts.json";
|
|
13
|
+
//# sourceMappingURL=workspace-layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-layout.js","sourceRoot":"","sources":["../src/workspace-layout.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,UAAU,GAAwB,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;AAIlF,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAG,eAAe,CAAC;AAC1C,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC;AAG7B,MAAM,CAAC,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAC9C,MAAM,CAAC,MAAM,aAAa,GAAG,oBAAoB,CAAC;AAClD,MAAM,CAAC,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC;AACzC,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC;AACvC,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC/B,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;AAG5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@intentic/scaffold",
|
|
3
|
+
"version": "1.15.1",
|
|
4
|
+
"description": "Shared scaffold for an intentic workspace — the intent-repo skeleton + deploy.config managed-region render/parse, used by the CLI's `init` and the sandbox daemon",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://gitlab.com/radarsu/intentic.git",
|
|
10
|
+
"directory": "_libs/scaffold"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public",
|
|
17
|
+
"registry": "https://registry.npmjs.org/"
|
|
18
|
+
},
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"import": {
|
|
23
|
+
"@intentic/src": "./src/index.ts",
|
|
24
|
+
"default": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"require": {
|
|
27
|
+
"@intentic/src": "./src/index.ts",
|
|
28
|
+
"default": "./dist/index.js"
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"dependencies": {
|
|
33
|
+
"tslib": "2.8.1",
|
|
34
|
+
"@intentic/graph": "1.15.1",
|
|
35
|
+
"@intentic/sandbox-contract": "1.15.1"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"typescript": "5.9.3",
|
|
39
|
+
"vitest": "4.1.9",
|
|
40
|
+
"@intentic/tsconfig": "0.0.0"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "tsc",
|
|
44
|
+
"watch": "tsc --build --watch",
|
|
45
|
+
"test": "vitest run"
|
|
46
|
+
}
|
|
47
|
+
}
|