@chiralkit/cli 0.1.0-alpha.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 +97 -0
- package/dist/add.d.ts +4 -0
- package/dist/add.js +118 -0
- package/dist/add.js.map +1 -0
- package/dist/agents/subprocess.d.ts +10 -0
- package/dist/agents/subprocess.js +43 -0
- package/dist/agents/subprocess.js.map +1 -0
- package/dist/automation/index.d.ts +14 -0
- package/dist/automation/index.js +129 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/install.d.ts +19 -0
- package/dist/automation/install.js +116 -0
- package/dist/automation/install.js.map +1 -0
- package/dist/automation/parsers/audit-report.d.ts +2 -0
- package/dist/automation/parsers/audit-report.js +42 -0
- package/dist/automation/parsers/audit-report.js.map +1 -0
- package/dist/automation/parsers/exit-code.d.ts +2 -0
- package/dist/automation/parsers/exit-code.js +6 -0
- package/dist/automation/parsers/exit-code.js.map +1 -0
- package/dist/automation/parsers/index.d.ts +10 -0
- package/dist/automation/parsers/index.js +13 -0
- package/dist/automation/parsers/index.js.map +1 -0
- package/dist/automation/parsers/observer-snapshot.d.ts +2 -0
- package/dist/automation/parsers/observer-snapshot.js +30 -0
- package/dist/automation/parsers/observer-snapshot.js.map +1 -0
- package/dist/automation/parsers/plan-report.d.ts +2 -0
- package/dist/automation/parsers/plan-report.js +53 -0
- package/dist/automation/parsers/plan-report.js.map +1 -0
- package/dist/automation/parsers/refinement-report.d.ts +2 -0
- package/dist/automation/parsers/refinement-report.js +149 -0
- package/dist/automation/parsers/refinement-report.js.map +1 -0
- package/dist/automation/parsers/types.d.ts +7 -0
- package/dist/automation/parsers/types.js +2 -0
- package/dist/automation/parsers/types.js.map +1 -0
- package/dist/automation/run.d.ts +25 -0
- package/dist/automation/run.js +68 -0
- package/dist/automation/run.js.map +1 -0
- package/dist/automation/schema.d.ts +130 -0
- package/dist/automation/schema.js +46 -0
- package/dist/automation/schema.js.map +1 -0
- package/dist/automation/status.d.ts +16 -0
- package/dist/automation/status.js +56 -0
- package/dist/automation/status.js.map +1 -0
- package/dist/automation/verifiers/index.d.ts +7 -0
- package/dist/automation/verifiers/index.js +5 -0
- package/dist/automation/verifiers/index.js.map +1 -0
- package/dist/automation/verifiers/shell.d.ts +5 -0
- package/dist/automation/verifiers/shell.js +17 -0
- package/dist/automation/verifiers/shell.js.map +1 -0
- package/dist/automation/verifiers/types.d.ts +12 -0
- package/dist/automation/verifiers/types.js +2 -0
- package/dist/automation/verifiers/types.js.map +1 -0
- package/dist/backlog/add.d.ts +10 -0
- package/dist/backlog/add.js +30 -0
- package/dist/backlog/add.js.map +1 -0
- package/dist/backlog/index.d.ts +1 -0
- package/dist/backlog/index.js +53 -0
- package/dist/backlog/index.js.map +1 -0
- package/dist/config.d.ts +26 -0
- package/dist/config.js +110 -0
- package/dist/config.js.map +1 -0
- package/dist/detect.d.ts +2 -0
- package/dist/detect.js +26 -0
- package/dist/detect.js.map +1 -0
- package/dist/doctor-invariants.d.ts +6 -0
- package/dist/doctor-invariants.js +50 -0
- package/dist/doctor-invariants.js.map +1 -0
- package/dist/doctor.d.ts +13 -0
- package/dist/doctor.js +281 -0
- package/dist/doctor.js.map +1 -0
- package/dist/generate.d.ts +1 -0
- package/dist/generate.js +275 -0
- package/dist/generate.js.map +1 -0
- package/dist/generator/agent.d.ts +8 -0
- package/dist/generator/agent.js +66 -0
- package/dist/generator/agent.js.map +1 -0
- package/dist/generator/api.d.ts +7 -0
- package/dist/generator/api.js +42 -0
- package/dist/generator/api.js.map +1 -0
- package/dist/generator/config.d.ts +23 -0
- package/dist/generator/config.js +121 -0
- package/dist/generator/config.js.map +1 -0
- package/dist/generator/parse-response.d.ts +5 -0
- package/dist/generator/parse-response.js +58 -0
- package/dist/generator/parse-response.js.map +1 -0
- package/dist/generator/prompt.d.ts +9 -0
- package/dist/generator/prompt.js +166 -0
- package/dist/generator/prompt.js.map +1 -0
- package/dist/generator/request.d.ts +17 -0
- package/dist/generator/request.js +15 -0
- package/dist/generator/request.js.map +1 -0
- package/dist/generators/prompts/stencil.md +45 -0
- package/dist/generators/prompts/vue.md +54 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +102 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +1 -0
- package/dist/init.js +89 -0
- package/dist/init.js.map +1 -0
- package/dist/installers/context.d.ts +4 -0
- package/dist/installers/context.js +120 -0
- package/dist/installers/context.js.map +1 -0
- package/dist/installers/index.d.ts +7 -0
- package/dist/installers/index.js +22 -0
- package/dist/installers/index.js.map +1 -0
- package/dist/installers/installer.d.ts +12 -0
- package/dist/installers/installer.js +30 -0
- package/dist/installers/installer.js.map +1 -0
- package/dist/installers/stencil/django-template/installer.d.ts +10 -0
- package/dist/installers/stencil/django-template/installer.js +77 -0
- package/dist/installers/stencil/django-template/installer.js.map +1 -0
- package/dist/installers/stencil/react/installer.d.ts +9 -0
- package/dist/installers/stencil/react/installer.js +22 -0
- package/dist/installers/stencil/react/installer.js.map +1 -0
- package/dist/installers/stencil/react/manifest.json +17 -0
- package/dist/installers/types.d.ts +24 -0
- package/dist/installers/types.js +2 -0
- package/dist/installers/types.js.map +1 -0
- package/dist/lock.d.ts +25 -0
- package/dist/lock.js +86 -0
- package/dist/lock.js.map +1 -0
- package/dist/manifest.d.ts +1 -0
- package/dist/manifest.js +93 -0
- package/dist/manifest.js.map +1 -0
- package/dist/pm/audit.d.ts +36 -0
- package/dist/pm/audit.js +147 -0
- package/dist/pm/audit.js.map +1 -0
- package/dist/pm/backlog.d.ts +3 -0
- package/dist/pm/backlog.js +123 -0
- package/dist/pm/backlog.js.map +1 -0
- package/dist/pm/brief.d.ts +4 -0
- package/dist/pm/brief.js +18 -0
- package/dist/pm/brief.js.map +1 -0
- package/dist/pm/git.d.ts +3 -0
- package/dist/pm/git.js +43 -0
- package/dist/pm/git.js.map +1 -0
- package/dist/pm/grid.d.ts +8 -0
- package/dist/pm/grid.js +16 -0
- package/dist/pm/grid.js.map +1 -0
- package/dist/pm/index.d.ts +25 -0
- package/dist/pm/index.js +199 -0
- package/dist/pm/index.js.map +1 -0
- package/dist/pm/observe.d.ts +55 -0
- package/dist/pm/observe.js +177 -0
- package/dist/pm/observe.js.map +1 -0
- package/dist/pm/plan.d.ts +54 -0
- package/dist/pm/plan.js +151 -0
- package/dist/pm/plan.js.map +1 -0
- package/dist/pm/refinement-worktree.d.ts +31 -0
- package/dist/pm/refinement-worktree.js +160 -0
- package/dist/pm/refinement-worktree.js.map +1 -0
- package/dist/pm/refinement.d.ts +79 -0
- package/dist/pm/refinement.js +326 -0
- package/dist/pm/refinement.js.map +1 -0
- package/dist/pm/render.d.ts +2 -0
- package/dist/pm/render.js +39 -0
- package/dist/pm/render.js.map +1 -0
- package/dist/pm/roadmap-rings.d.ts +7 -0
- package/dist/pm/roadmap-rings.js +31 -0
- package/dist/pm/roadmap-rings.js.map +1 -0
- package/dist/pm/roadmap.d.ts +2 -0
- package/dist/pm/roadmap.js +118 -0
- package/dist/pm/roadmap.js.map +1 -0
- package/dist/pm/snapshot.d.ts +10 -0
- package/dist/pm/snapshot.js +129 -0
- package/dist/pm/snapshot.js.map +1 -0
- package/dist/pm/types.d.ts +99 -0
- package/dist/pm/types.js +29 -0
- package/dist/pm/types.js.map +1 -0
- package/dist/registry-layout.d.ts +18 -0
- package/dist/registry-layout.js +122 -0
- package/dist/registry-layout.js.map +1 -0
- package/dist/scaffold-registry.d.ts +10 -0
- package/dist/scaffold-registry.js +283 -0
- package/dist/scaffold-registry.js.map +1 -0
- package/dist/scaffold.d.ts +1 -0
- package/dist/scaffold.js +32 -0
- package/dist/scaffold.js.map +1 -0
- package/dist/spec-from-react.d.ts +11 -0
- package/dist/spec-from-react.js +522 -0
- package/dist/spec-from-react.js.map +1 -0
- package/dist/spec-from-stencil.d.ts +7 -0
- package/dist/spec-from-stencil.js +275 -0
- package/dist/spec-from-stencil.js.map +1 -0
- package/dist/spec.d.ts +1 -0
- package/dist/spec.js +60 -0
- package/dist/spec.js.map +1 -0
- package/dist/tokens-map.d.ts +11 -0
- package/dist/tokens-map.js +43 -0
- package/dist/tokens-map.js.map +1 -0
- package/dist/update.d.ts +39 -0
- package/dist/update.js +490 -0
- package/dist/update.js.map +1 -0
- package/dist/workspace-init.d.ts +9 -0
- package/dist/workspace-init.js +119 -0
- package/dist/workspace-init.js.map +1 -0
- package/package.json +53 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { runInit } from "./init.js";
|
|
3
|
+
import { runAdd } from "./add.js";
|
|
4
|
+
import { runSpec } from "./spec.js";
|
|
5
|
+
import { runDoctor } from "./doctor.js";
|
|
6
|
+
import { runGenerate } from "./generate.js";
|
|
7
|
+
import { runScaffold } from "./scaffold.js";
|
|
8
|
+
import { runManifest } from "./manifest.js";
|
|
9
|
+
import { runUpdate, runLock } from "./update.js";
|
|
10
|
+
import { parseTypeFlag } from "./registry-layout.js";
|
|
11
|
+
import { runPm } from "./pm/index.js";
|
|
12
|
+
import { runAutomationCommand } from "./automation/index.js";
|
|
13
|
+
import { runBacklogCommand } from "./backlog/index.js";
|
|
14
|
+
import { runWorkspaceInit } from "./workspace-init.js";
|
|
15
|
+
const HELP = `chiralkit — CLI para instalar módulos desde el registry
|
|
16
|
+
|
|
17
|
+
Uso:
|
|
18
|
+
chiralkit init Detecta framework y escribe ck/chiralkit.config.json
|
|
19
|
+
chiralkit add <module> [--type <t>] Copia los archivos de un módulo al proyecto (--type desambigua nombres repetidos entre familias)
|
|
20
|
+
chiralkit spec from-stencil <name> Draft spec.json from a Stencil source
|
|
21
|
+
chiralkit scaffold registry <name> --level <n> [--type <t>] [--force] Onboard a module into the registry (envelope [+ spec + symlinks for ui-component])
|
|
22
|
+
chiralkit generate <name> [--type <t>] [--stack <s>] [--dry-run] [--debug-prompt] LLM-generate implementation(s) from spec.json
|
|
23
|
+
chiralkit doctor Lint the registry (envelopes, specs, implementations)
|
|
24
|
+
chiralkit lock --init Snapshot the currently-installed modules into ck/chiralkit.lock.json (one-time migration for projects predating 'update')
|
|
25
|
+
chiralkit update [name] [--type <t>] [--check] [--yes] Bump installed modules to the current registry version, with a diff preview
|
|
26
|
+
chiralkit manifest [--lang en|es] Print the project mark and manifesto
|
|
27
|
+
chiralkit pm [--brief] [--plan] [--audit] [--observe] Read-only roadmap/backlog/worktree dashboard (--observe prints an F(0) live-read snapshot as one JSON line to stdout; use \`ck automation run observer\` to persist it to automations/observer/runs.jsonl)
|
|
28
|
+
chiralkit automation <list|show|run|install|uninstall> [name] Self-checking contracts (automations)
|
|
29
|
+
chiralkit backlog add <kit> "<text>" [--note "<note>"] Append a raw item to a kit's Inbox (unrefined) bucket; refinement F(3) prioritizes it later
|
|
30
|
+
chiralkit workspace init [--adapter <id>] [--agent <name>] Bootstrap .chiralkit/workspace/ (project.json, config.json, events.jsonl, .gitignore)
|
|
31
|
+
chiralkit --help Muestra esta ayuda
|
|
32
|
+
`;
|
|
33
|
+
export async function main(argv = process.argv.slice(2)) {
|
|
34
|
+
const [command, ...rest] = argv;
|
|
35
|
+
switch (command) {
|
|
36
|
+
case "init":
|
|
37
|
+
await runInit(rest);
|
|
38
|
+
return 0;
|
|
39
|
+
case "add": {
|
|
40
|
+
const name = rest[0];
|
|
41
|
+
if (!name) {
|
|
42
|
+
console.error("add: missing module name");
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
const type = parseTypeFlag(rest, (msg) => {
|
|
46
|
+
console.error(msg);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
});
|
|
49
|
+
await runAdd(name, process.cwd(), { type });
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
case "spec":
|
|
53
|
+
await runSpec(rest);
|
|
54
|
+
return 0;
|
|
55
|
+
case "doctor":
|
|
56
|
+
await runDoctor();
|
|
57
|
+
return 0;
|
|
58
|
+
case "generate":
|
|
59
|
+
await runGenerate(rest);
|
|
60
|
+
return 0;
|
|
61
|
+
case "scaffold":
|
|
62
|
+
await runScaffold(rest);
|
|
63
|
+
return 0;
|
|
64
|
+
case "manifest":
|
|
65
|
+
runManifest(rest);
|
|
66
|
+
return 0;
|
|
67
|
+
case "lock":
|
|
68
|
+
return runLock(rest);
|
|
69
|
+
case "update":
|
|
70
|
+
return runUpdate(rest);
|
|
71
|
+
case "pm":
|
|
72
|
+
return runPm(rest);
|
|
73
|
+
case "automation":
|
|
74
|
+
return runAutomationCommand(rest);
|
|
75
|
+
case "backlog":
|
|
76
|
+
return await runBacklogCommand(rest);
|
|
77
|
+
case "workspace": {
|
|
78
|
+
const sub = rest[0];
|
|
79
|
+
if (sub !== "init") {
|
|
80
|
+
console.error(`workspace: unknown subcommand "${sub ?? ''}" (expected "init")`);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
await runWorkspaceInit(rest.slice(1));
|
|
84
|
+
return 0;
|
|
85
|
+
}
|
|
86
|
+
case undefined:
|
|
87
|
+
case "--help":
|
|
88
|
+
case "-h":
|
|
89
|
+
console.log(HELP);
|
|
90
|
+
return 0;
|
|
91
|
+
default:
|
|
92
|
+
console.error(`Unknown command: ${command}`);
|
|
93
|
+
console.error(HELP);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
main().then((code) => { process.exitCode = code; }).catch((err) => {
|
|
98
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
99
|
+
console.error(msg);
|
|
100
|
+
process.exitCode = 1;
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/init.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function runInit(argv?: string[], cwd?: string): Promise<void>;
|
package/dist/init.js
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { access } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { detectFramework } from "./detect.js";
|
|
4
|
+
import { CONFIG_DIR, CONFIG_FILE, configExists, defaultPaths, legacyConfigExists, legacyMigrationHint, readConfigRaw, writeConfig, writeConfigRaw, } from "./config.js";
|
|
5
|
+
// Default assumes the consumer lives at <chiralkit>/examples/<foo>/ and the
|
|
6
|
+
// registry lives at <chiralkit>/registry/. Users can edit registry_path
|
|
7
|
+
// after init if their layout differs.
|
|
8
|
+
const DEFAULT_REGISTRY_PATH = "../..";
|
|
9
|
+
const DEFAULT_DS_PATH = "packages/design-system/src/components";
|
|
10
|
+
const DEFAULT_MAINTAINER_REGISTRY_PATH = "registry";
|
|
11
|
+
export async function runInit(argv = [], cwd = process.cwd()) {
|
|
12
|
+
if (argv.includes("--maintainer")) {
|
|
13
|
+
await runInitMaintainer(cwd);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
await runInitConsumer(cwd);
|
|
17
|
+
}
|
|
18
|
+
async function runInitConsumer(cwd) {
|
|
19
|
+
if (await configExists(cwd)) {
|
|
20
|
+
throw new Error(`${CONFIG_DIR}/${CONFIG_FILE} already exists in ${cwd}. Aborting.`);
|
|
21
|
+
}
|
|
22
|
+
if (await legacyConfigExists(cwd)) {
|
|
23
|
+
throw new Error(legacyMigrationHint(cwd));
|
|
24
|
+
}
|
|
25
|
+
const framework = await detectFramework(cwd);
|
|
26
|
+
if (!framework) {
|
|
27
|
+
throw new Error("Could not detect framework. Expected one of:\n" +
|
|
28
|
+
" - manage.py (django-template)\n" +
|
|
29
|
+
" - package.json with 'react' dep (react)\n" +
|
|
30
|
+
" - index.html (html)");
|
|
31
|
+
}
|
|
32
|
+
const paths = defaultPaths(framework);
|
|
33
|
+
await writeConfig(cwd, {
|
|
34
|
+
framework,
|
|
35
|
+
registry_path: DEFAULT_REGISTRY_PATH,
|
|
36
|
+
paths,
|
|
37
|
+
});
|
|
38
|
+
console.log(`Wrote ${CONFIG_DIR}/${CONFIG_FILE}`);
|
|
39
|
+
console.log(` framework: ${framework}`);
|
|
40
|
+
console.log(` registry_path: ${DEFAULT_REGISTRY_PATH}`);
|
|
41
|
+
console.log(` paths.components: ${paths.components}`);
|
|
42
|
+
console.log(` paths.assets: ${paths.assets}`);
|
|
43
|
+
}
|
|
44
|
+
async function runInitMaintainer(cwd) {
|
|
45
|
+
const dsPath = await detectMaintainerDsPath(cwd);
|
|
46
|
+
const registryPath = await detectMaintainerRegistryPath(cwd);
|
|
47
|
+
const existing = await readConfigRaw(cwd);
|
|
48
|
+
if (existing === null && (await legacyConfigExists(cwd))) {
|
|
49
|
+
throw new Error(legacyMigrationHint(cwd));
|
|
50
|
+
}
|
|
51
|
+
const maintainerBlock = {
|
|
52
|
+
design_system_path: dsPath,
|
|
53
|
+
registry_path: registryPath,
|
|
54
|
+
};
|
|
55
|
+
if (existing === null) {
|
|
56
|
+
await writeConfigRaw(cwd, { maintainer: maintainerBlock });
|
|
57
|
+
console.log(`Wrote ${CONFIG_DIR}/${CONFIG_FILE} (maintainer only)`);
|
|
58
|
+
console.log(` maintainer.design_system_path: ${dsPath}`);
|
|
59
|
+
console.log(` maintainer.registry_path: ${registryPath}`);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if ("maintainer" in existing) {
|
|
63
|
+
throw new Error(`maintainer block already present in ${CONFIG_DIR}/${CONFIG_FILE}. Edit the file directly if you need to change it.`);
|
|
64
|
+
}
|
|
65
|
+
const merged = { ...existing, maintainer: maintainerBlock };
|
|
66
|
+
await writeConfigRaw(cwd, merged);
|
|
67
|
+
console.log(`Added maintainer block to ${CONFIG_DIR}/${CONFIG_FILE}`);
|
|
68
|
+
console.log(` maintainer.design_system_path: ${dsPath}`);
|
|
69
|
+
console.log(` maintainer.registry_path: ${registryPath}`);
|
|
70
|
+
}
|
|
71
|
+
async function detectMaintainerDsPath(cwd) {
|
|
72
|
+
try {
|
|
73
|
+
await access(join(cwd, DEFAULT_DS_PATH));
|
|
74
|
+
return DEFAULT_DS_PATH;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return DEFAULT_DS_PATH;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async function detectMaintainerRegistryPath(cwd) {
|
|
81
|
+
try {
|
|
82
|
+
await access(join(cwd, DEFAULT_MAINTAINER_REGISTRY_PATH));
|
|
83
|
+
return DEFAULT_MAINTAINER_REGISTRY_PATH;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return DEFAULT_MAINTAINER_REGISTRY_PATH;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=init.js.map
|
package/dist/init.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ChiralkitConfig } from "../config.js";
|
|
2
|
+
import type { InstallContext } from "./types.js";
|
|
3
|
+
export type { InstallContext } from "./types.js";
|
|
4
|
+
export declare function createInstallContext(cwd: string, registryRoot: string, config: ChiralkitConfig): InstallContext;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { access, cp, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
2
|
+
import { dirname, join, resolve } from "node:path";
|
|
3
|
+
// Union of placeholder keys resolvable in a manifest asset path. Rejects any
|
|
4
|
+
// `{{key}}` outside this set so typos surface loudly instead of leaving a
|
|
5
|
+
// literal `{{foo}}` in a filesystem path.
|
|
6
|
+
function substitutePlaceholders(value, vars) {
|
|
7
|
+
return value.replace(/\{\{(\w+)\}\}/g, (_match, key) => {
|
|
8
|
+
if (!(key in vars)) {
|
|
9
|
+
throw new Error(`Unknown placeholder '{{${key}}}' in manifest. ` +
|
|
10
|
+
`Known keys: ${Object.keys(vars).join(", ")}.`);
|
|
11
|
+
}
|
|
12
|
+
return vars[key];
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
// Placeholders available to `runtime.assets`: only the project's path map.
|
|
16
|
+
function runtimeVars(paths) {
|
|
17
|
+
return { ...paths };
|
|
18
|
+
}
|
|
19
|
+
// Placeholders available to `component.assets`: the project's path map plus
|
|
20
|
+
// component identity fields. `{{name}}` is the module name, `{{tag}}` is
|
|
21
|
+
// the custom element tag.
|
|
22
|
+
function componentVars(paths, component) {
|
|
23
|
+
const spec = component.spec;
|
|
24
|
+
return { ...paths, name: component.name, tag: spec.tag };
|
|
25
|
+
}
|
|
26
|
+
async function fileExists(path) {
|
|
27
|
+
try {
|
|
28
|
+
await access(path);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
// Merges `deps` into the consumer's package.json under `dependencies`,
|
|
36
|
+
// leaving present keys untouched. Returns null if there is no package.json.
|
|
37
|
+
async function mergePackageDeps(cwd, deps) {
|
|
38
|
+
const pkgPath = join(cwd, "package.json");
|
|
39
|
+
if (!(await fileExists(pkgPath)))
|
|
40
|
+
return null;
|
|
41
|
+
const raw = await readFile(pkgPath, "utf8");
|
|
42
|
+
const pkg = JSON.parse(raw);
|
|
43
|
+
const current = pkg.dependencies ?? {};
|
|
44
|
+
const added = [];
|
|
45
|
+
const skipped = [];
|
|
46
|
+
for (const [name, version] of Object.entries(deps)) {
|
|
47
|
+
if (name in current)
|
|
48
|
+
skipped.push(name);
|
|
49
|
+
else {
|
|
50
|
+
current[name] = version;
|
|
51
|
+
added.push(name);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (added.length === 0)
|
|
55
|
+
return { added, skipped };
|
|
56
|
+
pkg.dependencies = current;
|
|
57
|
+
await writeFile(pkgPath, JSON.stringify(pkg, null, 2) + "\n", "utf8");
|
|
58
|
+
return { added, skipped };
|
|
59
|
+
}
|
|
60
|
+
export function createInstallContext(cwd, registryRoot, config) {
|
|
61
|
+
const log = (msg) => {
|
|
62
|
+
console.log(msg);
|
|
63
|
+
};
|
|
64
|
+
const copyAsset = async (entry, vars) => {
|
|
65
|
+
const resolvedSrc = substitutePlaceholders(entry.src, vars);
|
|
66
|
+
const resolvedDest = substitutePlaceholders(entry.dest, vars);
|
|
67
|
+
const src = resolve(registryRoot, resolvedSrc);
|
|
68
|
+
const dest = resolve(cwd, resolvedDest);
|
|
69
|
+
await mkdir(dirname(dest), { recursive: true });
|
|
70
|
+
await cp(src, dest, { recursive: true, force: true });
|
|
71
|
+
log(` ${resolvedSrc} -> ${resolvedDest}`);
|
|
72
|
+
};
|
|
73
|
+
const applyManifestRuntime = async (manifest) => {
|
|
74
|
+
const vars = runtimeVars(config.paths);
|
|
75
|
+
for (const entry of manifest.runtime.assets) {
|
|
76
|
+
await copyAsset(entry, vars);
|
|
77
|
+
}
|
|
78
|
+
const deps = manifest.runtime.npm_dependencies;
|
|
79
|
+
if (Object.keys(deps).length === 0)
|
|
80
|
+
return;
|
|
81
|
+
const result = await mergePackageDeps(cwd, deps);
|
|
82
|
+
if (result === null) {
|
|
83
|
+
log("");
|
|
84
|
+
log("This stack requires npm dependencies but no package.json was found.");
|
|
85
|
+
log("Add these to your package.json manually:");
|
|
86
|
+
for (const [name, version] of Object.entries(deps)) {
|
|
87
|
+
log(` "${name}": "${version}"`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else if (result.added.length > 0) {
|
|
91
|
+
log("");
|
|
92
|
+
log(`Added ${result.added.length} dependency/ies to package.json:`);
|
|
93
|
+
for (const name of result.added)
|
|
94
|
+
log(` + ${name}`);
|
|
95
|
+
if (result.skipped.length > 0) {
|
|
96
|
+
log(`Already present, left untouched:`);
|
|
97
|
+
for (const name of result.skipped)
|
|
98
|
+
log(` = ${name}`);
|
|
99
|
+
}
|
|
100
|
+
log("Run 'pnpm install' to fetch them.");
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const applyManifestComponent = async (manifest, component) => {
|
|
104
|
+
if (!manifest.component)
|
|
105
|
+
return;
|
|
106
|
+
const vars = componentVars(config.paths, component);
|
|
107
|
+
for (const entry of manifest.component.assets) {
|
|
108
|
+
await copyAsset(entry, vars);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
return {
|
|
112
|
+
cwd,
|
|
113
|
+
registryRoot,
|
|
114
|
+
config,
|
|
115
|
+
log,
|
|
116
|
+
applyManifestRuntime,
|
|
117
|
+
applyManifestComponent,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/installers/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { FrameworkTarget } from "@chiralkit/registry-schema";
|
|
2
|
+
import type { Installer } from "./installer.js";
|
|
3
|
+
export { Installer } from "./installer.js";
|
|
4
|
+
export type { InstallerManifest } from "./installer.js";
|
|
5
|
+
export type { InstallContext } from "./context.js";
|
|
6
|
+
export { createInstallContext } from "./context.js";
|
|
7
|
+
export declare function findInstaller(tech: string, framework: FrameworkTarget): Installer;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { StencilReactInstaller } from "./stencil/react/installer.js";
|
|
2
|
+
import { StencilDjangoTemplateInstaller } from "./stencil/django-template/installer.js";
|
|
3
|
+
export { Installer } from "./installer.js";
|
|
4
|
+
export { createInstallContext } from "./context.js";
|
|
5
|
+
// Static registry of installers, keyed as [tech][framework]. Adding a new
|
|
6
|
+
// stack means: (1) create packages/cli/src/installers/<tech>/<framework>/
|
|
7
|
+
// with an installer.ts + manifest.json, and (2) register it here. The CLI's
|
|
8
|
+
// dispatch table sees the change automatically.
|
|
9
|
+
const registry = {
|
|
10
|
+
stencil: {
|
|
11
|
+
react: new StencilReactInstaller(),
|
|
12
|
+
"django-template": new StencilDjangoTemplateInstaller(),
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
export function findInstaller(tech, framework) {
|
|
16
|
+
const inst = registry[tech]?.[framework];
|
|
17
|
+
if (!inst) {
|
|
18
|
+
throw new Error(`No installer registered for tech '${tech}' × framework '${framework}'.`);
|
|
19
|
+
}
|
|
20
|
+
return inst;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installers/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;AAExF,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,0EAA0E;AAC1E,0EAA0E;AAC1E,4EAA4E;AAC5E,gDAAgD;AAChD,MAAM,QAAQ,GAAgE;IAC5E,OAAO,EAAE;QACP,KAAK,EAAE,IAAI,qBAAqB,EAAE;QAClC,iBAAiB,EAAE,IAAI,8BAA8B,EAAE;KACxD;CACF,CAAC;AAEF,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,SAA0B;IAE1B,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,qCAAqC,IAAI,kBAAkB,SAAS,IAAI,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FrameworkTarget, Module } from "@chiralkit/registry-schema";
|
|
2
|
+
import type { InstallContext, InstallerManifest } from "./types.js";
|
|
3
|
+
export type { InstallerManifest } from "./types.js";
|
|
4
|
+
export declare abstract class Installer {
|
|
5
|
+
abstract readonly tech: string;
|
|
6
|
+
abstract readonly framework: FrameworkTarget;
|
|
7
|
+
readonly manifest?: InstallerManifest;
|
|
8
|
+
supports(component: Module): boolean;
|
|
9
|
+
abstract install(component: Module, ctx: InstallContext): Promise<void>;
|
|
10
|
+
uninstall(_component: Module, _ctx: InstallContext): Promise<void>;
|
|
11
|
+
update(_component: Module, _ctx: InstallContext): Promise<void>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Base class for a per-(tech, framework) installer. Concrete installers are
|
|
2
|
+
// registered in `./index.ts` and dispatched by the CLI's `add` command.
|
|
3
|
+
// `uninstall` and `update` are stubbed for v0 — the shape is here so future
|
|
4
|
+
// `chiralkit remove` / `chiralkit update` commands have a contract to call.
|
|
5
|
+
//
|
|
6
|
+
// `manifest` is optional. Declarative stacks (React) express install as a
|
|
7
|
+
// small set of source/dest pairs and use the shared context helpers to
|
|
8
|
+
// apply them; imperative stacks (Stencil × Django, where hashed runtime
|
|
9
|
+
// chunks and per-component autoregistration mean install requires
|
|
10
|
+
// filesystem discovery) omit the manifest and implement `install()`
|
|
11
|
+
// directly. Keeping the leaky knowledge inside the installer that owns
|
|
12
|
+
// it — instead of a data file the CLI reads — mirrors the IR study's
|
|
13
|
+
// principle: no framework-specific detail leaks upward into a shared
|
|
14
|
+
// schema.
|
|
15
|
+
export class Installer {
|
|
16
|
+
manifest;
|
|
17
|
+
supports(component) {
|
|
18
|
+
if (component.type !== "ui-component")
|
|
19
|
+
return false;
|
|
20
|
+
const spec = component.spec;
|
|
21
|
+
return spec.tech === this.tech;
|
|
22
|
+
}
|
|
23
|
+
uninstall(_component, _ctx) {
|
|
24
|
+
throw new Error(`uninstall not implemented for ${this.tech} × ${this.framework}`);
|
|
25
|
+
}
|
|
26
|
+
update(_component, _ctx) {
|
|
27
|
+
throw new Error(`update not implemented for ${this.tech} × ${this.framework}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/installers/installer.ts"],"names":[],"mappings":"AAKA,4EAA4E;AAC5E,wEAAwE;AACxE,4EAA4E;AAC5E,4EAA4E;AAC5E,EAAE;AACF,0EAA0E;AAC1E,uEAAuE;AACvE,wEAAwE;AACxE,kEAAkE;AAClE,oEAAoE;AACpE,uEAAuE;AACvE,qEAAqE;AACrE,qEAAqE;AACrE,UAAU;AACV,MAAM,OAAgB,SAAS;IAGpB,QAAQ,CAAqB;IAEtC,QAAQ,CAAC,SAAiB;QACxB,IAAI,SAAS,CAAC,IAAI,KAAK,cAAc;YAAE,OAAO,KAAK,CAAC;QACpD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAyB,CAAC;QACjD,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;IACjC,CAAC;IAID,SAAS,CAAC,UAAkB,EAAE,IAAoB;QAChD,MAAM,IAAI,KAAK,CACb,iCAAiC,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,SAAS,EAAE,CACjE,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,UAAkB,EAAE,IAAoB;QAC7C,MAAM,IAAI,KAAK,CACb,8BAA8B,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,SAAS,EAAE,CAC9D,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Module } from "@chiralkit/registry-schema";
|
|
2
|
+
import type { InstallContext } from "../../context.js";
|
|
3
|
+
import { Installer } from "../../installer.js";
|
|
4
|
+
export declare class StencilDjangoTemplateInstaller extends Installer {
|
|
5
|
+
readonly tech = "stencil";
|
|
6
|
+
readonly framework: "django-template";
|
|
7
|
+
install(component: Module, ctx: InstallContext): Promise<void>;
|
|
8
|
+
private installRuntime;
|
|
9
|
+
private installComponent;
|
|
10
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { cp, mkdir, readdir } from "node:fs/promises";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
import { Installer } from "../../installer.js";
|
|
4
|
+
// Stencil × Django templates. This installer is imperative — it does not
|
|
5
|
+
// declare a manifest. The rationale: Stencil's `dist-custom-elements`
|
|
6
|
+
// output produces content-hashed shared runtime chunks (`p-*.js`) whose
|
|
7
|
+
// filenames change on every build and cannot be listed in a static
|
|
8
|
+
// manifest without either coupling the manifest to build hashes or
|
|
9
|
+
// pushing glob support into the shared copy helper. Encoding the
|
|
10
|
+
// knowledge here keeps the shape of Stencil's dist folder isolated to
|
|
11
|
+
// one file: if a future Stencil version renames or reorganises these
|
|
12
|
+
// outputs, only `installRuntime` / `installComponent` change.
|
|
13
|
+
//
|
|
14
|
+
// Files installed:
|
|
15
|
+
// - Runtime (once, idempotent on every `add`):
|
|
16
|
+
// `chiralkit-ds.css` — global design tokens
|
|
17
|
+
// `p-<hash>.js` (×N) — shared Stencil runtime chunks
|
|
18
|
+
// - Component (per `add`):
|
|
19
|
+
// `ds-<tag>.js` — auto-registers the custom element
|
|
20
|
+
//
|
|
21
|
+
// Django template consumption:
|
|
22
|
+
// <link rel="stylesheet" href="{% static 'chiralkit-ds/chiralkit-ds.css' %}">
|
|
23
|
+
// <script type="module" src="{% static 'chiralkit-ds/ds-button.js' %}"></script>
|
|
24
|
+
// <ds-button>...</ds-button>
|
|
25
|
+
// The `<script type="module">` import triggers `defineCustomElement()`
|
|
26
|
+
// via Stencil's `auto-define-custom-elements` behavior; the browser
|
|
27
|
+
// resolves the sibling `p-*.js` imports on its own.
|
|
28
|
+
export class StencilDjangoTemplateInstaller extends Installer {
|
|
29
|
+
tech = "stencil";
|
|
30
|
+
framework = "django-template";
|
|
31
|
+
async install(component, ctx) {
|
|
32
|
+
await this.installRuntime(ctx);
|
|
33
|
+
await this.installComponent(component, ctx);
|
|
34
|
+
const spec = component.spec;
|
|
35
|
+
ctx.log("");
|
|
36
|
+
ctx.log(`Available in templates as <${spec.tag}>.`);
|
|
37
|
+
}
|
|
38
|
+
// Copies the shared design-system runtime: global tokens CSS + Stencil's
|
|
39
|
+
// hashed runtime chunks. Called on every `add` — cp overwrites, so it is
|
|
40
|
+
// idempotent. The runtime chunks are discovered at install time (not
|
|
41
|
+
// encoded in a manifest) because their filenames are content-hashed.
|
|
42
|
+
async installRuntime(ctx) {
|
|
43
|
+
const componentsDir = resolve(ctx.registryRoot, "packages/design-system/dist/components");
|
|
44
|
+
const destDir = resolve(ctx.cwd, ctx.config.paths.assets);
|
|
45
|
+
await mkdir(destDir, { recursive: true });
|
|
46
|
+
// Global tokens live under the `dist` target's folder, not
|
|
47
|
+
// `dist/components/`. Copy the single CSS file we need.
|
|
48
|
+
const cssSrc = resolve(ctx.registryRoot, "packages/design-system/dist/chiralkit-ds/chiralkit-ds.css");
|
|
49
|
+
const cssDest = join(destDir, "chiralkit-ds.css");
|
|
50
|
+
await cp(cssSrc, cssDest, { force: true });
|
|
51
|
+
ctx.log(` chiralkit-ds.css -> ${ctx.config.paths.assets}/chiralkit-ds.css`);
|
|
52
|
+
// Shared runtime chunks: everything matching `p-*.js` in the
|
|
53
|
+
// dist-custom-elements output. Filenames are content-hashed, so we
|
|
54
|
+
// enumerate rather than hard-code.
|
|
55
|
+
const entries = await readdir(componentsDir);
|
|
56
|
+
for (const entry of entries) {
|
|
57
|
+
if (!entry.startsWith("p-") || !entry.endsWith(".js"))
|
|
58
|
+
continue;
|
|
59
|
+
const src = join(componentsDir, entry);
|
|
60
|
+
const dest = join(destDir, entry);
|
|
61
|
+
await cp(src, dest, { force: true });
|
|
62
|
+
ctx.log(` ${entry} -> ${ctx.config.paths.assets}/${entry}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Copies the per-component auto-registering module (`ds-<tag>.js`) to
|
|
66
|
+
// the project's static assets folder. Idempotent — cp overwrites.
|
|
67
|
+
async installComponent(component, ctx) {
|
|
68
|
+
const spec = component.spec;
|
|
69
|
+
const src = resolve(ctx.registryRoot, "packages/design-system/dist/components", `${spec.tag}.js`);
|
|
70
|
+
const destDir = resolve(ctx.cwd, ctx.config.paths.assets);
|
|
71
|
+
const dest = join(destDir, `${spec.tag}.js`);
|
|
72
|
+
await mkdir(destDir, { recursive: true });
|
|
73
|
+
await cp(src, dest, { force: true });
|
|
74
|
+
ctx.log(` ${spec.tag}.js -> ${ctx.config.paths.assets}/${spec.tag}.js`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../../../src/installers/stencil/django-template/installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Module } from "@chiralkit/registry-schema";
|
|
2
|
+
import type { InstallContext } from "../../context.js";
|
|
3
|
+
import { Installer, type InstallerManifest } from "../../installer.js";
|
|
4
|
+
export declare class StencilReactInstaller extends Installer {
|
|
5
|
+
readonly tech = "stencil";
|
|
6
|
+
readonly framework: "react";
|
|
7
|
+
readonly manifest: InstallerManifest;
|
|
8
|
+
install(component: Module, ctx: InstallContext): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Installer } from "../../installer.js";
|
|
2
|
+
import manifest from "./manifest.json" with { type: "json" };
|
|
3
|
+
// Stencil × React. Installs exactly one wrapper file per `add` (from the
|
|
4
|
+
// split `packages/design-system/react/components/<tag>.tsx`), plus the two
|
|
5
|
+
// shared npm deps once. No shared barrel, no other components pulled in.
|
|
6
|
+
export class StencilReactInstaller extends Installer {
|
|
7
|
+
tech = "stencil";
|
|
8
|
+
framework = "react";
|
|
9
|
+
manifest = manifest;
|
|
10
|
+
async install(component, ctx) {
|
|
11
|
+
await ctx.applyManifestRuntime(this.manifest);
|
|
12
|
+
await ctx.applyManifestComponent(this.manifest, component);
|
|
13
|
+
const spec = component.spec;
|
|
14
|
+
const pascal = spec.tag
|
|
15
|
+
.split("-")
|
|
16
|
+
.map((s) => s.charAt(0).toUpperCase() + s.slice(1))
|
|
17
|
+
.join("");
|
|
18
|
+
ctx.log("");
|
|
19
|
+
ctx.log(`Available as <${pascal} /> — import from '~/components/chiralkit/${component.name}'.`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../../../src/installers/stencil/react/installer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAA0B,MAAM,oBAAoB,CAAC;AACvE,OAAO,QAAQ,MAAM,iBAAiB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE7D,yEAAyE;AACzE,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,OAAO,qBAAsB,SAAQ,SAAS;IACzC,IAAI,GAAG,SAAS,CAAC;IACjB,SAAS,GAAG,OAAgB,CAAC;IAC7B,QAAQ,GAAsB,QAAQ,CAAC;IAEhD,KAAK,CAAC,OAAO,CAAC,SAAiB,EAAE,GAAmB;QAClD,MAAM,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9C,MAAM,GAAG,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,SAAS,CAAC,IAAuB,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG;aACpB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAClD,IAAI,CAAC,EAAE,CAAC,CAAC;QACZ,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACZ,GAAG,CAAC,GAAG,CACL,iBAAiB,MAAM,6CAA6C,SAAS,CAAC,IAAI,IAAI,CACvF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"runtime": {
|
|
3
|
+
"assets": [],
|
|
4
|
+
"npm_dependencies": {
|
|
5
|
+
"@chiralkit/design-system": "workspace:*",
|
|
6
|
+
"@stencil/react-output-target": "^0.7.4"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"component": {
|
|
10
|
+
"assets": [
|
|
11
|
+
{
|
|
12
|
+
"src": "packages/design-system/react/components/{{tag}}.tsx",
|
|
13
|
+
"dest": "{{components}}/{{name}}.tsx"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Module } from "@chiralkit/registry-schema";
|
|
2
|
+
export interface InstallerManifest {
|
|
3
|
+
runtime: {
|
|
4
|
+
assets: Array<{
|
|
5
|
+
src: string;
|
|
6
|
+
dest: string;
|
|
7
|
+
}>;
|
|
8
|
+
npm_dependencies: Record<string, string>;
|
|
9
|
+
};
|
|
10
|
+
component?: {
|
|
11
|
+
assets: Array<{
|
|
12
|
+
src: string;
|
|
13
|
+
dest: string;
|
|
14
|
+
}>;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface InstallContext {
|
|
18
|
+
cwd: string;
|
|
19
|
+
registryRoot: string;
|
|
20
|
+
config: import("../config.js").ChiralkitConfig;
|
|
21
|
+
log: (msg: string) => void;
|
|
22
|
+
applyManifestRuntime(manifest: InstallerManifest): Promise<void>;
|
|
23
|
+
applyManifestComponent(manifest: InstallerManifest, component: Module): Promise<void>;
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/installers/types.ts"],"names":[],"mappings":""}
|