@mcp-rune/create 0.11.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/LICENSE +21 -0
- package/README.md +184 -0
- package/bin/rune.js +7 -0
- package/dist/commands/add-model.d.ts +5 -0
- package/dist/commands/add-model.d.ts.map +1 -0
- package/dist/commands/add-model.js +131 -0
- package/dist/commands/add-model.js.map +1 -0
- package/dist/commands/db-up.d.ts +2 -0
- package/dist/commands/db-up.d.ts.map +1 -0
- package/dist/commands/db-up.js +29 -0
- package/dist/commands/db-up.js.map +1 -0
- package/dist/commands/doctor/env-checks.d.ts +4 -0
- package/dist/commands/doctor/env-checks.d.ts.map +1 -0
- package/dist/commands/doctor/env-checks.js +88 -0
- package/dist/commands/doctor/env-checks.js.map +1 -0
- package/dist/commands/doctor/index.d.ts +21 -0
- package/dist/commands/doctor/index.d.ts.map +1 -0
- package/dist/commands/doctor/index.js +44 -0
- package/dist/commands/doctor/index.js.map +1 -0
- package/dist/commands/doctor/project-validation.d.ts +5 -0
- package/dist/commands/doctor/project-validation.d.ts.map +1 -0
- package/dist/commands/doctor/project-validation.js +166 -0
- package/dist/commands/doctor/project-validation.js.map +1 -0
- package/dist/commands/doctor.d.ts +7 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +306 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/inspect.d.ts +16 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +66 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/new/actions/apps.d.ts +5 -0
- package/dist/commands/new/actions/apps.d.ts.map +1 -0
- package/dist/commands/new/actions/apps.js +51 -0
- package/dist/commands/new/actions/apps.js.map +1 -0
- package/dist/commands/new/actions/architecture.d.ts +5 -0
- package/dist/commands/new/actions/architecture.d.ts.map +1 -0
- package/dist/commands/new/actions/architecture.js +45 -0
- package/dist/commands/new/actions/architecture.js.map +1 -0
- package/dist/commands/new/actions/auth.d.ts +5 -0
- package/dist/commands/new/actions/auth.d.ts.map +1 -0
- package/dist/commands/new/actions/auth.js +30 -0
- package/dist/commands/new/actions/auth.js.map +1 -0
- package/dist/commands/new/actions/database.d.ts +5 -0
- package/dist/commands/new/actions/database.d.ts.map +1 -0
- package/dist/commands/new/actions/database.js +60 -0
- package/dist/commands/new/actions/database.js.map +1 -0
- package/dist/commands/new/actions/fetch-template.d.ts +5 -0
- package/dist/commands/new/actions/fetch-template.d.ts.map +1 -0
- package/dist/commands/new/actions/fetch-template.js +22 -0
- package/dist/commands/new/actions/fetch-template.js.map +1 -0
- package/dist/commands/new/actions/intro.d.ts +5 -0
- package/dist/commands/new/actions/intro.d.ts.map +1 -0
- package/dist/commands/new/actions/intro.js +7 -0
- package/dist/commands/new/actions/intro.js.map +1 -0
- package/dist/commands/new/actions/layers.d.ts +5 -0
- package/dist/commands/new/actions/layers.d.ts.map +1 -0
- package/dist/commands/new/actions/layers.js +38 -0
- package/dist/commands/new/actions/layers.js.map +1 -0
- package/dist/commands/new/actions/models.d.ts +5 -0
- package/dist/commands/new/actions/models.d.ts.map +1 -0
- package/dist/commands/new/actions/models.js +18 -0
- package/dist/commands/new/actions/models.js.map +1 -0
- package/dist/commands/new/actions/next-steps.d.ts +5 -0
- package/dist/commands/new/actions/next-steps.d.ts.map +1 -0
- package/dist/commands/new/actions/next-steps.js +38 -0
- package/dist/commands/new/actions/next-steps.js.map +1 -0
- package/dist/commands/new/actions/observability.d.ts +5 -0
- package/dist/commands/new/actions/observability.d.ts.map +1 -0
- package/dist/commands/new/actions/observability.js +45 -0
- package/dist/commands/new/actions/observability.js.map +1 -0
- package/dist/commands/new/actions/post-scaffold.d.ts +5 -0
- package/dist/commands/new/actions/post-scaffold.d.ts.map +1 -0
- package/dist/commands/new/actions/post-scaffold.js +81 -0
- package/dist/commands/new/actions/post-scaffold.js.map +1 -0
- package/dist/commands/new/actions/preset.d.ts +5 -0
- package/dist/commands/new/actions/preset.d.ts.map +1 -0
- package/dist/commands/new/actions/preset.js +23 -0
- package/dist/commands/new/actions/preset.js.map +1 -0
- package/dist/commands/new/actions/prompts.d.ts +5 -0
- package/dist/commands/new/actions/prompts.d.ts.map +1 -0
- package/dist/commands/new/actions/prompts.js +33 -0
- package/dist/commands/new/actions/prompts.js.map +1 -0
- package/dist/commands/new/actions/render.d.ts +5 -0
- package/dist/commands/new/actions/render.d.ts.map +1 -0
- package/dist/commands/new/actions/render.js +35 -0
- package/dist/commands/new/actions/render.js.map +1 -0
- package/dist/commands/new/actions/scaffold-header.d.ts +5 -0
- package/dist/commands/new/actions/scaffold-header.d.ts.map +1 -0
- package/dist/commands/new/actions/scaffold-header.js +19 -0
- package/dist/commands/new/actions/scaffold-header.js.map +1 -0
- package/dist/commands/new/actions/scaffold-mode.d.ts +5 -0
- package/dist/commands/new/actions/scaffold-mode.d.ts.map +1 -0
- package/dist/commands/new/actions/scaffold-mode.js +49 -0
- package/dist/commands/new/actions/scaffold-mode.js.map +1 -0
- package/dist/commands/new/actions/summary.d.ts +5 -0
- package/dist/commands/new/actions/summary.d.ts.map +1 -0
- package/dist/commands/new/actions/summary.js +71 -0
- package/dist/commands/new/actions/summary.js.map +1 -0
- package/dist/commands/new/actions/toggles.d.ts +5 -0
- package/dist/commands/new/actions/toggles.d.ts.map +1 -0
- package/dist/commands/new/actions/toggles.js +25 -0
- package/dist/commands/new/actions/toggles.js.map +1 -0
- package/dist/commands/new/actions/tools.d.ts +5 -0
- package/dist/commands/new/actions/tools.d.ts.map +1 -0
- package/dist/commands/new/actions/tools.js +36 -0
- package/dist/commands/new/actions/tools.js.map +1 -0
- package/dist/commands/new/actions/transport.d.ts +5 -0
- package/dist/commands/new/actions/transport.d.ts.map +1 -0
- package/dist/commands/new/actions/transport.js +24 -0
- package/dist/commands/new/actions/transport.js.map +1 -0
- package/dist/commands/new/context.d.ts +76 -0
- package/dist/commands/new/context.d.ts.map +1 -0
- package/dist/commands/new/context.js +134 -0
- package/dist/commands/new/context.js.map +1 -0
- package/dist/commands/new/index.d.ts +5 -0
- package/dist/commands/new/index.d.ts.map +1 -0
- package/dist/commands/new/index.js +18 -0
- package/dist/commands/new/index.js.map +1 -0
- package/dist/commands/new/pipeline.d.ts +12 -0
- package/dist/commands/new/pipeline.d.ts.map +1 -0
- package/dist/commands/new/pipeline.js +67 -0
- package/dist/commands/new/pipeline.js.map +1 -0
- package/dist/commands/new/presets.d.ts +40 -0
- package/dist/commands/new/presets.d.ts.map +1 -0
- package/dist/commands/new/presets.js +91 -0
- package/dist/commands/new/presets.js.map +1 -0
- package/dist/commands/new.d.ts +24 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +162 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/post-scaffold.d.ts +6 -0
- package/dist/commands/post-scaffold.d.ts.map +1 -0
- package/dist/commands/post-scaffold.js +24 -0
- package/dist/commands/post-scaffold.js.map +1 -0
- package/dist/core/cancel.d.ts +3 -0
- package/dist/core/cancel.d.ts.map +1 -0
- package/dist/core/cancel.js +17 -0
- package/dist/core/cancel.js.map +1 -0
- package/dist/core/color.d.ts +12 -0
- package/dist/core/color.d.ts.map +1 -0
- package/dist/core/color.js +14 -0
- package/dist/core/color.js.map +1 -0
- package/dist/core/db-setup.d.ts +13 -0
- package/dist/core/db-setup.d.ts.map +1 -0
- package/dist/core/db-setup.js +63 -0
- package/dist/core/db-setup.js.map +1 -0
- package/dist/core/fs-utils.d.ts +4 -0
- package/dist/core/fs-utils.d.ts.map +1 -0
- package/dist/core/fs-utils.js +31 -0
- package/dist/core/fs-utils.js.map +1 -0
- package/dist/core/output.d.ts +19 -0
- package/dist/core/output.d.ts.map +1 -0
- package/dist/core/output.js +42 -0
- package/dist/core/output.js.map +1 -0
- package/dist/core/prompts.d.ts +2 -0
- package/dist/core/prompts.d.ts.map +1 -0
- package/dist/core/prompts.js +2 -0
- package/dist/core/prompts.js.map +1 -0
- package/dist/core/tasks.d.ts +11 -0
- package/dist/core/tasks.d.ts.map +1 -0
- package/dist/core/tasks.js +28 -0
- package/dist/core/tasks.js.map +1 -0
- package/dist/data/mascot.d.ts +13 -0
- package/dist/data/mascot.d.ts.map +1 -0
- package/dist/data/mascot.js +80 -0
- package/dist/data/mascot.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -0
- package/dist/render/copy-tree.d.ts +5 -0
- package/dist/render/copy-tree.d.ts.map +1 -0
- package/dist/render/copy-tree.js +146 -0
- package/dist/render/copy-tree.js.map +1 -0
- package/dist/render/fetch-template.d.ts +9 -0
- package/dist/render/fetch-template.d.ts.map +1 -0
- package/dist/render/fetch-template.js +113 -0
- package/dist/render/fetch-template.js.map +1 -0
- package/dist/render/model-gen.d.ts +3 -0
- package/dist/render/model-gen.d.ts.map +1 -0
- package/dist/render/model-gen.js +23 -0
- package/dist/render/model-gen.js.map +1 -0
- package/dist/templates/registry.d.ts +14 -0
- package/dist/templates/registry.d.ts.map +1 -0
- package/dist/templates/registry.js +34 -0
- package/dist/templates/registry.js.map +1 -0
- package/dist/types.d.ts +87 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/wizard/presets.d.ts +35 -0
- package/dist/wizard/presets.d.ts.map +1 -0
- package/dist/wizard/presets.js +67 -0
- package/dist/wizard/presets.js.map +1 -0
- package/dist/wizard/questions.d.ts +11 -0
- package/dist/wizard/questions.d.ts.map +1 -0
- package/dist/wizard/questions.js +154 -0
- package/dist/wizard/questions.js.map +1 -0
- package/package.json +52 -0
- package/templates/advanced/.env.example.ejs +82 -0
- package/templates/advanced/.node-version +1 -0
- package/templates/advanced/README.md.ejs +76 -0
- package/templates/advanced/__only_if_hasHttp__/src/servers/remote.ts.ejs +36 -0
- package/templates/advanced/__only_if_hasStdio__/src/servers/local.ts +30 -0
- package/templates/advanced/__only_if_useAxiosClient__/src/api/axios-client.ts +74 -0
- package/templates/advanced/__only_if_useCustomApiClient__/src/api/custom-client.ts +48 -0
- package/templates/advanced/__only_if_useCustomConvention__/src/conventions/custom-convention.ts +64 -0
- package/templates/advanced/__only_if_useCustomSearch__/src/api-extensions/custom-search-adapter.ts +30 -0
- package/templates/advanced/__only_if_useFetchClient__/src/api/fetch-client.ts +111 -0
- package/templates/advanced/__only_if_useFlatRestConvention__/src/conventions/flat-rest-convention.ts +85 -0
- package/templates/advanced/__only_if_usePinoLogger__/src/observability/logger.ts +62 -0
- package/templates/advanced/__only_if_useRansackSearch__/src/api-extensions/ransack-search-adapter.ts +41 -0
- package/templates/advanced/__only_if_useSharedModelAttrs__/src/models/app-base-model.ts +22 -0
- package/templates/advanced/__only_if_useVectorStorage__/src/storage/vector-store.ts +21 -0
- package/templates/advanced/__only_if_withAnalysis__/docker-compose.yml +18 -0
- package/templates/advanced/__only_if_withDomain__/src/domain/registry.ts +25 -0
- package/templates/advanced/config/schema.ts.ejs +126 -0
- package/templates/advanced/package.json.ejs +50 -0
- package/templates/advanced/src/config.ts.ejs +207 -0
- package/templates/advanced/src/db.ts.ejs +35 -0
- package/templates/advanced/src/models/_model_.ts.ejs +25 -0
- package/templates/advanced/src/models/index.ts.ejs +13 -0
- package/templates/advanced/src/profiles.ts +44 -0
- package/templates/advanced/src/prompts/_model_-prompt.ts.ejs +27 -0
- package/templates/advanced/src/prompts/index.ts.ejs +18 -0
- package/templates/advanced/src/scripts/db-migrate.ts +90 -0
- package/templates/advanced/src/tools/index.ts.ejs +133 -0
- package/templates/advanced/test/smoke.test.ts +16 -0
- package/templates/advanced/tsconfig.json +14 -0
- package/templates/simple/.env.example +3 -0
- package/templates/simple/.node-version +1 -0
- package/templates/simple/README.md +40 -0
- package/templates/simple/package.json.ejs +27 -0
- package/templates/simple/src/config.ts.ejs +56 -0
- package/templates/simple/src/models/_model_.ts.ejs +25 -0
- package/templates/simple/src/models/index.ts.ejs +13 -0
- package/templates/simple/src/prompts/_model_-prompt.ts.ejs +27 -0
- package/templates/simple/src/prompts/index.ts.ejs +18 -0
- package/templates/simple/src/server.ts +12 -0
- package/templates/simple/test/smoke.test.ts +16 -0
- package/templates/simple/tsconfig.json +14 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { execa } from 'execa';
|
|
2
|
+
import { done, hint, notice } from '../core/output.js';
|
|
3
|
+
export async function postScaffold(cwd, opts) {
|
|
4
|
+
if (opts.git) {
|
|
5
|
+
try {
|
|
6
|
+
await execa('git', ['init', '--quiet'], { cwd });
|
|
7
|
+
done('initialized git repo');
|
|
8
|
+
}
|
|
9
|
+
catch (err) {
|
|
10
|
+
notice(`git init failed: ${err.message}`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
if (opts.install) {
|
|
14
|
+
hint(' running npm install…');
|
|
15
|
+
try {
|
|
16
|
+
await execa('npm', ['install'], { cwd, stdio: 'inherit' });
|
|
17
|
+
done('installed dependencies');
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
notice(`npm install failed: ${err.message}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=post-scaffold.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-scaffold.js","sourceRoot":"","sources":["../../src/commands/post-scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAOvD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,IAAyB;IACvE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,oBAAqB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,uBAAwB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel.d.ts","sourceRoot":"","sources":["../../src/core/cancel.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,SAAe,GAAG,OAAO,CAAC,KAAK,IAAI,CAAC,CAK7F;AAED,wBAAgB,oBAAoB,IAAI,IAAI,CAQ3C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { cancel, isCancel } from '@clack/prompts';
|
|
2
|
+
export function bailIfCancel(value, message = 'Cancelled.') {
|
|
3
|
+
if (isCancel(value)) {
|
|
4
|
+
cancel(message);
|
|
5
|
+
process.exit(0);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export function installSigintHandler() {
|
|
9
|
+
process.on('SIGINT', () => {
|
|
10
|
+
cancel('Cancelled.');
|
|
11
|
+
process.exit(0);
|
|
12
|
+
});
|
|
13
|
+
process.on('SIGTERM', () => {
|
|
14
|
+
process.exit(0);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=cancel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../src/core/cancel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,UAAU,YAAY,CAAI,KAAiB,EAAE,OAAO,GAAG,YAAY;IACvE,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,YAAY,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import pc from 'picocolors';
|
|
2
|
+
export { pc };
|
|
3
|
+
export declare const brand: import("picocolors/types.js").Formatter;
|
|
4
|
+
export declare const accent: import("picocolors/types.js").Formatter;
|
|
5
|
+
export declare const muted: import("picocolors/types.js").Formatter;
|
|
6
|
+
export declare const success: import("picocolors/types.js").Formatter;
|
|
7
|
+
export declare const warn: import("picocolors/types.js").Formatter;
|
|
8
|
+
export declare const fail: import("picocolors/types.js").Formatter;
|
|
9
|
+
export declare const strong: import("picocolors/types.js").Formatter;
|
|
10
|
+
export declare const link: import("picocolors/types.js").Formatter;
|
|
11
|
+
export declare function chip(label: string): string;
|
|
12
|
+
//# sourceMappingURL=color.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/core/color.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,EAAE,EAAE,CAAC;AAEd,eAAO,MAAM,KAAK,yCAAS,CAAC;AAC5B,eAAO,MAAM,MAAM,yCAAU,CAAC;AAC9B,eAAO,MAAM,KAAK,yCAAS,CAAC;AAC5B,eAAO,MAAM,OAAO,yCAAW,CAAC;AAChC,eAAO,MAAM,IAAI,yCAAY,CAAC;AAC9B,eAAO,MAAM,IAAI,yCAAS,CAAC;AAC3B,eAAO,MAAM,MAAM,yCAAU,CAAC;AAC9B,eAAO,MAAM,IAAI,yCAAU,CAAC;AAE5B,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import pc from 'picocolors';
|
|
2
|
+
export { pc };
|
|
3
|
+
export const brand = pc.red;
|
|
4
|
+
export const accent = pc.cyan;
|
|
5
|
+
export const muted = pc.dim;
|
|
6
|
+
export const success = pc.green;
|
|
7
|
+
export const warn = pc.yellow;
|
|
8
|
+
export const fail = pc.red;
|
|
9
|
+
export const strong = pc.bold;
|
|
10
|
+
export const link = pc.blue;
|
|
11
|
+
export function chip(label) {
|
|
12
|
+
return pc.inverse(pc.bold(` ${label} `));
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=color.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/core/color.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,EAAE,EAAE,CAAC;AAEd,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC;AAC5B,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;AAC9B,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC;AAC5B,MAAM,CAAC,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;AAChC,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC;AAC9B,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC;AAC3B,MAAM,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC;AAC9B,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;AAE5B,MAAM,UAAU,IAAI,CAAC,KAAa;IAChC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface RunOpts {
|
|
2
|
+
stdio?: 'inherit' | 'pipe';
|
|
3
|
+
}
|
|
4
|
+
export declare function startDockerDb(cwd: string, opts?: RunOpts): Promise<void>;
|
|
5
|
+
export declare function waitForDbHealthy(cwd: string, timeoutMs: number): Promise<boolean>;
|
|
6
|
+
export declare function runMigrations(cwd: string, opts?: RunOpts): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Upsert DATABASE_URL into .env. Seeds from .env.example when .env is absent.
|
|
9
|
+
* Rewrites the existing DATABASE_URL line in place (commented or not) so we
|
|
10
|
+
* don't accumulate duplicate keys across re-runs.
|
|
11
|
+
*/
|
|
12
|
+
export declare function writeEnvDatabaseUrl(cwd: string, url: string): void;
|
|
13
|
+
//# sourceMappingURL=db-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-setup.d.ts","sourceRoot":"","sources":["../../src/core/db-setup.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,OAAO;IACtB,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC5B;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,OAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlF;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgBvF;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,OAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlF;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CA6BlE"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { execa } from 'execa';
|
|
4
|
+
export async function startDockerDb(cwd, opts = {}) {
|
|
5
|
+
await execa('docker', ['compose', 'up', '-d', 'db'], {
|
|
6
|
+
cwd,
|
|
7
|
+
stdio: opts.stdio ?? 'pipe',
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
export async function waitForDbHealthy(cwd, timeoutMs) {
|
|
11
|
+
const deadline = Date.now() + timeoutMs;
|
|
12
|
+
while (Date.now() < deadline) {
|
|
13
|
+
try {
|
|
14
|
+
const { stdout } = await execa('docker', ['compose', 'ps', 'db', '--format', '{{.Health}}'], { cwd, timeout: 3000 });
|
|
15
|
+
if (stdout.trim() === 'healthy')
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
/* not ready */
|
|
20
|
+
}
|
|
21
|
+
await new Promise((r) => setTimeout(r, 500));
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
export async function runMigrations(cwd, opts = {}) {
|
|
26
|
+
await execa('npm', ['run', 'db:migrate'], {
|
|
27
|
+
cwd,
|
|
28
|
+
stdio: opts.stdio ?? 'pipe',
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Upsert DATABASE_URL into .env. Seeds from .env.example when .env is absent.
|
|
33
|
+
* Rewrites the existing DATABASE_URL line in place (commented or not) so we
|
|
34
|
+
* don't accumulate duplicate keys across re-runs.
|
|
35
|
+
*/
|
|
36
|
+
export function writeEnvDatabaseUrl(cwd, url) {
|
|
37
|
+
const envPath = resolve(cwd, '.env');
|
|
38
|
+
const examplePath = resolve(cwd, '.env.example');
|
|
39
|
+
let content = '';
|
|
40
|
+
if (existsSync(envPath)) {
|
|
41
|
+
content = readFileSync(envPath, 'utf-8');
|
|
42
|
+
}
|
|
43
|
+
else if (existsSync(examplePath)) {
|
|
44
|
+
content = readFileSync(examplePath, 'utf-8');
|
|
45
|
+
}
|
|
46
|
+
const lines = content.split(/\r?\n/);
|
|
47
|
+
let replaced = false;
|
|
48
|
+
const updated = lines.map((line) => {
|
|
49
|
+
if (/^\s*#?\s*DATABASE_URL\s*=/.test(line)) {
|
|
50
|
+
replaced = true;
|
|
51
|
+
return `DATABASE_URL=${url}`;
|
|
52
|
+
}
|
|
53
|
+
return line;
|
|
54
|
+
});
|
|
55
|
+
if (!replaced) {
|
|
56
|
+
if (updated.length > 0 && updated[updated.length - 1] !== '') {
|
|
57
|
+
updated.push('');
|
|
58
|
+
}
|
|
59
|
+
updated.push(`DATABASE_URL=${url}`);
|
|
60
|
+
}
|
|
61
|
+
writeFileSync(envPath, updated.join('\n'));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=db-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db-setup.js","sourceRoot":"","sources":["../../src/core/db-setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../src/core/fs-utils.ts"],"names":[],"mappings":"AAEA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI7C;AAID,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAQpE;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQjD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { existsSync, readdirSync, statSync } from 'node:fs';
|
|
2
|
+
export function isEmpty(path) {
|
|
3
|
+
if (!existsSync(path))
|
|
4
|
+
return true;
|
|
5
|
+
if (!statSync(path).isDirectory())
|
|
6
|
+
return false;
|
|
7
|
+
return readdirSync(path).length === 0;
|
|
8
|
+
}
|
|
9
|
+
const NPM_NAME = /^(?:@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/;
|
|
10
|
+
export function validatePackageName(name) {
|
|
11
|
+
if (!name || name.trim().length === 0)
|
|
12
|
+
return 'Name cannot be empty.';
|
|
13
|
+
if (name.length > 214)
|
|
14
|
+
return 'Name must be 214 characters or fewer.';
|
|
15
|
+
if (name !== name.trim())
|
|
16
|
+
return 'Name cannot start or end with whitespace.';
|
|
17
|
+
if (!NPM_NAME.test(name)) {
|
|
18
|
+
return 'Name must be a valid npm package name (lowercase, dashes, optional scope).';
|
|
19
|
+
}
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
export function toValidName(input) {
|
|
23
|
+
return input
|
|
24
|
+
.trim()
|
|
25
|
+
.toLowerCase()
|
|
26
|
+
.replace(/[^a-z0-9-._~/@]/g, '-')
|
|
27
|
+
.replace(/^[-._~]+/, '')
|
|
28
|
+
.replace(/[-._~]+$/, '')
|
|
29
|
+
.replace(/-{2,}/g, '-');
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=fs-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../../src/core/fs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE5D,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,QAAQ,GAAG,0DAA0D,CAAC;AAE5E,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,uBAAuB,CAAC;IACtE,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,uCAAuC,CAAC;IACtE,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,2CAA2C,CAAC;IAC7E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,4EAA4E,CAAC;IACtF,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,KAAK;SACT,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC;SAChC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export declare function info(msg: string): void;
|
|
2
|
+
export declare function hint(msg: string): void;
|
|
3
|
+
export declare function space(): void;
|
|
4
|
+
export declare function step(label: string): void;
|
|
5
|
+
export declare function done(msg: string): void;
|
|
6
|
+
export declare function ok(msg: string): void;
|
|
7
|
+
export declare function notice(msg: string): void;
|
|
8
|
+
export declare function error(msg: string): void;
|
|
9
|
+
export declare function heading(title: string): void;
|
|
10
|
+
export declare function listAdd(path: string): void;
|
|
11
|
+
export declare function listEdit(path: string): void;
|
|
12
|
+
export declare function scaffoldHeader(project: string, suffix: string): void;
|
|
13
|
+
export interface BannerInput {
|
|
14
|
+
version: string;
|
|
15
|
+
charm: string;
|
|
16
|
+
welcome: string;
|
|
17
|
+
}
|
|
18
|
+
export declare function banner({ version, charm, welcome }: BannerInput): void;
|
|
19
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/core/output.ts"],"names":[],"mappings":"AAEA,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,wBAAgB,KAAK,IAAI,IAAI,CAE5B;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAExC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,wBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEpC;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAExC;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAEpE;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,WAAW,GAAG,IAAI,CAGrE"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { accent, brand, chip, fail, muted, strong, success, warn } from './color.js';
|
|
2
|
+
export function info(msg) {
|
|
3
|
+
console.log(msg);
|
|
4
|
+
}
|
|
5
|
+
export function hint(msg) {
|
|
6
|
+
console.log(muted(msg));
|
|
7
|
+
}
|
|
8
|
+
export function space() {
|
|
9
|
+
console.log();
|
|
10
|
+
}
|
|
11
|
+
export function step(label) {
|
|
12
|
+
console.log(strong(`▸ ${label}`));
|
|
13
|
+
}
|
|
14
|
+
export function done(msg) {
|
|
15
|
+
console.log(`${accent('✓')} ${msg}`);
|
|
16
|
+
}
|
|
17
|
+
export function ok(msg) {
|
|
18
|
+
console.log(success(`✓ ${msg}`));
|
|
19
|
+
}
|
|
20
|
+
export function notice(msg) {
|
|
21
|
+
console.warn(warn(`! ${msg}`));
|
|
22
|
+
}
|
|
23
|
+
export function error(msg) {
|
|
24
|
+
console.error(fail(msg));
|
|
25
|
+
}
|
|
26
|
+
export function heading(title) {
|
|
27
|
+
console.log(strong(title));
|
|
28
|
+
}
|
|
29
|
+
export function listAdd(path) {
|
|
30
|
+
console.log(` ${muted('+')} ${path}`);
|
|
31
|
+
}
|
|
32
|
+
export function listEdit(path) {
|
|
33
|
+
console.log(` ${muted('~')} ${path}`);
|
|
34
|
+
}
|
|
35
|
+
export function scaffoldHeader(project, suffix) {
|
|
36
|
+
console.log(`${strong('Scaffolding ')}${brand(strong(project))} ${muted(`(${suffix})…`)}`);
|
|
37
|
+
}
|
|
38
|
+
export function banner({ version, charm, welcome }) {
|
|
39
|
+
console.log();
|
|
40
|
+
console.log(`${chip('rune')} ${brand(`v${version}`)} ${muted(charm)} ${welcome}`);
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/core/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAErF,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAa;IAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,EAAE,CAAC,GAAW;IAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAW;IAChC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe,EAAE,MAAc;IAC5D,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7F,CAAC;AAQD,MAAM,UAAU,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAe;IAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,GAAG,EACH,WAAW,EACX,IAAI,EACJ,KAAK,EACL,MAAM,EACN,OAAO,EACP,IAAI,GACL,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/core/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,OAAO,EACP,KAAK,EACL,KAAK,EACL,QAAQ,EACR,GAAG,EACH,WAAW,EACX,IAAI,EACJ,KAAK,EACL,MAAM,EACN,OAAO,EACP,IAAI,GACL,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface Task<Ctx = unknown> {
|
|
2
|
+
start: string;
|
|
3
|
+
end: string;
|
|
4
|
+
while: (ctx: Ctx) => Promise<void>;
|
|
5
|
+
onError?: (err: unknown, ctx: Ctx) => Promise<void> | void;
|
|
6
|
+
}
|
|
7
|
+
export interface RunTasksOptions {
|
|
8
|
+
dryRun?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function runTasks<Ctx>(ctx: Ctx, tasks: ReadonlyArray<Task<Ctx>>, opts?: RunTasksOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=tasks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/core/tasks.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,IAAI,CAAC,GAAG,GAAG,OAAO;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC5D;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,QAAQ,CAAC,GAAG,EAChC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC/B,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CAuBf"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { spinner } from '@clack/prompts';
|
|
2
|
+
import { muted } from './color.js';
|
|
3
|
+
export async function runTasks(ctx, tasks, opts = {}) {
|
|
4
|
+
if (opts.dryRun) {
|
|
5
|
+
for (const task of tasks) {
|
|
6
|
+
console.log(muted(`[dry-run] would: ${task.start}`));
|
|
7
|
+
}
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
for (const task of tasks) {
|
|
11
|
+
const s = spinner();
|
|
12
|
+
s.start(task.start);
|
|
13
|
+
try {
|
|
14
|
+
await task.while(ctx);
|
|
15
|
+
s.stop(task.end);
|
|
16
|
+
}
|
|
17
|
+
catch (err) {
|
|
18
|
+
s.error(`failed: ${task.start}`);
|
|
19
|
+
if (task.onError) {
|
|
20
|
+
await task.onError(err, ctx);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
throw err;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/core/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAanC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,GAAQ,EACR,KAA+B,EAC/B,OAAwB,EAAE;IAE1B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO;IACT,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;QACpB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC/B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface Mascot {
|
|
2
|
+
welcome: string;
|
|
3
|
+
signoff: string;
|
|
4
|
+
charm: string;
|
|
5
|
+
sigil: string;
|
|
6
|
+
}
|
|
7
|
+
export interface PickMascotOptions {
|
|
8
|
+
now?: Date;
|
|
9
|
+
/** Deterministic seed for tests; defaults to a value derived from current ms. */
|
|
10
|
+
seed?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function pickMascot(opts?: PickMascotOptions): Mascot;
|
|
13
|
+
//# sourceMappingURL=mascot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mascot.d.ts","sourceRoot":"","sources":["../../src/data/mascot.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAiFD,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,IAAI,CAAC;IACX,iFAAiF;IACjF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,UAAU,CAAC,IAAI,GAAE,iBAAsB,GAAG,MAAM,CAU/D"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
const DEFAULT = {
|
|
2
|
+
welcomes: [
|
|
3
|
+
'Conjuring a fresh server.',
|
|
4
|
+
'Etching your sigil.',
|
|
5
|
+
'Forging a new rune.',
|
|
6
|
+
'Weaving runes into a server.',
|
|
7
|
+
'Compiling the incantation.',
|
|
8
|
+
'Drafting the protocol.',
|
|
9
|
+
],
|
|
10
|
+
signoffs: [
|
|
11
|
+
'May the protocol be with you.',
|
|
12
|
+
'Cast it well.',
|
|
13
|
+
'Run it, mage.',
|
|
14
|
+
'Your sigil is set.',
|
|
15
|
+
'Carry it carefully.',
|
|
16
|
+
'Go forth and tool.',
|
|
17
|
+
],
|
|
18
|
+
charms: ['⟁', '❖', '◇', '✶', '✦'],
|
|
19
|
+
sigils: ['▸', '›', '»', '→'],
|
|
20
|
+
};
|
|
21
|
+
const WINTER = {
|
|
22
|
+
welcomes: [
|
|
23
|
+
'A cold incantation begins.',
|
|
24
|
+
'Frozen sigil, warm protocol.',
|
|
25
|
+
'Winter runes are sharper.',
|
|
26
|
+
],
|
|
27
|
+
signoffs: [
|
|
28
|
+
'Stay warm by the protocol.',
|
|
29
|
+
'May the cache stay warm.',
|
|
30
|
+
'Wrap up — and ship it.',
|
|
31
|
+
],
|
|
32
|
+
charms: ['❄', '✻', '✺'],
|
|
33
|
+
sigils: DEFAULT.sigils,
|
|
34
|
+
};
|
|
35
|
+
const LAUNCH_WEEK = {
|
|
36
|
+
welcomes: [
|
|
37
|
+
'Liftoff is a stack frame away.',
|
|
38
|
+
'Spinning up the launch ring.',
|
|
39
|
+
'Plotting the trajectory.',
|
|
40
|
+
],
|
|
41
|
+
signoffs: [
|
|
42
|
+
'Liftoff confirmed.',
|
|
43
|
+
'Wheels up.',
|
|
44
|
+
'Cleared for the protocol.',
|
|
45
|
+
],
|
|
46
|
+
charms: ['✺', '✷', '✸'],
|
|
47
|
+
sigils: ['▸', '↑', '↗'],
|
|
48
|
+
};
|
|
49
|
+
function getSeason(now) {
|
|
50
|
+
const m = now.getUTCMonth(); // 0-based
|
|
51
|
+
const d = now.getUTCDate();
|
|
52
|
+
// Winter: Dec 1 — Jan 31
|
|
53
|
+
if (m === 11 || m === 0)
|
|
54
|
+
return 'winter';
|
|
55
|
+
// MCP-anniversary "launch week" — first week of November.
|
|
56
|
+
// (Pulled the spec going public in Nov 2024 as the anchor.)
|
|
57
|
+
if (m === 10 && d <= 7)
|
|
58
|
+
return 'launch';
|
|
59
|
+
return 'default';
|
|
60
|
+
}
|
|
61
|
+
const SEASONS = {
|
|
62
|
+
winter: WINTER,
|
|
63
|
+
launch: LAUNCH_WEEK,
|
|
64
|
+
default: DEFAULT,
|
|
65
|
+
};
|
|
66
|
+
function pick(arr, seed) {
|
|
67
|
+
return arr[seed % arr.length];
|
|
68
|
+
}
|
|
69
|
+
export function pickMascot(opts = {}) {
|
|
70
|
+
const now = opts.now ?? new Date();
|
|
71
|
+
const seed = opts.seed ?? Math.floor(Math.random() * 1_000_000);
|
|
72
|
+
const set = SEASONS[getSeason(now)];
|
|
73
|
+
return {
|
|
74
|
+
welcome: pick(set.welcomes, seed),
|
|
75
|
+
signoff: pick(set.signoffs, seed + 1),
|
|
76
|
+
charm: pick(set.charms, seed + 2),
|
|
77
|
+
sigil: pick(set.sigils, seed + 3),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=mascot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mascot.js","sourceRoot":"","sources":["../../src/data/mascot.ts"],"names":[],"mappings":"AAcA,MAAM,OAAO,GAAgB;IAC3B,QAAQ,EAAE;QACR,2BAA2B;QAC3B,qBAAqB;QACrB,qBAAqB;QACrB,8BAA8B;QAC9B,4BAA4B;QAC5B,wBAAwB;KACzB;IACD,QAAQ,EAAE;QACR,+BAA+B;QAC/B,eAAe;QACf,eAAe;QACf,oBAAoB;QACpB,qBAAqB;QACrB,oBAAoB;KACrB;IACD,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACjC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,GAAgB;IAC1B,QAAQ,EAAE;QACR,4BAA4B;QAC5B,8BAA8B;QAC9B,2BAA2B;KAC5B;IACD,QAAQ,EAAE;QACR,4BAA4B;QAC5B,0BAA0B;QAC1B,wBAAwB;KACzB;IACD,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC,MAAM;CACvB,CAAC;AAEF,MAAM,WAAW,GAAgB;IAC/B,QAAQ,EAAE;QACR,gCAAgC;QAChC,8BAA8B;QAC9B,0BAA0B;KAC3B;IACD,QAAQ,EAAE;QACR,oBAAoB;QACpB,YAAY;QACZ,2BAA2B;KAC5B;IACD,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACvB,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CACxB,CAAC;AAEF,SAAS,SAAS,CAAC,GAAS;IAC1B,MAAM,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,UAAU;IACvC,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC;IAC3B,yBAAyB;IACzB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IACzC,0DAA0D;IAC1D,4DAA4D;IAC5D,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACxC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,OAAO,GAAyD;IACpE,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,OAAO;CACjB,CAAC;AAEF,SAAS,IAAI,CAAI,GAAiB,EAAE,IAAY;IAC9C,OAAO,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAE,CAAC;AACjC,CAAC;AAQD,MAAM,UAAU,UAAU,CAAC,OAA0B,EAAE;IACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;QACjC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC;QACrC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC;QACjC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC;KAClC,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,YAAY,IAAI,OAAO,CA6EtC;AAED,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvD"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { newCommand } from './commands/new/index.js';
|
|
4
|
+
import { addModelCommand } from './commands/add-model.js';
|
|
5
|
+
import { doctorCommand } from './commands/doctor/index.js';
|
|
6
|
+
import { dbUpCommand } from './commands/db-up.js';
|
|
7
|
+
import { inspectCommand } from './commands/inspect.js';
|
|
8
|
+
const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
|
|
9
|
+
export function buildProgram() {
|
|
10
|
+
const program = new Command();
|
|
11
|
+
program
|
|
12
|
+
.name('rune')
|
|
13
|
+
.description('Scaffolder for mcp-rune-based MCP servers')
|
|
14
|
+
.version(pkg.version);
|
|
15
|
+
program
|
|
16
|
+
.command('new <project-name>')
|
|
17
|
+
.description('Scaffold a new mcp-rune-based server')
|
|
18
|
+
.option('--preset <preset>', 'simple or advanced')
|
|
19
|
+
.option('--template <id>', 'scaffold from a remote example (e.g. "bookshelf" or "user/repo[/subdir][#ref]")')
|
|
20
|
+
.option('--offline-template <path>', 'use a local directory as the template source instead of fetching (for offline/CI use)')
|
|
21
|
+
.option('--yes', 'skip the wizard and use preset defaults')
|
|
22
|
+
.option('--dry-run', 'print the tasks that would run; write nothing to disk')
|
|
23
|
+
.option('--verbose', 'stream subprocess output (e.g. npm install) instead of a spinner')
|
|
24
|
+
.option('--skip-mascot', 'suppress the banner and mascot lines (auto-on in CI/non-TTY)')
|
|
25
|
+
.option('--fancy', 'force the banner and mascot on (overrides CI/non-TTY auto-skip)')
|
|
26
|
+
.option('--no-install', "don't run npm install after scaffolding")
|
|
27
|
+
.option('--no-git', "don't initialize a git repo")
|
|
28
|
+
.option('--with-analysis', 'enable the analysis module (Docker pgvector). Triggers a Database setup prompt (docker | existing-url | skip) — default under --yes is docker.')
|
|
29
|
+
.option('--with-domain', 'enable the domain workflows module')
|
|
30
|
+
.option('--transport <transport>', 'stdio | http | both')
|
|
31
|
+
.option('--models <models>', 'comma-list: Name1,Name2')
|
|
32
|
+
.option('--mcp-rune-local <path>', 'use a local checkout of @mcp-rune/mcp-rune (writes file:<abs-path> into package.json; also reads MCP_RUNE_LOCAL_PATH)')
|
|
33
|
+
.option('--api-convention <kind>', 'jsonapi (default) | rest-flat | custom (advanced only)')
|
|
34
|
+
.option('--api-client <kind>', 'none (default) | fetch | axios | custom (advanced only)')
|
|
35
|
+
.option('--server-auth <kind>', 'oauth (default) | static-token (advanced + http)')
|
|
36
|
+
.option('--search-adapter <kind>', 'none (default) | ransack | custom (advanced only)')
|
|
37
|
+
.option('--logger <kind>', 'framework (default) | pino (advanced only)')
|
|
38
|
+
.option('--error-tracking <kind>', 'none (default) | sentry (advanced only)')
|
|
39
|
+
.option('--tracing <kind>', 'none (default) | langfuse (advanced only)')
|
|
40
|
+
.option('--vector-storage', 'scaffold a vector storage hook stub (advanced only)')
|
|
41
|
+
.option('--shared-model-attrs', 'scaffold a shared ModelLayer base class (advanced only)')
|
|
42
|
+
.action(newCommand);
|
|
43
|
+
const addCmd = program.command('add').description('Add components to an existing project');
|
|
44
|
+
addCmd
|
|
45
|
+
.command('model <ModelName>')
|
|
46
|
+
.option('--attrs <attrs>', 'comma-list: attr:type,attr:type')
|
|
47
|
+
.action(addModelCommand);
|
|
48
|
+
program
|
|
49
|
+
.command('doctor')
|
|
50
|
+
.description('Validate the local environment for mcp-rune development')
|
|
51
|
+
.option('-p, --project [path]', "also validate the local project's models/forms/prompts (defaults to cwd)")
|
|
52
|
+
.action(doctorCommand);
|
|
53
|
+
program
|
|
54
|
+
.command('inspect')
|
|
55
|
+
.description('Open the MCP Inspector pre-wired against the current project')
|
|
56
|
+
.option('--transport <kind>', 'force transport: stdio | http')
|
|
57
|
+
.option('--url <url>', 'connect to this URL (implies http)')
|
|
58
|
+
.option('--port <port>', 'http port (default 4100)')
|
|
59
|
+
.option('--server <path>', 'path to the stdio server entry')
|
|
60
|
+
.action(inspectCommand);
|
|
61
|
+
const dbCmd = program.command('db').description('Database operations for the analysis module');
|
|
62
|
+
dbCmd.command('up').description('Start docker-compose db and run migrations').action(dbUpCommand);
|
|
63
|
+
return program;
|
|
64
|
+
}
|
|
65
|
+
export async function run(argv) {
|
|
66
|
+
await buildProgram().parseAsync(argv);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Answers } from '../types.js';
|
|
2
|
+
export declare function renderTemplate(templateUrl: URL | string, targetDir: string, answers: Answers): Promise<void>;
|
|
3
|
+
export declare function substitute(text: string, vars: Record<string, unknown>): string;
|
|
4
|
+
export declare function pascal(s: string): string;
|
|
5
|
+
//# sourceMappingURL=copy-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy-tree.d.ts","sourceRoot":"","sources":["../../src/render/copy-tree.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAqC,MAAM,aAAa,CAAC;AAY9E,wBAAsB,cAAc,CAClC,WAAW,EAAE,GAAG,GAAG,MAAM,EACzB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAwBf;AA2CD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAO9E;AAqBD,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAMxC"}
|