create-relkit 0.4.0 → 0.5.0
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/dist/add-name.d.ts +9 -0
- package/dist/add-name.d.ts.map +1 -0
- package/dist/add-name.js +18 -0
- package/dist/add-name.js.map +1 -0
- package/dist/add-options-parser.d.ts +21 -0
- package/dist/add-options-parser.d.ts.map +1 -0
- package/dist/add-options-parser.js +103 -0
- package/dist/add-options-parser.js.map +1 -0
- package/dist/add-options-resource.d.ts +5 -0
- package/dist/add-options-resource.d.ts.map +1 -0
- package/dist/add-options-resource.js +18 -0
- package/dist/add-options-resource.js.map +1 -0
- package/dist/add-options.d.ts +6 -0
- package/dist/add-options.d.ts.map +1 -0
- package/dist/add-options.js +165 -0
- package/dist/add-options.js.map +1 -0
- package/dist/add-output.d.ts +4 -0
- package/dist/add-output.d.ts.map +1 -0
- package/dist/add-output.js +33 -0
- package/dist/add-output.js.map +1 -0
- package/dist/add-plan.d.ts +4 -0
- package/dist/add-plan.d.ts.map +1 -0
- package/dist/add-plan.js +62 -0
- package/dist/add-plan.js.map +1 -0
- package/dist/add-resolution-discovery.d.ts +13 -0
- package/dist/add-resolution-discovery.d.ts.map +1 -0
- package/dist/add-resolution-discovery.js +70 -0
- package/dist/add-resolution-discovery.js.map +1 -0
- package/dist/add-resolution-state.d.ts +23 -0
- package/dist/add-resolution-state.d.ts.map +1 -0
- package/dist/add-resolution-state.js +89 -0
- package/dist/add-resolution-state.js.map +1 -0
- package/dist/add-resolver-domain.d.ts +4 -0
- package/dist/add-resolver-domain.d.ts.map +1 -0
- package/dist/add-resolver-domain.js +150 -0
- package/dist/add-resolver-domain.js.map +1 -0
- package/dist/add-resolver-platform.d.ts +4 -0
- package/dist/add-resolver-platform.d.ts.map +1 -0
- package/dist/add-resolver-platform.js +112 -0
- package/dist/add-resolver-platform.js.map +1 -0
- package/dist/add-resolver-resources.d.ts +4 -0
- package/dist/add-resolver-resources.d.ts.map +1 -0
- package/dist/add-resolver-resources.js +150 -0
- package/dist/add-resolver-resources.js.map +1 -0
- package/dist/add-resolver.d.ts +14 -0
- package/dist/add-resolver.d.ts.map +1 -0
- package/dist/add-resolver.js +41 -0
- package/dist/add-resolver.js.map +1 -0
- package/dist/add-transaction-files.d.ts +12 -0
- package/dist/add-transaction-files.d.ts.map +1 -0
- package/dist/add-transaction-files.js +103 -0
- package/dist/add-transaction-files.js.map +1 -0
- package/dist/add-transaction.d.ts +17 -0
- package/dist/add-transaction.d.ts.map +1 -0
- package/dist/add-transaction.js +115 -0
- package/dist/add-transaction.js.map +1 -0
- package/dist/add-types.d.ts +136 -0
- package/dist/add-types.d.ts.map +1 -0
- package/dist/add-types.js +41 -0
- package/dist/add-types.js.map +1 -0
- package/dist/bucket-profiles.d.ts +4 -0
- package/dist/bucket-profiles.d.ts.map +1 -0
- package/dist/bucket-profiles.js +18 -0
- package/dist/bucket-profiles.js.map +1 -0
- package/dist/create-additions.d.ts +7 -0
- package/dist/create-additions.d.ts.map +1 -0
- package/dist/create-additions.js +27 -0
- package/dist/create-additions.js.map +1 -0
- package/dist/create-preview.d.ts +12 -0
- package/dist/create-preview.d.ts.map +1 -0
- package/dist/create-preview.js +50 -0
- package/dist/create-preview.js.map +1 -0
- package/dist/create-resolver.d.ts +14 -0
- package/dist/create-resolver.d.ts.map +1 -0
- package/dist/create-resolver.js +96 -0
- package/dist/create-resolver.js.map +1 -0
- package/dist/domain-planning.d.ts +24 -0
- package/dist/domain-planning.d.ts.map +1 -0
- package/dist/domain-planning.js +94 -0
- package/dist/domain-planning.js.map +1 -0
- package/dist/generate-files-utilities.d.ts +18 -0
- package/dist/generate-files-utilities.d.ts.map +1 -0
- package/dist/generate-files-utilities.js +87 -0
- package/dist/generate-files-utilities.js.map +1 -0
- package/dist/generate-files.d.ts +1 -12
- package/dist/generate-files.d.ts.map +1 -1
- package/dist/generate-files.js +38 -89
- package/dist/generate-files.js.map +1 -1
- package/dist/generate-output.d.ts +2 -1
- package/dist/generate-output.d.ts.map +1 -1
- package/dist/generate-output.js +9 -0
- package/dist/generate-output.js.map +1 -1
- package/dist/generate-process.d.ts +1 -1
- package/dist/generate-process.d.ts.map +1 -1
- package/dist/generate-process.js +7 -3
- package/dist/generate-process.js.map +1 -1
- package/dist/generate-types.d.ts +46 -0
- package/dist/generate-types.d.ts.map +1 -0
- package/dist/generate-types.js +20 -0
- package/dist/generate-types.js.map +1 -0
- package/dist/generate.d.ts +1 -38
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +34 -39
- package/dist/generate.js.map +1 -1
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +79 -9
- package/dist/index.js.map +1 -1
- package/dist/options.d.ts +5 -1
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +10 -1
- package/dist/options.js.map +1 -1
- package/dist/plan-builder.d.ts +33 -0
- package/dist/plan-builder.d.ts.map +1 -0
- package/dist/plan-builder.js +139 -0
- package/dist/plan-builder.js.map +1 -0
- package/dist/plan-manifest.d.ts +6 -0
- package/dist/plan-manifest.d.ts.map +1 -0
- package/dist/plan-manifest.js +40 -0
- package/dist/plan-manifest.js.map +1 -0
- package/dist/project-discovery-app.d.ts +7 -0
- package/dist/project-discovery-app.d.ts.map +1 -0
- package/dist/project-discovery-app.js +122 -0
- package/dist/project-discovery-app.js.map +1 -0
- package/dist/project-discovery-database.d.ts +11 -0
- package/dist/project-discovery-database.d.ts.map +1 -0
- package/dist/project-discovery-database.js +46 -0
- package/dist/project-discovery-database.js.map +1 -0
- package/dist/project-discovery-types.d.ts +45 -0
- package/dist/project-discovery-types.d.ts.map +1 -0
- package/dist/project-discovery-types.js +2 -0
- package/dist/project-discovery-types.js.map +1 -0
- package/dist/project-discovery.d.ts +4 -0
- package/dist/project-discovery.d.ts.map +1 -0
- package/dist/project-discovery.js +152 -0
- package/dist/project-discovery.js.map +1 -0
- package/dist/prompt-driver.d.ts +32 -0
- package/dist/prompt-driver.d.ts.map +1 -0
- package/dist/prompt-driver.js +42 -0
- package/dist/prompt-driver.js.map +1 -0
- package/dist/provider-planning-definitions.d.ts +35 -0
- package/dist/provider-planning-definitions.d.ts.map +1 -0
- package/dist/provider-planning-definitions.js +109 -0
- package/dist/provider-planning-definitions.js.map +1 -0
- package/dist/provider-planning.d.ts +11 -0
- package/dist/provider-planning.d.ts.map +1 -0
- package/dist/provider-planning.js +131 -0
- package/dist/provider-planning.js.map +1 -0
- package/dist/render-ai-sources.d.ts +18 -0
- package/dist/render-ai-sources.d.ts.map +1 -0
- package/dist/render-ai-sources.js +49 -0
- package/dist/render-ai-sources.js.map +1 -0
- package/dist/render-ai.d.ts +11 -0
- package/dist/render-ai.d.ts.map +1 -0
- package/dist/render-ai.js +61 -0
- package/dist/render-ai.js.map +1 -0
- package/dist/render-auth-schema.d.ts +3 -0
- package/dist/render-auth-schema.d.ts.map +1 -0
- package/dist/render-auth-schema.js +85 -0
- package/dist/render-auth-schema.js.map +1 -0
- package/dist/render-auth-sources.d.ts +3 -0
- package/dist/render-auth-sources.d.ts.map +1 -0
- package/dist/render-auth-sources.js +17 -0
- package/dist/render-auth-sources.js.map +1 -0
- package/dist/render-auth.d.ts +6 -0
- package/dist/render-auth.d.ts.map +1 -0
- package/dist/render-auth.js +84 -0
- package/dist/render-auth.js.map +1 -0
- package/dist/render-database-sources.d.ts +5 -0
- package/dist/render-database-sources.d.ts.map +1 -0
- package/dist/render-database-sources.js +65 -0
- package/dist/render-database-sources.js.map +1 -0
- package/dist/render-database.d.ts +13 -0
- package/dist/render-database.d.ts.map +1 -0
- package/dist/render-database.js +40 -0
- package/dist/render-database.js.map +1 -0
- package/dist/render-domain-register.d.ts +4 -0
- package/dist/render-domain-register.d.ts.map +1 -0
- package/dist/render-domain-register.js +11 -0
- package/dist/render-domain-register.js.map +1 -0
- package/dist/render-domain-sources.d.ts +19 -0
- package/dist/render-domain-sources.d.ts.map +1 -0
- package/dist/render-domain-sources.js +132 -0
- package/dist/render-domain-sources.js.map +1 -0
- package/dist/render-domain.d.ts +26 -0
- package/dist/render-domain.d.ts.map +1 -0
- package/dist/render-domain.js +98 -0
- package/dist/render-domain.js.map +1 -0
- package/dist/render-resource-sources.d.ts +4 -0
- package/dist/render-resource-sources.d.ts.map +1 -0
- package/dist/render-resource-sources.js +31 -0
- package/dist/render-resource-sources.js.map +1 -0
- package/dist/render-resources.d.ts +11 -0
- package/dist/render-resources.d.ts.map +1 -0
- package/dist/render-resources.js +53 -0
- package/dist/render-resources.js.map +1 -0
- package/dist/render-route-sources.d.ts +6 -0
- package/dist/render-route-sources.d.ts.map +1 -0
- package/dist/render-route-sources.js +35 -0
- package/dist/render-route-sources.js.map +1 -0
- package/dist/render-routes.d.ts +13 -0
- package/dist/render-routes.d.ts.map +1 -0
- package/dist/render-routes.js +48 -0
- package/dist/render-routes.js.map +1 -0
- package/dist/render-service.d.ts +6 -0
- package/dist/render-service.d.ts.map +1 -0
- package/dist/render-service.js +124 -0
- package/dist/render-service.js.map +1 -0
- package/dist/scaffold-catalog.d.ts +75 -0
- package/dist/scaffold-catalog.d.ts.map +1 -0
- package/dist/scaffold-catalog.js +24 -0
- package/dist/scaffold-catalog.js.map +1 -0
- package/dist/source-edit.d.ts +10 -0
- package/dist/source-edit.d.ts.map +1 -0
- package/dist/source-edit.js +136 -0
- package/dist/source-edit.js.map +1 -0
- package/dist/source-import-edit.d.ts +3 -0
- package/dist/source-import-edit.d.ts.map +1 -0
- package/dist/source-import-edit.js +52 -0
- package/dist/source-import-edit.js.map +1 -0
- package/dist/template-root.d.ts +5 -0
- package/dist/template-root.d.ts.map +1 -0
- package/dist/template-root.js +15 -0
- package/dist/template-root.js.map +1 -0
- package/dist/templates/default/README.md +1 -1
- package/dist/templates/default/v1/agent/.env.example +0 -2
- package/dist/templates/default/v1/agent/README.md +7 -8
- package/dist/templates/default/v1/agent/package.json +6 -4
- package/dist/templates/default/v1/agent/relkit.config.ts +5 -15
- package/dist/templates/default/v1/agent/src/hello/agents/assistant.agent.ts +37 -4
- package/dist/templates/default/v1/agent/src/hello/agents/review.agent.ts +43 -0
- package/dist/templates/default/v1/agent/src/platform/env.ts +0 -2
- package/dist/templates/default/v1/agent/tests/integration/hello.route.test.ts +17 -6
- package/dist/templates/default/v1/agent/tests/unit/assistant.agent.test.ts +14 -36
- package/dist/templates/default/v1/agent/tests/unit/review.agent.test.ts +19 -0
- package/dist/templates/default/v1/api/package.json +3 -3
- package/dist/templates/default/v1/fullstack/.env.example +1 -0
- package/dist/templates/default/v1/fullstack/README.md +15 -0
- package/dist/templates/default/v1/fullstack/gitignore +4 -0
- package/dist/templates/default/v1/fullstack/package.json +35 -0
- package/dist/templates/default/v1/fullstack/relkit.config.ts +15 -0
- package/dist/templates/default/v1/fullstack/src/hello/agents/assistant.agent.ts +46 -0
- package/dist/templates/default/v1/fullstack/src/hello/agents/review.agent.ts +43 -0
- package/dist/templates/default/v1/fullstack/src/hello/functions/hello.function.ts +10 -0
- package/dist/templates/default/v1/fullstack/src/hello/service.ts +4 -0
- package/dist/templates/default/v1/fullstack/src/hello/tools/lookup.tool.ts +9 -0
- package/dist/templates/default/v1/fullstack/src/platform/env.ts +5 -0
- package/dist/templates/default/v1/fullstack/src/routes/hello/route.ts +4 -0
- package/dist/templates/default/v1/fullstack/tests/integration/hello.route.test.ts +29 -0
- package/dist/templates/default/v1/fullstack/tests/unit/assistant.agent.test.ts +18 -0
- package/dist/templates/default/v1/fullstack/tests/unit/hello.function.test.ts +7 -0
- package/dist/templates/default/v1/fullstack/tests/unit/review.agent.test.ts +19 -0
- package/dist/templates/default/v1/fullstack/tsconfig.json +21 -0
- package/dist/templates/default/v1/fullstack/web/app/agent-config.ts +7 -0
- package/dist/templates/default/v1/fullstack/web/app/layout.tsx +12 -0
- package/dist/templates/default/v1/fullstack/web/app/page.tsx +85 -0
- package/dist/templates/default/v1/fullstack/web/app/providers.tsx +29 -0
- package/dist/templates/default/v1/fullstack/web/next-env.d.ts +2 -0
- package/dist/templates/default/v1/fullstack/web/next.config.ts +5 -0
- package/dist/templates/default/v1/fullstack/web/tsconfig.json +10 -0
- package/dist/templates/default/v1/minimal/package.json +3 -3
- package/dist/templates/default/v1/tasks/.env.example +2 -0
- package/dist/templates/default/v1/tasks/README.md +15 -0
- package/dist/templates/default/v1/tasks/examples/export-orders.json +1 -0
- package/dist/templates/default/v1/tasks/gitignore +10 -0
- package/dist/templates/default/v1/tasks/package.json +24 -0
- package/dist/templates/default/v1/tasks/relkit.config.ts +11 -0
- package/dist/templates/default/v1/tasks/src/orders/functions/health.function.ts +9 -0
- package/dist/templates/default/v1/tasks/src/orders/jobs/export-orders.job.ts +15 -0
- package/dist/templates/default/v1/tasks/src/orders/service.ts +10 -0
- package/dist/templates/default/v1/tasks/src/orders/tasks/export-orders.task.ts +19 -0
- package/dist/templates/default/v1/tasks/src/platform/env.ts +3 -0
- package/dist/templates/default/v1/tasks/src/routes/health/route.ts +4 -0
- package/dist/templates/default/v1/tasks/tests/unit/export-orders.task.test.ts +7 -0
- package/dist/templates/default/v1/tasks/tsconfig.json +14 -0
- package/package.json +6 -1
- package/dist/templates/default/v1/agent/src/hello/functions/ask-assistant.function.ts +0 -16
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { normalizeAddRequest } from "./add-options.js";
|
|
2
|
+
import { usage } from "./add-options-parser.js";
|
|
3
|
+
import { resolveDomainOptions } from "./add-resolver-domain.js";
|
|
4
|
+
import { resolvePlatformOptions } from "./add-resolver-platform.js";
|
|
5
|
+
import { resolveResourceOptions } from "./add-resolver-resources.js";
|
|
6
|
+
import { resolveServiceForKind } from "./add-resolution-discovery.js";
|
|
7
|
+
import { AddResolutionState, choices } from "./add-resolution-state.js";
|
|
8
|
+
import { ADD_KINDS } from "./add-types.js";
|
|
9
|
+
import { discoverProject } from "./project-discovery.js";
|
|
10
|
+
import { createClackPromptDriver } from "./prompt-driver.js";
|
|
11
|
+
export async function resolveAddRequest(args, context = {}) {
|
|
12
|
+
return (await resolveAddRequestDetails(args, context)).request;
|
|
13
|
+
}
|
|
14
|
+
export async function resolveAddRequestDetails(args, context = {}) {
|
|
15
|
+
const interactive = context.interactive === true;
|
|
16
|
+
const prompt = interactive ? (context.promptDriver ?? createClackPromptDriver()) : undefined;
|
|
17
|
+
const input = [...args];
|
|
18
|
+
let prompted = false;
|
|
19
|
+
if (!ADD_KINDS.includes(input[0])) {
|
|
20
|
+
if (!interactive || !prompt)
|
|
21
|
+
usage("Usage: relkit add <kind> [name] [options]");
|
|
22
|
+
const kind = await prompt.select({
|
|
23
|
+
message: "What would you like to add?",
|
|
24
|
+
options: choices(ADD_KINDS),
|
|
25
|
+
});
|
|
26
|
+
input.unshift(kind);
|
|
27
|
+
prompted = true;
|
|
28
|
+
}
|
|
29
|
+
const state = new AddResolutionState(input, context.cwd, interactive, prompt);
|
|
30
|
+
const discovery = await discoverProject(state.parsed.projectRoot);
|
|
31
|
+
await resolveServiceForKind(state, discovery);
|
|
32
|
+
await resolveDomainOptions(state, discovery);
|
|
33
|
+
await resolveResourceOptions(state, discovery);
|
|
34
|
+
await resolvePlatformOptions(state, discovery);
|
|
35
|
+
const normalizeContext = context.cwd === undefined ? {} : { cwd: context.cwd };
|
|
36
|
+
return Object.freeze({
|
|
37
|
+
request: normalizeAddRequest(state.args, normalizeContext),
|
|
38
|
+
prompted: prompted || state.prompted,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=add-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-resolver.js","sourceRoot":"","sources":["../src/add-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,SAAS,EAAmB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAqB,MAAM,oBAAoB,CAAC;AAahF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAuB,EACvB,UAA6B,EAAE;IAE/B,OAAO,CAAC,MAAM,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAuB,EACvB,UAA6B,EAAE;IAE/B,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC;IACjD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,IAAI,uBAAuB,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACxB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAA+B,CAAC,EAAE,CAAC;QAChE,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM;YAAE,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YAC/B,OAAO,EAAE,6BAA6B;YACtC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;SAC5B,CAAC,CAAC;QACH,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpB,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAClE,MAAM,qBAAqB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC9C,MAAM,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,OAAO,EAAE,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC;QAC1D,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC,QAAQ;KACrC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type ScaffoldFileOperation } from "./add-types.js";
|
|
2
|
+
export interface FileSnapshot {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
readonly content?: Uint8Array;
|
|
5
|
+
readonly mode?: number;
|
|
6
|
+
}
|
|
7
|
+
export declare function operationPath(root: string, path: string): string;
|
|
8
|
+
export declare function snapshotFiles(root: string, operations: readonly ScaffoldFileOperation[], includeLock: boolean): Promise<readonly FileSnapshot[]>;
|
|
9
|
+
export declare function validateOperationActions(root: string, operations: readonly ScaffoldFileOperation[]): Promise<void>;
|
|
10
|
+
export declare function applyFileOperations(root: string, operations: readonly ScaffoldFileOperation[], createdDirectories: Set<string>): Promise<void>;
|
|
11
|
+
export declare function restoreFiles(snapshots: readonly FileSnapshot[], createdDirectories: ReadonlySet<string>): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=add-transaction-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-transaction-files.d.ts","sourceRoot":"","sources":["../src/add-transaction-files.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuC,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEjG,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAUhE;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,qBAAqB,EAAE,EAC5C,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAalC;AAED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,qBAAqB,EAAE,GAC3C,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,SAAS,qBAAqB,EAAE,EAC5C,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,YAAY,CAChC,SAAS,EAAE,SAAS,YAAY,EAAE,EAClC,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAAC,GACtC,OAAO,CAAC,IAAI,CAAC,CAQf"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { lstat, mkdir, readFile, rename, rm, rmdir, writeFile, chmod } from "node:fs/promises";
|
|
3
|
+
import { dirname, relative, resolve, sep } from "node:path";
|
|
4
|
+
import { ADD_FAILURE_CODES, AddScaffoldError } from "./add-types.js";
|
|
5
|
+
export function operationPath(root, path) {
|
|
6
|
+
const absolute = resolve(root, path);
|
|
7
|
+
const local = relative(root, absolute);
|
|
8
|
+
if (local === "" || local === ".." || local.startsWith(`..${sep}`)) {
|
|
9
|
+
throw new AddScaffoldError(ADD_FAILURE_CODES.collision, `Scaffold path escapes the project: ${path}`);
|
|
10
|
+
}
|
|
11
|
+
return absolute;
|
|
12
|
+
}
|
|
13
|
+
export async function snapshotFiles(root, operations, includeLock) {
|
|
14
|
+
const paths = new Set(operations.map((operation) => operationPath(root, operation.path)));
|
|
15
|
+
if (includeLock)
|
|
16
|
+
paths.add(resolve(root, "bun.lock"));
|
|
17
|
+
const snapshots = [];
|
|
18
|
+
for (const path of paths) {
|
|
19
|
+
const metadata = await metadataFor(path);
|
|
20
|
+
if (metadata === undefined)
|
|
21
|
+
snapshots.push({ path });
|
|
22
|
+
else {
|
|
23
|
+
if (!metadata.isFile())
|
|
24
|
+
collision(`${path} is not a regular file.`);
|
|
25
|
+
snapshots.push({ path, content: await readFile(path), mode: metadata.mode & 0o777 });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return snapshots;
|
|
29
|
+
}
|
|
30
|
+
export async function validateOperationActions(root, operations) {
|
|
31
|
+
const seen = new Set();
|
|
32
|
+
for (const operation of operations) {
|
|
33
|
+
const path = operationPath(root, operation.path);
|
|
34
|
+
if (seen.has(path))
|
|
35
|
+
collision(`Scaffold plan contains duplicate path ${operation.path}.`);
|
|
36
|
+
seen.add(path);
|
|
37
|
+
const exists = (await metadataFor(path)) !== undefined;
|
|
38
|
+
if (operation.action === "create" && exists)
|
|
39
|
+
collision(`${operation.path} already exists.`);
|
|
40
|
+
if (operation.action === "update" && !exists)
|
|
41
|
+
collision(`${operation.path} does not exist.`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export async function applyFileOperations(root, operations, createdDirectories) {
|
|
45
|
+
for (const operation of operations) {
|
|
46
|
+
const path = operationPath(root, operation.path);
|
|
47
|
+
await ensureParent(root, dirname(path), createdDirectories);
|
|
48
|
+
await atomicWrite(path, operation.content, operation.mode);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export async function restoreFiles(snapshots, createdDirectories) {
|
|
52
|
+
for (const snapshot of [...snapshots].reverse()) {
|
|
53
|
+
if (snapshot.content === undefined)
|
|
54
|
+
await rm(snapshot.path, { force: true });
|
|
55
|
+
else
|
|
56
|
+
await atomicWrite(snapshot.path, snapshot.content, snapshot.mode);
|
|
57
|
+
}
|
|
58
|
+
for (const path of [...createdDirectories].sort((left, right) => right.length - left.length)) {
|
|
59
|
+
await rmdir(path).catch(() => undefined);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async function atomicWrite(path, content, mode) {
|
|
63
|
+
const temporary = `${path}.relkit-${randomUUID()}.tmp`;
|
|
64
|
+
try {
|
|
65
|
+
await writeFile(temporary, content, mode === undefined ? {} : { mode });
|
|
66
|
+
if (mode !== undefined)
|
|
67
|
+
await chmod(temporary, mode);
|
|
68
|
+
await rename(temporary, path);
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
await rm(temporary, { force: true }).catch(() => undefined);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async function ensureParent(root, path, created) {
|
|
75
|
+
const missing = [];
|
|
76
|
+
for (let current = path; current !== root; current = dirname(current)) {
|
|
77
|
+
const metadata = await metadataFor(current);
|
|
78
|
+
if (metadata) {
|
|
79
|
+
if (!metadata.isDirectory()) {
|
|
80
|
+
collision(`${relative(root, current)} is not a project directory.`);
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
missing.push(current);
|
|
85
|
+
}
|
|
86
|
+
await mkdir(path, { recursive: true });
|
|
87
|
+
for (const directory of missing)
|
|
88
|
+
created.add(directory);
|
|
89
|
+
}
|
|
90
|
+
async function metadataFor(path) {
|
|
91
|
+
try {
|
|
92
|
+
return await lstat(path);
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
if (error.code === "ENOENT")
|
|
96
|
+
return undefined;
|
|
97
|
+
throw error;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function collision(message) {
|
|
101
|
+
throw new AddScaffoldError(ADD_FAILURE_CODES.collision, message);
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=add-transaction-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-transaction-files.js","sourceRoot":"","sources":["../src/add-transaction-files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type AddResult, type ScaffoldPlan } from "./add-types.js";
|
|
2
|
+
export interface AddCommandResult {
|
|
3
|
+
readonly exitCode: number;
|
|
4
|
+
readonly stdout?: string;
|
|
5
|
+
readonly stderr?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ApplyScaffoldContext {
|
|
8
|
+
readonly commandRunner?: (command: readonly string[], cwd: string, signal?: AbortSignal) => Promise<AddCommandResult>;
|
|
9
|
+
readonly bunExecutable?: string;
|
|
10
|
+
readonly relkitExecutable?: string;
|
|
11
|
+
readonly signal?: AbortSignal;
|
|
12
|
+
readonly onProgress?: (message: string) => void;
|
|
13
|
+
readonly deferVerification?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/** Applies a complete plan and restores every touched project path on failure. */
|
|
16
|
+
export declare function applyScaffoldPlan(plan: ScaffoldPlan, context?: ApplyScaffoldContext): Promise<AddResult>;
|
|
17
|
+
//# sourceMappingURL=add-transaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-transaction.d.ts","sourceRoot":"","sources":["../src/add-transaction.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,YAAY,EAElB,MAAM,gBAAgB,CAAC;AAQxB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,CACvB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,kFAAkF;AAClF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,SAAS,CAAC,CAmEpB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { access, writeFile, rm } from "node:fs/promises";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { resolveRelkitExecutable } from "./generate-process.js";
|
|
5
|
+
import { ADD_FAILURE_CODES, AddScaffoldError, } from "./add-types.js";
|
|
6
|
+
import { applyFileOperations, restoreFiles, snapshotFiles, validateOperationActions, } from "./add-transaction-files.js";
|
|
7
|
+
/** Applies a complete plan and restores every touched project path on failure. */
|
|
8
|
+
export async function applyScaffoldPlan(plan, context = {}) {
|
|
9
|
+
throwIfAborted(context.signal);
|
|
10
|
+
await validateOperationActions(plan.projectRoot, plan.operations);
|
|
11
|
+
const packages = Object.keys(plan.dependencies).sort();
|
|
12
|
+
const snapshots = await snapshotFiles(plan.projectRoot, plan.operations, packages.length > 0);
|
|
13
|
+
const createdDirectories = new Set();
|
|
14
|
+
// Dev watches this process-scoped marker until installation/checking or rollback finishes.
|
|
15
|
+
const marker = join(plan.projectRoot, `.relkit-scaffold-${process.pid}-${randomUUID()}.tmp`);
|
|
16
|
+
await writeFile(marker, "", { flag: "wx" });
|
|
17
|
+
try {
|
|
18
|
+
await applyFileOperations(plan.projectRoot, plan.operations, createdDirectories);
|
|
19
|
+
let verification;
|
|
20
|
+
if (context.deferVerification) {
|
|
21
|
+
verification = {
|
|
22
|
+
status: "skipped",
|
|
23
|
+
reason: "Validation is deferred until project creation finishes.",
|
|
24
|
+
command: "bun run check",
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
else if (packages.length > 0 && plan.request.install) {
|
|
28
|
+
context.onProgress?.("Installing dependencies...");
|
|
29
|
+
await run(context, [context.bunExecutable ?? process.execPath, "install"], ADD_FAILURE_CODES.installation, plan.projectRoot);
|
|
30
|
+
verification = await check(plan, context);
|
|
31
|
+
}
|
|
32
|
+
else if (packages.length > 0 && !(await packagesAvailable(plan.projectRoot, packages))) {
|
|
33
|
+
verification = {
|
|
34
|
+
status: "skipped",
|
|
35
|
+
reason: `New packages are not installed: ${packages.join(", ")}`,
|
|
36
|
+
command: "bun run check",
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
verification = await check(plan, context);
|
|
41
|
+
}
|
|
42
|
+
return Object.freeze({
|
|
43
|
+
ok: true,
|
|
44
|
+
command: "add",
|
|
45
|
+
kind: plan.request.kind,
|
|
46
|
+
projectRoot: plan.projectRoot,
|
|
47
|
+
createdFiles: Object.freeze(plan.operations.filter((item) => item.action === "create").map((item) => item.path)),
|
|
48
|
+
updatedFiles: Object.freeze(plan.operations.filter((item) => item.action === "update").map((item) => item.path)),
|
|
49
|
+
installedPackages: Object.freeze(plan.request.install ? packages : []),
|
|
50
|
+
warnings: plan.warnings,
|
|
51
|
+
verification,
|
|
52
|
+
nextSteps: Object.freeze([
|
|
53
|
+
...plan.nextSteps,
|
|
54
|
+
...(verification.status === "skipped" && !context.deferVerification
|
|
55
|
+
? ["bun install", verification.command]
|
|
56
|
+
: []),
|
|
57
|
+
]),
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
await restoreFiles(snapshots, createdDirectories);
|
|
62
|
+
if (context.signal?.aborted) {
|
|
63
|
+
throw new AddScaffoldError(ADD_FAILURE_CODES.cancellation, "Scaffolding was cancelled.");
|
|
64
|
+
}
|
|
65
|
+
if (error instanceof AddScaffoldError)
|
|
66
|
+
throw error;
|
|
67
|
+
throw new AddScaffoldError(ADD_FAILURE_CODES.validation, message(error));
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
await rm(marker, { force: true });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async function check(plan, context) {
|
|
74
|
+
context.onProgress?.("Checking project...");
|
|
75
|
+
const executable = await resolveRelkitExecutable(context, plan.projectRoot);
|
|
76
|
+
await run(context, [executable, "check", "--project-root", plan.projectRoot], ADD_FAILURE_CODES.validation, plan.projectRoot);
|
|
77
|
+
return { status: "passed", command: "bun run check" };
|
|
78
|
+
}
|
|
79
|
+
async function run(context, command, code, cwd) {
|
|
80
|
+
throwIfAborted(context.signal);
|
|
81
|
+
const result = context.commandRunner
|
|
82
|
+
? await context.commandRunner(command, cwd, context.signal)
|
|
83
|
+
: await defaultRunner(command, cwd, context.signal);
|
|
84
|
+
if (result.exitCode !== 0) {
|
|
85
|
+
throw new AddScaffoldError(code, result.stderr?.trim() || result.stdout?.trim() || `${command[0]} failed.`);
|
|
86
|
+
}
|
|
87
|
+
throwIfAborted(context.signal);
|
|
88
|
+
}
|
|
89
|
+
async function defaultRunner(command, cwd, signal) {
|
|
90
|
+
const process = Bun.spawn([...command], {
|
|
91
|
+
cwd,
|
|
92
|
+
stdout: "pipe",
|
|
93
|
+
stderr: "pipe",
|
|
94
|
+
...(signal ? { signal } : {}),
|
|
95
|
+
});
|
|
96
|
+
const [exitCode, stdout, stderr] = await Promise.all([
|
|
97
|
+
process.exited,
|
|
98
|
+
new Response(process.stdout).text(),
|
|
99
|
+
new Response(process.stderr).text(),
|
|
100
|
+
]);
|
|
101
|
+
return { exitCode, stdout, stderr };
|
|
102
|
+
}
|
|
103
|
+
async function packagesAvailable(root, packages) {
|
|
104
|
+
const results = await Promise.all(packages.map((name) => access(join(root, "node_modules", ...name.split("/"))).then(() => true, () => false)));
|
|
105
|
+
return results.every(Boolean);
|
|
106
|
+
}
|
|
107
|
+
function throwIfAborted(signal) {
|
|
108
|
+
if (signal?.aborted) {
|
|
109
|
+
throw new AddScaffoldError(ADD_FAILURE_CODES.cancellation, "Scaffolding was cancelled.");
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function message(error) {
|
|
113
|
+
return error instanceof Error ? error.message : String(error);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=add-transaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-transaction.js","sourceRoot":"","sources":["../src/add-transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EACL,iBAAiB,EACjB,gBAAgB,GAIjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAqBpC,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAkB,EAClB,UAAgC,EAAE;IAElC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,wBAAwB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC9F,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7C,2FAA2F;IAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,OAAO,CAAC,GAAG,IAAI,UAAU,EAAE,MAAM,CAAC,CAAC;IAC7F,MAAM,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;QACjF,IAAI,YAAkC,CAAC;QACvC,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC9B,YAAY,GAAG;gBACb,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,yDAAyD;gBACjE,OAAO,EAAE,eAAe;aACzB,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvD,OAAO,CAAC,UAAU,EAAE,CAAC,4BAA4B,CAAC,CAAC;YACnD,MAAM,GAAG,CACP,OAAO,EACP,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,EACtD,iBAAiB,CAAC,YAAY,EAC9B,IAAI,CAAC,WAAW,CACjB,CAAC;YACF,YAAY,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;aAAM,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;YACzF,YAAY,GAAG;gBACb,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,mCAAmC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChE,OAAO,EAAE,eAAe;aACzB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,YAAY,EAAE,MAAM,CAAC,MAAM,CACzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CACpF;YACD,YAAY,EAAE,MAAM,CAAC,MAAM,CACzB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CACpF;YACD,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY;YACZ,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC;gBACvB,GAAG,IAAI,CAAC,SAAS;gBACjB,GAAG,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,iBAAiB;oBACjE,CAAC,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,OAAO,CAAC;oBACvC,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;YAC5B,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,YAAY,EAAE,4BAA4B,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,KAAK,YAAY,gBAAgB;YAAE,MAAM,KAAK,CAAC;QACnD,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3E,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,KAAK,CAClB,IAAkB,EAClB,OAA6B;IAE7B,OAAO,CAAC,UAAU,EAAE,CAAC,qBAAqB,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5E,MAAM,GAAG,CACP,OAAO,EACP,CAAC,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,CAAC,WAAW,CAAC,EACzD,iBAAiB,CAAC,UAAU,EAC5B,IAAI,CAAC,WAAW,CACjB,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,GAAG,CAChB,OAA6B,EAC7B,OAA0B,EAC1B,IAAiF,EACjF,GAAW;IAEX,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa;QAClC,CAAC,CAAC,MAAM,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC;QAC3D,CAAC,CAAC,MAAM,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,gBAAgB,CACxB,IAAI,EACJ,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAC1E,CAAC;IACJ,CAAC;IACD,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,OAA0B,EAC1B,GAAW,EACX,MAAoB;IAEpB,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CAAC,EAAE;QACtC,GAAG;QACH,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;QACd,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9B,CAAC,CAAC;IACH,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACnD,OAAO,CAAC,MAAM;QACd,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;QACnC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;KACpC,CAAC,CAAC;IACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,QAA2B;IACxE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACpB,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CACzD,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,KAAK,CACZ,CACF,CACF,CAAC;IACF,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,cAAc,CAAC,MAA+B;IACrD,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,gBAAgB,CAAC,iBAAiB,CAAC,YAAY,EAAE,4BAA4B,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
export declare const ADD_KINDS: readonly ["service", "function", "error", "event", "event-function", "task", "job", "cache", "bucket", "tool", "prompt", "agent", "constants", "route", "middleware", "transform", "database", "auth"];
|
|
2
|
+
export type AddKind = (typeof ADD_KINDS)[number];
|
|
3
|
+
export type ServiceInclude = Exclude<AddKind, "service" | "database" | "auth" | "middleware" | "transform">;
|
|
4
|
+
export type RouteMethod = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS";
|
|
5
|
+
export type DatabaseDialect = "sqlite" | "postgresql" | "mysql";
|
|
6
|
+
export interface AddRequestBase {
|
|
7
|
+
readonly projectRoot: string;
|
|
8
|
+
readonly service?: string;
|
|
9
|
+
readonly createService?: string;
|
|
10
|
+
readonly install: boolean;
|
|
11
|
+
}
|
|
12
|
+
type NamedRequest<Kind extends AddKind, Options = object> = AddRequestBase & Readonly<{
|
|
13
|
+
kind: Kind;
|
|
14
|
+
name: string;
|
|
15
|
+
}> & Readonly<Options>;
|
|
16
|
+
export type AddRequest = NamedRequest<"service", {
|
|
17
|
+
full: boolean;
|
|
18
|
+
include: readonly ServiceInclude[];
|
|
19
|
+
}> | NamedRequest<"function", {
|
|
20
|
+
internal: boolean;
|
|
21
|
+
}> | NamedRequest<"error"> | NamedRequest<"event", {
|
|
22
|
+
internal: boolean;
|
|
23
|
+
profile?: string;
|
|
24
|
+
}> | NamedRequest<"event-function", {
|
|
25
|
+
event: string;
|
|
26
|
+
delivery: "transient" | "durable";
|
|
27
|
+
profile?: string;
|
|
28
|
+
}> | NamedRequest<"task", {
|
|
29
|
+
version: string;
|
|
30
|
+
execution: "durable" | "retryable";
|
|
31
|
+
}> | NamedRequest<"job", {
|
|
32
|
+
target: string;
|
|
33
|
+
profile?: string;
|
|
34
|
+
}> | NamedRequest<"cache", {
|
|
35
|
+
profile?: string;
|
|
36
|
+
provider?: "redis" | "cloudflare-kv";
|
|
37
|
+
source?: "docker" | "connected" | "aws";
|
|
38
|
+
}> | NamedRequest<"bucket", {
|
|
39
|
+
profile?: string;
|
|
40
|
+
provider?: "s3" | "cloudflare-r2";
|
|
41
|
+
source?: "docker" | "connected" | "aws";
|
|
42
|
+
}> | NamedRequest<"tool", {
|
|
43
|
+
target: string;
|
|
44
|
+
createFunction?: boolean;
|
|
45
|
+
sideEffect: "none" | "read" | "write" | "external";
|
|
46
|
+
approval: "never" | "on-write" | "always";
|
|
47
|
+
}> | NamedRequest<"prompt", {
|
|
48
|
+
text: readonly string[];
|
|
49
|
+
}> | NamedRequest<"agent", {
|
|
50
|
+
model?: string;
|
|
51
|
+
tools: readonly string[];
|
|
52
|
+
prompt?: string;
|
|
53
|
+
instructions?: string;
|
|
54
|
+
}> | NamedRequest<"constants"> | (AddRequestBase & {
|
|
55
|
+
readonly kind: "route";
|
|
56
|
+
readonly path: string;
|
|
57
|
+
readonly mode: "route" | "service-route";
|
|
58
|
+
readonly maps: Readonly<Partial<Record<RouteMethod, string>>>;
|
|
59
|
+
}) | NamedRequest<"middleware", {
|
|
60
|
+
path: string;
|
|
61
|
+
}> | NamedRequest<"transform"> | (AddRequestBase & {
|
|
62
|
+
readonly kind: "database";
|
|
63
|
+
readonly orm: "drizzle";
|
|
64
|
+
readonly dialect: DatabaseDialect;
|
|
65
|
+
readonly authSchema?: boolean;
|
|
66
|
+
}) | (AddRequestBase & {
|
|
67
|
+
readonly kind: "auth";
|
|
68
|
+
readonly adapter: "better-auth";
|
|
69
|
+
readonly databaseDialect: DatabaseDialect;
|
|
70
|
+
readonly basePath: string;
|
|
71
|
+
});
|
|
72
|
+
export interface ScaffoldWarning {
|
|
73
|
+
readonly code: string;
|
|
74
|
+
readonly message: string;
|
|
75
|
+
}
|
|
76
|
+
export interface ScaffoldFileOperation {
|
|
77
|
+
readonly path: string;
|
|
78
|
+
readonly action: "create" | "update";
|
|
79
|
+
readonly content: string;
|
|
80
|
+
readonly mode?: number;
|
|
81
|
+
}
|
|
82
|
+
export interface ScaffoldPlan {
|
|
83
|
+
readonly request: AddRequest;
|
|
84
|
+
readonly projectRoot: string;
|
|
85
|
+
readonly operations: readonly ScaffoldFileOperation[];
|
|
86
|
+
readonly dependencies: Readonly<Record<string, string>>;
|
|
87
|
+
readonly artifacts: readonly Readonly<{
|
|
88
|
+
kind: string;
|
|
89
|
+
path: string;
|
|
90
|
+
id: string;
|
|
91
|
+
binding: string;
|
|
92
|
+
}>[];
|
|
93
|
+
readonly profiles: readonly Readonly<{
|
|
94
|
+
capability: string;
|
|
95
|
+
name: string;
|
|
96
|
+
}>[];
|
|
97
|
+
readonly warnings: readonly ScaffoldWarning[];
|
|
98
|
+
readonly nextSteps: readonly string[];
|
|
99
|
+
}
|
|
100
|
+
export type ScaffoldVerification = {
|
|
101
|
+
readonly status: "passed";
|
|
102
|
+
readonly command: string;
|
|
103
|
+
} | {
|
|
104
|
+
readonly status: "skipped";
|
|
105
|
+
readonly reason: string;
|
|
106
|
+
readonly command: string;
|
|
107
|
+
};
|
|
108
|
+
export interface AddResult {
|
|
109
|
+
readonly ok: true;
|
|
110
|
+
readonly command: "add";
|
|
111
|
+
readonly kind: AddKind;
|
|
112
|
+
readonly projectRoot: string;
|
|
113
|
+
readonly createdFiles: readonly string[];
|
|
114
|
+
readonly updatedFiles: readonly string[];
|
|
115
|
+
readonly installedPackages: readonly string[];
|
|
116
|
+
readonly warnings: readonly ScaffoldWarning[];
|
|
117
|
+
readonly verification: ScaffoldVerification;
|
|
118
|
+
readonly nextSteps: readonly string[];
|
|
119
|
+
}
|
|
120
|
+
export declare const ADD_FAILURE_CODES: Readonly<{
|
|
121
|
+
readonly usage: "RELKIT_ADD_USAGE";
|
|
122
|
+
readonly invalidProject: "RELKIT_ADD_INVALID_PROJECT";
|
|
123
|
+
readonly collision: "RELKIT_ADD_COLLISION";
|
|
124
|
+
readonly unsupportedSourceShape: "RELKIT_ADD_UNSUPPORTED_SOURCE_SHAPE";
|
|
125
|
+
readonly installation: "RELKIT_ADD_INSTALLATION_FAILED";
|
|
126
|
+
readonly validation: "RELKIT_ADD_VALIDATION_FAILED";
|
|
127
|
+
readonly cancellation: "RELKIT_ADD_CANCELLED";
|
|
128
|
+
}>;
|
|
129
|
+
export type AddFailureCode = (typeof ADD_FAILURE_CODES)[keyof typeof ADD_FAILURE_CODES];
|
|
130
|
+
export declare class AddScaffoldError extends Error {
|
|
131
|
+
readonly code: AddFailureCode;
|
|
132
|
+
readonly exitCode: 1 | 2 | 130;
|
|
133
|
+
constructor(code: AddFailureCode, message: string);
|
|
134
|
+
}
|
|
135
|
+
export {};
|
|
136
|
+
//# sourceMappingURL=add-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-types.d.ts","sourceRoot":"","sources":["../src/add-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export const ADD_KINDS = [
|
|
2
|
+
"service",
|
|
3
|
+
"function",
|
|
4
|
+
"error",
|
|
5
|
+
"event",
|
|
6
|
+
"event-function",
|
|
7
|
+
"task",
|
|
8
|
+
"job",
|
|
9
|
+
"cache",
|
|
10
|
+
"bucket",
|
|
11
|
+
"tool",
|
|
12
|
+
"prompt",
|
|
13
|
+
"agent",
|
|
14
|
+
"constants",
|
|
15
|
+
"route",
|
|
16
|
+
"middleware",
|
|
17
|
+
"transform",
|
|
18
|
+
"database",
|
|
19
|
+
"auth",
|
|
20
|
+
];
|
|
21
|
+
export const ADD_FAILURE_CODES = Object.freeze({
|
|
22
|
+
usage: "RELKIT_ADD_USAGE",
|
|
23
|
+
invalidProject: "RELKIT_ADD_INVALID_PROJECT",
|
|
24
|
+
collision: "RELKIT_ADD_COLLISION",
|
|
25
|
+
unsupportedSourceShape: "RELKIT_ADD_UNSUPPORTED_SOURCE_SHAPE",
|
|
26
|
+
installation: "RELKIT_ADD_INSTALLATION_FAILED",
|
|
27
|
+
validation: "RELKIT_ADD_VALIDATION_FAILED",
|
|
28
|
+
cancellation: "RELKIT_ADD_CANCELLED",
|
|
29
|
+
});
|
|
30
|
+
export class AddScaffoldError extends Error {
|
|
31
|
+
code;
|
|
32
|
+
exitCode;
|
|
33
|
+
constructor(code, message) {
|
|
34
|
+
super(message);
|
|
35
|
+
this.code = code;
|
|
36
|
+
this.name = "AddScaffoldError";
|
|
37
|
+
this.exitCode =
|
|
38
|
+
code === ADD_FAILURE_CODES.usage ? 2 : code === ADD_FAILURE_CODES.cancellation ? 130 : 1;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=add-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add-types.js","sourceRoot":"","sources":["../src/add-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,SAAS;IACT,UAAU;IACV,OAAO;IACP,OAAO;IACP,gBAAgB;IAChB,MAAM;IACN,KAAK;IACL,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,OAAO;IACP,WAAW;IACX,OAAO;IACP,YAAY;IACZ,WAAW;IACX,UAAU;IACV,MAAM;CACE,CAAC;AAsIX,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,KAAK,EAAE,kBAAkB;IACzB,cAAc,EAAE,4BAA4B;IAC5C,SAAS,EAAE,sBAAsB;IACjC,sBAAsB,EAAE,qCAAqC;IAC7D,YAAY,EAAE,gCAAgC;IAC9C,UAAU,EAAE,8BAA8B;IAC1C,YAAY,EAAE,sBAAsB;CAC5B,CAAC,CAAC;AAIZ,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAI9B;IAHF,QAAQ,CAAc;IAE/B,YACW,IAAoB,EAC7B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAgB;QAI7B,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,QAAQ;YACX,IAAI,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,iBAAiB,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;CACF"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ProjectDiscovery } from "./project-discovery-types.js";
|
|
2
|
+
/** Bucket profiles identify physical buckets and cannot have two descriptor owners. */
|
|
3
|
+
export declare function bucketProfileOwners(discovery: Pick<ProjectDiscovery, "projectRoot" | "artifacts" | "profiles">, read?: (path: string) => Promise<string>): Promise<ReadonlyMap<string, string>>;
|
|
4
|
+
//# sourceMappingURL=bucket-profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bucket-profiles.d.ts","sourceRoot":"","sources":["../src/bucket-profiles.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGrE,uFAAuF;AACvF,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE,aAAa,GAAG,WAAW,GAAG,UAAU,CAAC,EAC3E,IAAI,IAAI,MAAM,MAAM,oBAAwD,GAC3E,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAsBtC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { ADD_FAILURE_CODES, AddScaffoldError } from "./add-types.js";
|
|
4
|
+
import { readFactoryStringProperty } from "./source-edit.js";
|
|
5
|
+
/** Bucket profiles identify physical buckets and cannot have two descriptor owners. */
|
|
6
|
+
export async function bucketProfileOwners(discovery, read = (path) => readFile(join(discovery.projectRoot, path), "utf8")) {
|
|
7
|
+
const fallback = discovery.profiles.find((item) => item.capability === "bucket" && item.isDefault)?.name ??
|
|
8
|
+
"default";
|
|
9
|
+
const owners = new Map();
|
|
10
|
+
for (const artifact of discovery.artifacts.filter((item) => item.kind === "bucket" && item.exported)) {
|
|
11
|
+
const profile = readFactoryStringProperty(await read(artifact.path), artifact.path, "defineBucket", "profile");
|
|
12
|
+
if (profile === undefined && artifact.options.includes("profile"))
|
|
13
|
+
throw new AddScaffoldError(ADD_FAILURE_CODES.unsupportedSourceShape, `Cannot resolve bucket profile in ${artifact.path}.`);
|
|
14
|
+
owners.set(profile ?? fallback, artifact.id ?? artifact.path);
|
|
15
|
+
}
|
|
16
|
+
return owners;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=bucket-profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bucket-profiles.js","sourceRoot":"","sources":["../src/bucket-profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAA2E,EAC3E,OAAO,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAE5E,MAAM,QAAQ,GACZ,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI;QACvF,SAAS,CAAC;IACZ,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,CAC/C,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAClD,EAAE,CAAC;QACF,MAAM,OAAO,GAAG,yBAAyB,CACvC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EACzB,QAAQ,CAAC,IAAI,EACb,cAAc,EACd,SAAS,CACV,CAAC;QACF,IAAI,OAAO,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC/D,MAAM,IAAI,gBAAgB,CACxB,iBAAiB,CAAC,sBAAsB,EACxC,oCAAoC,QAAQ,CAAC,IAAI,GAAG,CACrD,CAAC;QACJ,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,QAAQ,EAAE,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AddResult } from "./add-types.js";
|
|
2
|
+
import type { GenerateProjectContext } from "./generate-types.js";
|
|
3
|
+
export interface StagedAdditions {
|
|
4
|
+
readonly results: readonly AddResult[];
|
|
5
|
+
}
|
|
6
|
+
export declare function addToStagedProject(projectRoot: string, context: GenerateProjectContext): Promise<StagedAdditions>;
|
|
7
|
+
//# sourceMappingURL=create-additions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-additions.d.ts","sourceRoot":"","sources":["../src/create-additions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAElE,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,CAAC;CACxC;AAED,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,eAAe,CAAC,CA6B1B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { formatScaffoldPlan } from "./add-output.js";
|
|
2
|
+
import { planAdd } from "./add-plan.js";
|
|
3
|
+
import { resolveAddRequestDetails } from "./add-resolver.js";
|
|
4
|
+
import { applyScaffoldPlan } from "./add-transaction.js";
|
|
5
|
+
export async function addToStagedProject(projectRoot, context) {
|
|
6
|
+
if (!context.interactive || !context.promptDriver)
|
|
7
|
+
return { results: [] };
|
|
8
|
+
const results = [];
|
|
9
|
+
while (await context.promptDriver.confirm({
|
|
10
|
+
message: results.length ? "Add another artifact?" : "Add an artifact before finishing?",
|
|
11
|
+
initialValue: false,
|
|
12
|
+
})) {
|
|
13
|
+
const resolved = await resolveAddRequestDetails(["--project-root", projectRoot, "--no-install"], { cwd: projectRoot, interactive: true, promptDriver: context.promptDriver });
|
|
14
|
+
const plan = await planAdd(resolved.request);
|
|
15
|
+
context.promptDriver.note(formatScaffoldPlan(plan), "Planned changes");
|
|
16
|
+
if (!(await context.promptDriver.confirm({ message: "Apply this addition?", initialValue: true }))) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
results.push(await applyScaffoldPlan(plan, {
|
|
20
|
+
deferVerification: true,
|
|
21
|
+
...(context.signal === undefined ? {} : { signal: context.signal }),
|
|
22
|
+
...(context.onProgress === undefined ? {} : { onProgress: context.onProgress }),
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
return Object.freeze({ results: Object.freeze(results) });
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=create-additions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-additions.js","sourceRoot":"","sources":["../src/create-additions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAQzD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,OAA+B;IAE/B,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,YAAY;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC1E,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,OACE,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;QACjC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,mCAAmC;QACvF,YAAY,EAAE,KAAK;KACpB,CAAC,EACF,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAC7C,CAAC,gBAAgB,EAAE,WAAW,EAAE,cAAc,CAAC,EAC/C,EAAE,GAAG,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAC5E,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC7C,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACvE,IACE,CAAC,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,EAC9F,CAAC;YACD,SAAS;QACX,CAAC;QACD,OAAO,CAAC,IAAI,CACV,MAAM,iBAAiB,CAAC,IAAI,EAAE;YAC5B,iBAAiB,EAAE,IAAI;YACvB,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;YACnE,GAAG,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;SAChF,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { GenerateProjectContext } from "./generate-types.js";
|
|
2
|
+
import type { CreateOptions } from "./options.js";
|
|
3
|
+
export interface CreateScaffoldPlan {
|
|
4
|
+
readonly destination: string;
|
|
5
|
+
readonly files: readonly string[];
|
|
6
|
+
readonly dependencies: Readonly<Record<string, string>>;
|
|
7
|
+
readonly profiles: readonly string[];
|
|
8
|
+
readonly warnings: readonly string[];
|
|
9
|
+
}
|
|
10
|
+
export declare function planCreate(options: CreateOptions, context?: Pick<GenerateProjectContext, "cwd" | "templateRoot">): Promise<CreateScaffoldPlan>;
|
|
11
|
+
export declare function formatCreatePlan(plan: CreateScaffoldPlan): string;
|
|
12
|
+
//# sourceMappingURL=create-preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-preview.d.ts","sourceRoot":"","sources":["../src/create-preview.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAKlD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,wBAAsB,UAAU,CAC9B,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,IAAI,CAAC,sBAAsB,EAAE,KAAK,GAAG,cAAc,CAAM,GACjE,OAAO,CAAC,kBAAkB,CAAC,CAqC7B;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAcjE"}
|