@ankhorage/templates 1.8.9 → 1.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +39 -0
  3. package/dist/catalog.d.ts +18 -0
  4. package/dist/catalog.d.ts.map +1 -0
  5. package/dist/catalog.js +84 -0
  6. package/dist/catalog.js.map +1 -0
  7. package/dist/cli/index.d.ts +9 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +25 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli.d.ts +9 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +37 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/commandContext.d.ts +12 -0
  16. package/dist/commandContext.d.ts.map +1 -0
  17. package/dist/commandContext.js +15 -0
  18. package/dist/commandContext.js.map +1 -0
  19. package/dist/commands.d.ts +64 -0
  20. package/dist/commands.d.ts.map +1 -0
  21. package/dist/commands.js +236 -0
  22. package/dist/commands.js.map +1 -0
  23. package/dist/packageMetadata.d.ts +5 -0
  24. package/dist/packageMetadata.d.ts.map +1 -0
  25. package/dist/packageMetadata.js +10 -0
  26. package/dist/packageMetadata.js.map +1 -0
  27. package/dist/projectSeed.d.ts +30 -0
  28. package/dist/projectSeed.d.ts.map +1 -0
  29. package/dist/projectSeed.js +37 -0
  30. package/dist/projectSeed.js.map +1 -0
  31. package/dist/templateSelector.d.ts +12 -0
  32. package/dist/templateSelector.d.ts.map +1 -0
  33. package/dist/templateSelector.js +60 -0
  34. package/dist/templateSelector.js.map +1 -0
  35. package/dist/templates/starter/index.d.ts +1 -1
  36. package/dist/templates/starter/index.d.ts.map +1 -1
  37. package/dist/templates/starter/index.js +1 -1
  38. package/dist/templates/starter/index.js.map +1 -1
  39. package/dist/templates/starter/starter.registry.d.ts.map +1 -1
  40. package/dist/templates/starter/starter.registry.js +4 -0
  41. package/dist/templates/starter/starter.registry.js.map +1 -1
  42. package/dist/templates/starter/starter.template.d.ts +3 -3
  43. package/dist/templates/starter/starter.template.d.ts.map +1 -1
  44. package/dist/templates/starter/starter.template.js +2 -2
  45. package/dist/templates/starter/starter.template.js.map +1 -1
  46. package/dist/templates/starter/starter.types.d.ts +3 -1
  47. package/dist/templates/starter/starter.types.d.ts.map +1 -1
  48. package/dist/templates/starter/starter.types.js +1 -0
  49. package/dist/templates/starter/starter.types.js.map +1 -1
  50. package/package.json +22 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ankhorage/templates
2
2
 
3
+ ## 1.9.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 82d0247: Release package entry changes.
8
+
9
+ ## 1.9.0
10
+
11
+ ### Minor Changes
12
+
13
+ - 18fd9d2: Add Ankh provider metadata, standalone CLI commands, and manifest-first template seed creation.
14
+
3
15
  ## 1.8.9
4
16
 
5
17
  ### Patch Changes
package/README.md CHANGED
@@ -2,6 +2,45 @@
2
2
 
3
3
  Reusable Ankhorage app templates, presets, and manifest generators.
4
4
 
5
+ ## CLI And Provider Commands
6
+
7
+ `@ankhorage/templates` is now also a package-scoped Ankh provider and standalone CLI for the
8
+ template catalog.
9
+
10
+ Shipped commands:
11
+
12
+ ```bash
13
+ ankh templates list
14
+ ankh templates list --category games
15
+
16
+ ankh templates inspect games/chess
17
+
18
+ ankh templates create my-app --template games/chess
19
+
20
+ bunx @ankhorage/templates list
21
+ bunx @ankhorage/templates inspect games/chess
22
+ bunx @ankhorage/templates create my-app --template games/chess
23
+ ```
24
+
25
+ Canonical selector syntax is strict:
26
+
27
+ - use `<category>/<templateId>`
28
+ - examples: `games/default`, `games/chess`, `social_community/creator`
29
+ - `create` and `inspect` reject bare ids like `chess`
30
+ - CLI/provider commands do not silently fall back from invalid selectors
31
+
32
+ `create` is manifest-first only in this package. It writes:
33
+
34
+ ```txt
35
+ my-app/
36
+ ankh.config.json
37
+ ankh.template.json
38
+ README.md
39
+ ```
40
+
41
+ It does not scaffold a full runnable app/workspace, install dependencies, or depend on Studio.
42
+ Root-level `ankh create ...` remains a later composition concern outside this package.
43
+
5
44
  ## Usage
6
45
 
7
46
  ```ts
@@ -0,0 +1,18 @@
1
+ import type { AppManifest } from '@ankhorage/contracts';
2
+ import { type StarterTemplateCategory } from './templates/starter/index.js';
3
+ import type { ParsedTemplateSelector } from './templateSelector.js';
4
+ export interface TemplateCatalogEntry {
5
+ readonly selector: string;
6
+ readonly category: StarterTemplateCategory;
7
+ readonly templateId: string;
8
+ readonly label: string;
9
+ readonly description: string;
10
+ }
11
+ export declare function listTemplateCatalog(category?: StarterTemplateCategory): readonly TemplateCatalogEntry[];
12
+ export declare function resolveTemplateCatalogEntry(selector: ParsedTemplateSelector): TemplateCatalogEntry;
13
+ export declare function createManifestForSelector(args: {
14
+ readonly selector: ParsedTemplateSelector;
15
+ readonly projectSlug: string;
16
+ readonly displayName: string;
17
+ }): AppManifest;
18
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,sBAAsB,CAAC;AAKrE,OAAO,EAIL,KAAK,uBAAuB,EAG7B,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGpE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAKD,wBAAgB,mBAAmB,CACjC,QAAQ,CAAC,EAAE,uBAAuB,GACjC,SAAS,oBAAoB,EAAE,CAQjC;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,sBAAsB,GAC/B,oBAAoB,CAoBtB;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE;IAC9C,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,GAAG,WAAW,CAcd"}
@@ -0,0 +1,84 @@
1
+ import { CATEGORY_PRESETS } from './presets/category-presets.js';
2
+ import { createFallbackStarterTemplate } from './templates/starter/categories/fallback/default.template.js';
3
+ import { fallbackStarterTemplates } from './templates/starter/categories/fallback/index.js';
4
+ import { createStarterTemplate, FALLBACK_TEMPLATE_CATEGORY, listStarterTemplateSummaries, } from './templates/starter/index.js';
5
+ import { createTemplateSelector } from './templateSelector.js';
6
+ const FALLBACK_THEME_HARMONY = 'analogous';
7
+ const FALLBACK_FOCUS_AREAS = ['Home', 'Details', 'Settings'];
8
+ export function listTemplateCatalog(category) {
9
+ const entries = createTemplateCatalogEntries();
10
+ if (category === undefined) {
11
+ return entries;
12
+ }
13
+ return entries.filter((entry) => entry.category === category);
14
+ }
15
+ export function resolveTemplateCatalogEntry(selector) {
16
+ const entry = listTemplateCatalog(selector.category).find((candidate) => candidate.templateId === selector.templateId);
17
+ if (entry !== undefined) {
18
+ return entry;
19
+ }
20
+ const availableSelectors = listTemplateCatalog(selector.category).map((candidate) => candidate.selector);
21
+ if (availableSelectors.length === 0) {
22
+ throw new Error(`Template category "${selector.category}" does not expose any templates.`);
23
+ }
24
+ throw new Error(`Unknown template selector "${selector.selector}". Available selectors: ${availableSelectors.join(', ')}.`);
25
+ }
26
+ export function createManifestForSelector(args) {
27
+ const seed = createTemplateSeed({
28
+ category: args.selector.category,
29
+ displayName: args.displayName,
30
+ projectSlug: args.projectSlug,
31
+ });
32
+ if (args.selector.category === FALLBACK_TEMPLATE_CATEGORY) {
33
+ return createFallbackStarterTemplate(seed);
34
+ }
35
+ return createStarterTemplate(seed, {
36
+ templateId: args.selector.templateId,
37
+ });
38
+ }
39
+ function createTemplateCatalogEntries() {
40
+ const fallbackEntries = fallbackStarterTemplates.map((template) => ({
41
+ selector: createTemplateSelector(FALLBACK_TEMPLATE_CATEGORY, template.id),
42
+ category: FALLBACK_TEMPLATE_CATEGORY,
43
+ templateId: template.id,
44
+ label: template.label,
45
+ description: template.description,
46
+ }));
47
+ const starterEntries = listStarterTemplateSummaries().map(createTemplateCatalogEntry);
48
+ return [...fallbackEntries, ...starterEntries];
49
+ }
50
+ function createTemplateCatalogEntry(summary) {
51
+ return {
52
+ selector: createTemplateSelector(summary.category, summary.id),
53
+ category: summary.category,
54
+ templateId: summary.id,
55
+ label: summary.label,
56
+ description: summary.description,
57
+ };
58
+ }
59
+ function createTemplateSeed(args) {
60
+ if (args.category === FALLBACK_TEMPLATE_CATEGORY) {
61
+ return {
62
+ category: FALLBACK_TEMPLATE_CATEGORY,
63
+ categoryLabel: 'Fallback',
64
+ appName: args.displayName,
65
+ slug: args.projectSlug,
66
+ summary: 'Generic starter seed',
67
+ focusAreas: FALLBACK_FOCUS_AREAS,
68
+ primaryColor: '#2563EB',
69
+ harmony: FALLBACK_THEME_HARMONY,
70
+ };
71
+ }
72
+ const preset = CATEGORY_PRESETS[args.category];
73
+ return {
74
+ category: args.category,
75
+ categoryLabel: preset.label,
76
+ appName: args.displayName,
77
+ slug: args.projectSlug,
78
+ summary: preset.summary,
79
+ focusAreas: preset.focusAreas,
80
+ primaryColor: preset.primaryColor,
81
+ harmony: preset.harmony,
82
+ };
83
+ }
84
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { AnkhRuntimeCommandProvider } from '@ankhorage/ankh';
2
+ import { type RunTemplatesCommandImpl, type RunTemplatesCommandOptions } from '../commands.js';
3
+ export interface CreateTemplatesRuntimeProviderOptions extends Omit<RunTemplatesCommandOptions, 'runCommandImpl'> {
4
+ readonly runCommandImpl?: RunTemplatesCommandImpl;
5
+ }
6
+ export declare function createTemplatesRuntimeProvider(options?: CreateTemplatesRuntimeProviderOptions): AnkhRuntimeCommandProvider;
7
+ declare const provider: AnkhRuntimeCommandProvider;
8
+ export default provider;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAEhC,MAAM,gBAAgB,CAAC;AAQxB,MAAM,WAAW,qCAAsC,SAAQ,IAAI,CACjE,0BAA0B,EAC1B,gBAAgB,CACjB;IACC,QAAQ,CAAC,cAAc,CAAC,EAAE,uBAAuB,CAAC;CACnD;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,GAAE,qCAA0C,GAClD,0BAA0B,CAuB5B;AAED,QAAA,MAAM,QAAQ,4BAAmC,CAAC;AAElD,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { createProviderCommandDescriptors, runTemplatesCommand, TEMPLATES_COMMANDS, } from '../commands.js';
2
+ import { TEMPLATES_CAPABILITIES, TEMPLATES_COMMAND_CATEGORY, TEMPLATES_PACKAGE_NAME, TEMPLATES_PACKAGE_VERSION, } from '../packageMetadata.js';
3
+ export function createTemplatesRuntimeProvider(options = {}) {
4
+ const runCommandImpl = options.runCommandImpl ?? runTemplatesCommand;
5
+ return {
6
+ id: TEMPLATES_PACKAGE_NAME,
7
+ category: TEMPLATES_COMMAND_CATEGORY,
8
+ version: TEMPLATES_PACKAGE_VERSION,
9
+ capabilities: [...TEMPLATES_CAPABILITIES],
10
+ commands: createProviderCommandDescriptors(),
11
+ handlers: TEMPLATES_COMMANDS.map((command) => ({
12
+ path: command.path,
13
+ handler(request) {
14
+ return runCommandImpl({
15
+ argv: request.argv,
16
+ command,
17
+ context: request.context,
18
+ }, options);
19
+ },
20
+ })),
21
+ };
22
+ }
23
+ const provider = createTemplatesRuntimeProvider();
24
+ export default provider;
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gCAAgC,EAChC,mBAAmB,EAGnB,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAS/B,MAAM,UAAU,8BAA8B,CAC5C,UAAiD,EAAE;IAEnD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,mBAAmB,CAAC;IAErE,OAAO;QACL,EAAE,EAAE,sBAAsB;QAC1B,QAAQ,EAAE,0BAA0B;QACpC,OAAO,EAAE,yBAAyB;QAClC,YAAY,EAAE,CAAC,GAAG,sBAAsB,CAAC;QACzC,QAAQ,EAAE,gCAAgC,EAAE;QAC5C,QAAQ,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,CAAC,OAAO;gBACb,OAAO,cAAc,CACnB;oBACE,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO;oBACP,OAAO,EAAE,OAAO,CAAC,OAAO;iBACzB,EACD,OAAO,CACR,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;KACiC,CAAC;AACzC,CAAC;AAED,MAAM,QAAQ,GAAG,8BAA8B,EAAE,CAAC;AAElD,eAAe,QAAQ,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env bun
2
+ import type { TemplatesCommandContext, TemplatesCommandRunResult } from './commandContext.js';
3
+ import { type RunTemplatesCommandImpl, type RunTemplatesCommandOptions } from './commands.js';
4
+ export interface TemplatesCliOptions extends Omit<RunTemplatesCommandOptions, 'runCommandImpl'> {
5
+ readonly context?: TemplatesCommandContext;
6
+ readonly runCommandImpl?: RunTemplatesCommandImpl;
7
+ }
8
+ export declare function runCli(argv: readonly string[], options?: TemplatesCliOptions): Promise<TemplatesCommandRunResult>;
9
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAE9F,OAAO,EAKL,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAChC,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,0BAA0B,EAAE,gBAAgB,CAAC;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,cAAc,CAAC,EAAE,uBAAuB,CAAC;CACnD;AAED,wBAAsB,MAAM,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,yBAAyB,CAAC,CA6BpC"}
package/dist/cli.js ADDED
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env bun
2
+ import { createDefaultCommandContext } from './commandContext.js';
3
+ import { findTemplatesCommandByStandaloneName, renderRootHelp, renderUnknownCommand, runTemplatesCommand, } from './commands.js';
4
+ export async function runCli(argv, options = {}) {
5
+ const context = options.context ?? createDefaultCommandContext();
6
+ const runCommand = options.runCommandImpl ?? runTemplatesCommand;
7
+ const [firstToken, ...restTokens] = argv;
8
+ if (firstToken === undefined || isHelpToken(firstToken)) {
9
+ context.writeStdout(renderRootHelp(context.version));
10
+ return { exitCode: 0 };
11
+ }
12
+ if (isVersionToken(firstToken)) {
13
+ context.writeStdout(`${context.version}\n`);
14
+ return { exitCode: 0 };
15
+ }
16
+ const command = findTemplatesCommandByStandaloneName(firstToken);
17
+ if (command === null) {
18
+ context.writeStderr(renderUnknownCommand(firstToken));
19
+ return { exitCode: 1 };
20
+ }
21
+ return runCommand({
22
+ argv: restTokens,
23
+ command,
24
+ context,
25
+ }, options);
26
+ }
27
+ function isHelpToken(value) {
28
+ return value === '--help' || value === '-h' || value === 'help';
29
+ }
30
+ function isVersionToken(value) {
31
+ return value === '--version' || value === '-v' || value === 'version';
32
+ }
33
+ if (import.meta.main) {
34
+ const result = await runCli(process.argv.slice(2));
35
+ process.exit(result.exitCode);
36
+ }
37
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EACL,oCAAoC,EACpC,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GAGpB,MAAM,eAAe,CAAC;AAOvB,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,IAAuB,EACvB,UAA+B,EAAE;IAEjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,2BAA2B,EAAE,CAAC;IACjE,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,IAAI,mBAAmB,CAAC;IACjE,MAAM,CAAC,UAAU,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC;IAEzC,IAAI,UAAU,KAAK,SAAS,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QACrD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;QAC5C,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,OAAO,GAAG,oCAAoC,CAAC,UAAU,CAAC,CAAC;IACjE,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC;QACtD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,UAAU,CACf;QACE,IAAI,EAAE,UAAU;QAChB,OAAO;QACP,OAAO;KACR,EACD,OAAO,CACR,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,CAAC;AAClE,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AACxE,CAAC;AAED,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface TemplatesCommandContext {
2
+ readonly cwd: string;
3
+ readonly env: Readonly<Record<string, string | undefined>>;
4
+ readonly version: string;
5
+ writeStdout(text: string): void;
6
+ writeStderr(text: string): void;
7
+ }
8
+ export interface TemplatesCommandRunResult {
9
+ readonly exitCode: number;
10
+ }
11
+ export declare function createDefaultCommandContext(): TemplatesCommandContext;
12
+ //# sourceMappingURL=commandContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandContext.d.ts","sourceRoot":"","sources":["../src/commandContext.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,2BAA2B,IAAI,uBAAuB,CAYrE"}
@@ -0,0 +1,15 @@
1
+ import { TEMPLATES_PACKAGE_VERSION } from './packageMetadata.js';
2
+ export function createDefaultCommandContext() {
3
+ return {
4
+ cwd: process.cwd(),
5
+ env: process.env,
6
+ version: TEMPLATES_PACKAGE_VERSION,
7
+ writeStdout(text) {
8
+ process.stdout.write(text);
9
+ },
10
+ writeStderr(text) {
11
+ process.stderr.write(text);
12
+ },
13
+ };
14
+ }
15
+ //# sourceMappingURL=commandContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandContext.js","sourceRoot":"","sources":["../src/commandContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAcjE,MAAM,UAAU,2BAA2B;IACzC,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,OAAO,EAAE,yBAAyB;QAClC,WAAW,CAAC,IAAY;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,WAAW,CAAC,IAAY;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,64 @@
1
+ import type { AnkhCapabilityId, AnkhCommandDescriptor } from '@ankhorage/contracts/cli';
2
+ import { createManifestForSelector, resolveTemplateCatalogEntry, type TemplateCatalogEntry } from './catalog.js';
3
+ import type { TemplatesCommandContext, TemplatesCommandRunResult } from './commandContext.js';
4
+ import { type CreateProjectSeedRequest, type ProjectSeedDependencies } from './projectSeed.js';
5
+ import type { StarterTemplateCategory } from './templates/starter/index.js';
6
+ type TemplatesCommandName = 'create' | 'inspect' | 'list';
7
+ interface TemplatesCommandRunRequest {
8
+ readonly context: TemplatesCommandContext;
9
+ }
10
+ type TemplatesCommandImplementation = (request: TemplatesCommandRunRequest, services: TemplatesCommandServices, argv: readonly string[]) => Promise<TemplatesCommandRunResult>;
11
+ export interface TemplatesCommandDefinition {
12
+ readonly capability: AnkhCapabilityId;
13
+ readonly path: readonly [TemplatesCommandName];
14
+ readonly standaloneName: TemplatesCommandName;
15
+ readonly summary: string;
16
+ readonly run: TemplatesCommandImplementation;
17
+ }
18
+ export interface TemplatesCommandInvocation {
19
+ readonly argv: readonly string[];
20
+ readonly command: TemplatesCommandDefinition;
21
+ readonly context: TemplatesCommandContext;
22
+ }
23
+ interface TemplatesCommandServices {
24
+ readonly createManifestForSelector: typeof createManifestForSelector;
25
+ readonly createProjectSeed: (request: CreateProjectSeedRequest, dependencies?: Partial<ProjectSeedDependencies>) => Promise<{
26
+ readonly projectPath: string;
27
+ }>;
28
+ readonly listTemplateCatalog: (category?: StarterTemplateCategory) => readonly TemplateCatalogEntry[];
29
+ readonly resolveTemplateCatalogEntry: typeof resolveTemplateCatalogEntry;
30
+ }
31
+ export interface RunTemplatesCommandOptions {
32
+ readonly services?: Partial<TemplatesCommandServices>;
33
+ readonly runCommandImpl?: RunTemplatesCommandImpl;
34
+ }
35
+ export type RunTemplatesCommandImpl = (request: TemplatesCommandInvocation, options?: RunTemplatesCommandOptions) => Promise<TemplatesCommandRunResult>;
36
+ export declare const TEMPLATES_COMMANDS: readonly [{
37
+ readonly standaloneName: "list";
38
+ readonly path: readonly ["list"];
39
+ readonly capability: "templates.list";
40
+ readonly summary: "List canonical template selectors from the published template catalog.";
41
+ readonly run: typeof runListCommand;
42
+ }, {
43
+ readonly standaloneName: "inspect";
44
+ readonly path: readonly ["inspect"];
45
+ readonly capability: "templates.inspect";
46
+ readonly summary: "Inspect one canonical template selector and print its manifest metadata.";
47
+ readonly run: typeof runInspectCommand;
48
+ }, {
49
+ readonly standaloneName: "create";
50
+ readonly path: readonly ["create"];
51
+ readonly capability: "templates.create";
52
+ readonly summary: "Create a manifest-first project seed from one canonical template selector.";
53
+ readonly run: typeof runCreateCommand;
54
+ }];
55
+ export declare function runTemplatesCommand(request: TemplatesCommandInvocation, options?: RunTemplatesCommandOptions): Promise<TemplatesCommandRunResult>;
56
+ export declare function createProviderCommandDescriptors(): readonly AnkhCommandDescriptor[];
57
+ export declare function findTemplatesCommandByStandaloneName(value: string): TemplatesCommandDefinition | null;
58
+ export declare function renderRootHelp(version: string): string;
59
+ export declare function renderUnknownCommand(value: string): string;
60
+ declare function runListCommand(request: TemplatesCommandRunRequest, services: TemplatesCommandServices, argv: readonly string[]): Promise<TemplatesCommandRunResult>;
61
+ declare function runInspectCommand(request: TemplatesCommandRunRequest, services: TemplatesCommandServices, argv: readonly string[]): Promise<TemplatesCommandRunResult>;
62
+ declare function runCreateCommand(request: TemplatesCommandRunRequest, services: TemplatesCommandServices, argv: readonly string[]): Promise<TemplatesCommandRunResult>;
63
+ export {};
64
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,236 @@
1
+ import { createManifestForSelector, listTemplateCatalog, resolveTemplateCatalogEntry, } from './catalog.js';
2
+ import { TEMPLATES_CAPABILITIES, TEMPLATES_COMMAND_CATEGORY, TEMPLATES_PACKAGE_NAME, TEMPLATES_PACKAGE_VERSION, } from './packageMetadata.js';
3
+ import { createProjectSeed, } from './projectSeed.js';
4
+ import { deriveDisplayNameFromSlug, parseProjectSlug, parseTemplateCategory, parseTemplateSelector, } from './templateSelector.js';
5
+ const COMMAND_CAPABILITIES = {
6
+ list: TEMPLATES_CAPABILITIES[0],
7
+ inspect: TEMPLATES_CAPABILITIES[1],
8
+ create: TEMPLATES_CAPABILITIES[2],
9
+ };
10
+ export const TEMPLATES_COMMANDS = [
11
+ {
12
+ standaloneName: 'list',
13
+ path: ['list'],
14
+ capability: COMMAND_CAPABILITIES.list,
15
+ summary: 'List canonical template selectors from the published template catalog.',
16
+ run: runListCommand,
17
+ },
18
+ {
19
+ standaloneName: 'inspect',
20
+ path: ['inspect'],
21
+ capability: COMMAND_CAPABILITIES.inspect,
22
+ summary: 'Inspect one canonical template selector and print its manifest metadata.',
23
+ run: runInspectCommand,
24
+ },
25
+ {
26
+ standaloneName: 'create',
27
+ path: ['create'],
28
+ capability: COMMAND_CAPABILITIES.create,
29
+ summary: 'Create a manifest-first project seed from one canonical template selector.',
30
+ run: runCreateCommand,
31
+ },
32
+ ];
33
+ export async function runTemplatesCommand(request, options = {}) {
34
+ const services = createTemplatesCommandServices(options.services);
35
+ const [firstArg] = request.argv;
36
+ try {
37
+ if (request.argv.length === 1 && firstArg !== undefined && isHelpToken(firstArg)) {
38
+ request.context.writeStdout(renderCommandHelp(request.command));
39
+ return { exitCode: 0 };
40
+ }
41
+ return await request.command.run(request, services, request.argv);
42
+ }
43
+ catch (error) {
44
+ request.context.writeStderr(renderCommandFailure(request.command.standaloneName, error));
45
+ return { exitCode: 1 };
46
+ }
47
+ }
48
+ export function createProviderCommandDescriptors() {
49
+ return TEMPLATES_COMMANDS.map((command) => ({
50
+ capability: command.capability,
51
+ path: command.path,
52
+ summary: command.summary,
53
+ }));
54
+ }
55
+ export function findTemplatesCommandByStandaloneName(value) {
56
+ return TEMPLATES_COMMANDS.find((command) => command.standaloneName === value) ?? null;
57
+ }
58
+ export function renderRootHelp(version) {
59
+ const commandLines = TEMPLATES_COMMANDS.map((command) => ` ${command.standaloneName.padEnd(8, ' ')} ${command.summary}`).join('\n');
60
+ return [
61
+ `@ankhorage/templates v${version}`,
62
+ '',
63
+ 'Usage:',
64
+ ' ankhorage-templates <command> [options]',
65
+ ` ankh ${TEMPLATES_COMMAND_CATEGORY} <command> [options]`,
66
+ '',
67
+ 'Commands:',
68
+ commandLines,
69
+ '',
70
+ 'Selector syntax:',
71
+ ' Use canonical template selectors shaped as <category>/<templateId>.',
72
+ '',
73
+ 'Project creation:',
74
+ ' Create writes manifest-first project seeds only.',
75
+ '',
76
+ ].join('\n');
77
+ }
78
+ export function renderUnknownCommand(value) {
79
+ return [`Unknown templates command: ${value}`, '', 'Run ankhorage-templates --help', ''].join('\n');
80
+ }
81
+ function renderCommandHelp(command) {
82
+ const usageLine = command.standaloneName === 'create'
83
+ ? ` ankhorage-templates create <projectSlug> --template <category>/<templateId>`
84
+ : command.standaloneName === 'inspect'
85
+ ? ` ankhorage-templates inspect <category>/<templateId>`
86
+ : ' ankhorage-templates list [--category <category>]';
87
+ const ankhUsageLine = command.standaloneName === 'create'
88
+ ? ` ankh ${TEMPLATES_COMMAND_CATEGORY} create <projectSlug> --template <category>/<templateId>`
89
+ : command.standaloneName === 'inspect'
90
+ ? ` ankh ${TEMPLATES_COMMAND_CATEGORY} inspect <category>/<templateId>`
91
+ : ` ankh ${TEMPLATES_COMMAND_CATEGORY} list [--category <category>]`;
92
+ return [
93
+ command.summary,
94
+ '',
95
+ 'Usage:',
96
+ usageLine,
97
+ ankhUsageLine,
98
+ '',
99
+ 'Selector syntax:',
100
+ ' Use canonical template selectors shaped as <category>/<templateId>.',
101
+ '',
102
+ ].join('\n');
103
+ }
104
+ function createTemplatesCommandServices(overrides = {}) {
105
+ return {
106
+ createManifestForSelector: overrides.createManifestForSelector ?? createManifestForSelector,
107
+ createProjectSeed: overrides.createProjectSeed ?? createProjectSeed,
108
+ listTemplateCatalog: overrides.listTemplateCatalog ?? listTemplateCatalog,
109
+ resolveTemplateCatalogEntry: overrides.resolveTemplateCatalogEntry ?? resolveTemplateCatalogEntry,
110
+ };
111
+ }
112
+ function runListCommand(request, services, argv) {
113
+ const category = parseListArguments(argv);
114
+ const entries = services.listTemplateCatalog(category);
115
+ request.context.writeStdout(renderTemplateList(entries));
116
+ return Promise.resolve({ exitCode: 0 });
117
+ }
118
+ function runInspectCommand(request, services, argv) {
119
+ const selector = parseInspectArguments(argv);
120
+ const entry = services.resolveTemplateCatalogEntry(selector);
121
+ const manifest = services.createManifestForSelector({
122
+ selector,
123
+ projectSlug: 'template-preview',
124
+ displayName: 'Template Preview',
125
+ });
126
+ request.context.writeStdout(renderTemplateInspection(entry, manifest));
127
+ return Promise.resolve({ exitCode: 0 });
128
+ }
129
+ async function runCreateCommand(request, services, argv) {
130
+ const { projectSlug, selector } = parseCreateArguments(argv);
131
+ const entry = services.resolveTemplateCatalogEntry(selector);
132
+ const displayName = deriveDisplayNameFromSlug(projectSlug);
133
+ const manifest = services.createManifestForSelector({
134
+ selector,
135
+ projectSlug,
136
+ displayName,
137
+ });
138
+ const readmeText = createSeedReadme({
139
+ displayName,
140
+ projectSlug,
141
+ selector: entry.selector,
142
+ });
143
+ const result = await services.createProjectSeed({
144
+ cwd: request.context.cwd,
145
+ projectSlug,
146
+ readmeText,
147
+ metadata: {
148
+ package: TEMPLATES_PACKAGE_NAME,
149
+ version: TEMPLATES_PACKAGE_VERSION,
150
+ projectSlug,
151
+ displayName,
152
+ category: entry.category,
153
+ templateId: entry.templateId,
154
+ selector: entry.selector,
155
+ },
156
+ manifest,
157
+ });
158
+ request.context.writeStdout(renderCreateSuccess(result.projectPath));
159
+ return { exitCode: 0 };
160
+ }
161
+ function parseListArguments(argv) {
162
+ if (argv.length === 0) {
163
+ return undefined;
164
+ }
165
+ if (argv.length === 2 && argv[0] === '--category') {
166
+ return parseTemplateCategory(argv[1] ?? '');
167
+ }
168
+ throw new Error('Templates list accepts only the optional --category <category> flag.');
169
+ }
170
+ function parseInspectArguments(argv) {
171
+ if (argv.length !== 1) {
172
+ throw new Error('Templates inspect requires exactly one <category>/<templateId> selector.');
173
+ }
174
+ return parseTemplateSelector(argv[0] ?? '');
175
+ }
176
+ function parseCreateArguments(argv) {
177
+ const [rawProjectSlug, firstFlag, rawSelector] = argv;
178
+ if (rawProjectSlug === undefined) {
179
+ throw new Error('Templates create requires <projectSlug> and --template <category>/<templateId>.');
180
+ }
181
+ if (argv.length !== 3 || firstFlag !== '--template' || rawSelector === undefined) {
182
+ throw new Error('Templates create requires <projectSlug> and --template <category>/<templateId>.');
183
+ }
184
+ return {
185
+ projectSlug: parseProjectSlug(rawProjectSlug),
186
+ selector: parseTemplateSelector(rawSelector),
187
+ };
188
+ }
189
+ function renderTemplateList(entries) {
190
+ const lines = entries.map((entry) => ` ${entry.selector} - ${entry.label}: ${entry.description}`);
191
+ return ['Available templates:', '', ...lines, ''].join('\n');
192
+ }
193
+ function renderTemplateInspection(entry, manifest) {
194
+ return `${JSON.stringify({
195
+ selector: entry.selector,
196
+ category: entry.category,
197
+ templateId: entry.templateId,
198
+ label: entry.label,
199
+ description: entry.description,
200
+ manifestVersion: manifest.metadata.version,
201
+ manifest,
202
+ }, null, 2)}\n`;
203
+ }
204
+ function renderCreateSuccess(projectPath) {
205
+ return [
206
+ `Created manifest-first project seed at ${projectPath}`,
207
+ '',
208
+ 'Files:',
209
+ ' ankh.config.json',
210
+ ' ankh.template.json',
211
+ ' README.md',
212
+ '',
213
+ ].join('\n');
214
+ }
215
+ function createSeedReadme(args) {
216
+ return [
217
+ `# ${args.displayName}`,
218
+ '',
219
+ `Generated from \`@ankhorage/templates\` template \`${args.selector}\`.`,
220
+ '',
221
+ 'This is a manifest-first Ankhorage project seed.',
222
+ '',
223
+ 'Next extraction step: runnable app/workspace scaffolding.',
224
+ '',
225
+ `Project slug: \`${args.projectSlug}\``,
226
+ '',
227
+ ].join('\n');
228
+ }
229
+ function renderCommandFailure(commandName, error) {
230
+ const message = error instanceof Error ? error.message : String(error);
231
+ return [`Templates ${commandName} failed: ${message}`, ''].join('\n');
232
+ }
233
+ function isHelpToken(value) {
234
+ return value === '--help' || value === '-h' || value === 'help';
235
+ }
236
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const TEMPLATES_PACKAGE_NAME: string;
2
+ export declare const TEMPLATES_PACKAGE_VERSION: string;
3
+ export declare const TEMPLATES_COMMAND_CATEGORY: "templates";
4
+ export declare const TEMPLATES_CAPABILITIES: readonly ["templates.list", "templates.inspect", "templates.create"];
5
+ //# sourceMappingURL=packageMetadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageMetadata.d.ts","sourceRoot":"","sources":["../src/packageMetadata.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,sBAAsB,QAAmB,CAAC;AACvD,eAAO,MAAM,yBAAyB,QAAsB,CAAC;AAC7D,eAAO,MAAM,0BAA0B,aAAqD,CAAC;AAC7F,eAAO,MAAM,sBAAsB,sEAIa,CAAC"}
@@ -0,0 +1,10 @@
1
+ import packageJson from '../package.json';
2
+ export const TEMPLATES_PACKAGE_NAME = packageJson.name;
3
+ export const TEMPLATES_PACKAGE_VERSION = packageJson.version;
4
+ export const TEMPLATES_COMMAND_CATEGORY = 'templates';
5
+ export const TEMPLATES_CAPABILITIES = [
6
+ 'templates.list',
7
+ 'templates.inspect',
8
+ 'templates.create',
9
+ ];
10
+ //# sourceMappingURL=packageMetadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packageMetadata.js","sourceRoot":"","sources":["../src/packageMetadata.ts"],"names":[],"mappings":"AAEA,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAE1C,MAAM,CAAC,MAAM,sBAAsB,GAAG,WAAW,CAAC,IAAI,CAAC;AACvD,MAAM,CAAC,MAAM,yBAAyB,GAAG,WAAW,CAAC,OAAO,CAAC;AAC7D,MAAM,CAAC,MAAM,0BAA0B,GAAG,WAAkD,CAAC;AAC7F,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,gBAAgB;IAChB,mBAAmB;IACnB,kBAAkB;CAC4B,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { mkdir, writeFile } from 'node:fs/promises';
2
+ import type { AppManifest } from '@ankhorage/contracts';
3
+ import type { StarterTemplateCategory } from './templates/starter/index.js';
4
+ interface TemplateSeedMetadata {
5
+ readonly package: string;
6
+ readonly version: string;
7
+ readonly projectSlug: string;
8
+ readonly displayName: string;
9
+ readonly category: StarterTemplateCategory;
10
+ readonly templateId: string;
11
+ readonly selector: string;
12
+ }
13
+ export interface CreateProjectSeedRequest {
14
+ readonly cwd: string;
15
+ readonly projectSlug: string;
16
+ readonly readmeText: string;
17
+ readonly metadata: TemplateSeedMetadata;
18
+ readonly manifest: AppManifest;
19
+ }
20
+ export interface CreateProjectSeedResult {
21
+ readonly projectPath: string;
22
+ }
23
+ export interface ProjectSeedDependencies {
24
+ readonly mkdir: typeof mkdir;
25
+ readonly pathExists: (targetPath: string) => Promise<boolean>;
26
+ readonly writeFile: typeof writeFile;
27
+ }
28
+ export declare function createProjectSeed(request: CreateProjectSeedRequest, dependencies?: Partial<ProjectSeedDependencies>): Promise<CreateProjectSeedResult>;
29
+ export {};
30
+ //# sourceMappingURL=projectSeed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectSeed.d.ts","sourceRoot":"","sources":["../src/projectSeed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAQ,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAE5E,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;CAChC;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,QAAQ,CAAC,SAAS,EAAE,OAAO,SAAS,CAAC;CACtC;AAED,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,wBAAwB,EACjC,YAAY,GAAE,OAAO,CAAC,uBAAuB,CAAM,GAClD,OAAO,CAAC,uBAAuB,CAAC,CA0BlC"}
@@ -0,0 +1,37 @@
1
+ import { mkdir, stat, writeFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ export async function createProjectSeed(request, dependencies = {}) {
4
+ const resolvedDependencies = createProjectSeedDependencies(dependencies);
5
+ const projectPath = path.resolve(request.cwd, request.projectSlug);
6
+ if (await resolvedDependencies.pathExists(projectPath)) {
7
+ throw new Error(`Project path already exists: ${projectPath}`);
8
+ }
9
+ await resolvedDependencies.mkdir(projectPath, { recursive: false });
10
+ await resolvedDependencies.writeFile(path.join(projectPath, 'ankh.config.json'), `${JSON.stringify(request.manifest, null, 2)}\n`, 'utf8');
11
+ await resolvedDependencies.writeFile(path.join(projectPath, 'ankh.template.json'), `${JSON.stringify(request.metadata, null, 2)}\n`, 'utf8');
12
+ await resolvedDependencies.writeFile(path.join(projectPath, 'README.md'), request.readmeText, 'utf8');
13
+ return { projectPath };
14
+ }
15
+ function createProjectSeedDependencies(overrides) {
16
+ return {
17
+ mkdir: overrides.mkdir ?? mkdir,
18
+ pathExists: overrides.pathExists ?? pathExists,
19
+ writeFile: overrides.writeFile ?? writeFile,
20
+ };
21
+ }
22
+ async function pathExists(targetPath) {
23
+ try {
24
+ await stat(targetPath);
25
+ return true;
26
+ }
27
+ catch (error) {
28
+ if (isNotFoundError(error)) {
29
+ return false;
30
+ }
31
+ throw error;
32
+ }
33
+ }
34
+ function isNotFoundError(error) {
35
+ return error instanceof Error && 'code' in error && error.code === 'ENOENT';
36
+ }
37
+ //# sourceMappingURL=projectSeed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectSeed.js","sourceRoot":"","sources":["../src/projectSeed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,IAAI,MAAM,WAAW,CAAC;AAkC7B,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAiC,EACjC,eAAiD,EAAE;IAEnD,MAAM,oBAAoB,GAAG,6BAA6B,CAAC,YAAY,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAEnE,IAAI,MAAM,oBAAoB,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,gCAAgC,WAAW,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,oBAAoB,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,MAAM,oBAAoB,CAAC,SAAS,CAClC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,EAC1C,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAChD,MAAM,CACP,CAAC;IACF,MAAM,oBAAoB,CAAC,SAAS,CAClC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,EAC5C,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAChD,MAAM,CACP,CAAC;IACF,MAAM,oBAAoB,CAAC,SAAS,CAClC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EACnC,OAAO,CAAC,UAAU,EAClB,MAAM,CACP,CAAC;IAEF,OAAO,EAAE,WAAW,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,6BAA6B,CACpC,SAA2C;IAE3C,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,KAAK,IAAI,KAAK;QAC/B,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,UAAU;QAC9C,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,SAAS;KAC5C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,UAAkB;IAC1C,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type StarterTemplateCategory } from './templates/starter';
2
+ export interface ParsedTemplateSelector {
3
+ readonly category: StarterTemplateCategory;
4
+ readonly templateId: string;
5
+ readonly selector: string;
6
+ }
7
+ export declare function parseTemplateCategory(value: string): StarterTemplateCategory;
8
+ export declare function parseTemplateSelector(value: string): ParsedTemplateSelector;
9
+ export declare function parseProjectSlug(value: string): string;
10
+ export declare function createTemplateSelector(category: StarterTemplateCategory, templateId: string): string;
11
+ export declare function deriveDisplayNameFromSlug(projectSlug: string): string;
12
+ //# sourceMappingURL=templateSelector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templateSelector.d.ts","sourceRoot":"","sources":["../src/templateSelector.ts"],"names":[],"mappings":"AAEA,OAAO,EAA8B,KAAK,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE/F,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAID,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,uBAAuB,CAY5E;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,sBAAsB,CAwB3E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBtD;AAED,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,uBAAuB,EACjC,UAAU,EAAE,MAAM,GACjB,MAAM,CAER;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAMrE"}
@@ -0,0 +1,60 @@
1
+ import { APP_CATEGORIES } from '@ankhorage/contracts';
2
+ import { FALLBACK_TEMPLATE_CATEGORY } from './templates/starter';
3
+ const PROJECT_SLUG_PATTERN = /^[a-z0-9][a-z0-9-]*[a-z0-9]$/u;
4
+ export function parseTemplateCategory(value) {
5
+ if (value === FALLBACK_TEMPLATE_CATEGORY) {
6
+ return value;
7
+ }
8
+ if (isAppCategory(value)) {
9
+ return value;
10
+ }
11
+ throw new Error(`Unknown template category "${value}". Run ankhorage-templates list to see available selectors.`);
12
+ }
13
+ export function parseTemplateSelector(value) {
14
+ const normalizedValue = value.trim();
15
+ const segments = normalizedValue.split('/');
16
+ if (segments.length !== 2 || segments.some((segment) => segment.length === 0)) {
17
+ throw new Error(`Invalid template selector "${value}". Use the canonical <category>/<templateId> format.`);
18
+ }
19
+ const [rawCategory, rawTemplateId] = segments;
20
+ if (rawCategory === undefined || rawTemplateId === undefined) {
21
+ throw new Error(`Invalid template selector "${value}". Use the canonical <category>/<templateId> format.`);
22
+ }
23
+ const category = parseTemplateCategory(rawCategory);
24
+ return {
25
+ category,
26
+ templateId: rawTemplateId,
27
+ selector: createTemplateSelector(category, rawTemplateId),
28
+ };
29
+ }
30
+ export function parseProjectSlug(value) {
31
+ const normalizedValue = value.trim();
32
+ if (normalizedValue.length === 0) {
33
+ throw new Error('Project slug is required.');
34
+ }
35
+ if (normalizedValue === '.' ||
36
+ normalizedValue === '..' ||
37
+ normalizedValue.startsWith('.') ||
38
+ normalizedValue.includes('/') ||
39
+ normalizedValue.includes('\\')) {
40
+ throw new Error(`Invalid project slug "${value}". Use a single lowercase slug like "my-app".`);
41
+ }
42
+ if (!PROJECT_SLUG_PATTERN.test(normalizedValue)) {
43
+ throw new Error(`Invalid project slug "${value}". Use a single lowercase slug like "my-app".`);
44
+ }
45
+ return normalizedValue;
46
+ }
47
+ export function createTemplateSelector(category, templateId) {
48
+ return `${category}/${templateId}`;
49
+ }
50
+ export function deriveDisplayNameFromSlug(projectSlug) {
51
+ return projectSlug
52
+ .split('-')
53
+ .filter((segment) => segment.length > 0)
54
+ .map((segment) => `${segment[0]?.toUpperCase() ?? ''}${segment.slice(1)}`)
55
+ .join(' ');
56
+ }
57
+ function isAppCategory(value) {
58
+ return APP_CATEGORIES.some((category) => category === value);
59
+ }
60
+ //# sourceMappingURL=templateSelector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templateSelector.js","sourceRoot":"","sources":["../src/templateSelector.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { createStarterTemplate, listStarterTemplateSummaries, listStarterTemplates, listStarterTemplatesByCategory, resolveStarterTemplate, TEMPLATE_KINDS, type CategoryStarterTemplateDefinition, type StarterTemplateFactory, type StarterTemplateId, type StarterTemplateOptions, type StarterTemplateSelection, type StarterTemplateSummary, type TemplateKind, type TemplateSeed, } from './starter.template';
1
+ export { FALLBACK_TEMPLATE_CATEGORY, createStarterTemplate, listStarterTemplateSummaries, listStarterTemplates, listStarterTemplatesByCategory, resolveStarterTemplate, TEMPLATE_KINDS, type CategoryStarterTemplateDefinition, type StarterTemplateFactory, type StarterTemplateCategory, type StarterTemplateId, type StarterTemplateOptions, type StarterTemplateSelection, type StarterTemplateSummary, type TemplateKind, type TemplateSeed, } from './starter.template';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/starter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,EACtB,cAAc,EACd,KAAK,iCAAiC,EACtC,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/templates/starter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,EACtB,cAAc,EACd,KAAK,iCAAiC,EACtC,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC"}
@@ -1,2 +1,2 @@
1
- export { createStarterTemplate, listStarterTemplateSummaries, listStarterTemplates, listStarterTemplatesByCategory, resolveStarterTemplate, TEMPLATE_KINDS, } from './starter.template';
1
+ export { FALLBACK_TEMPLATE_CATEGORY, createStarterTemplate, listStarterTemplateSummaries, listStarterTemplates, listStarterTemplatesByCategory, resolveStarterTemplate, TEMPLATE_KINDS, } from './starter.template';
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/starter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,EACtB,cAAc,GASf,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/templates/starter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,EACtB,cAAc,GAUf,MAAM,oBAAoB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"starter.registry.d.ts","sourceRoot":"","sources":["../../../src/templates/starter/starter.registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA0BxD,OAAO,KAAK,EACV,iCAAiC,EACjC,sBAAsB,EACtB,YAAY,EACb,MAAM,iBAAiB,CAAC;AAoDzB,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,YAAY,EAClB,UAAU,SAAY,GACrB,iCAAiC,CAMnC;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,CAAC,EAAE,WAAW,GACrB,SAAS,iCAAiC,EAAE,CAa9C;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,WAAW,GACpB,SAAS,sBAAsB,EAAE,CAInC;AAED,wBAAgB,4BAA4B,IAAI,SAAS,sBAAsB,EAAE,CAQhF"}
1
+ {"version":3,"file":"starter.registry.d.ts","sourceRoot":"","sources":["../../../src/templates/starter/starter.registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AA2BxD,OAAO,KAAK,EACV,iCAAiC,EACjC,sBAAsB,EACtB,YAAY,EACb,MAAM,iBAAiB,CAAC;AAoDzB,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,YAAY,EAClB,UAAU,SAAY,GACrB,iCAAiC,CAUnC;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,CAAC,EAAE,WAAW,GACrB,SAAS,iCAAiC,EAAE,CAa9C;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,WAAW,GACpB,SAAS,sBAAsB,EAAE,CAInC;AAED,wBAAgB,4BAA4B,IAAI,SAAS,sBAAsB,EAAE,CAQhF"}
@@ -1,3 +1,4 @@
1
+ import { FALLBACK_TEMPLATE_CATEGORY } from './starter.types';
1
2
  import { fallbackStarterTemplates } from './categories/fallback';
2
3
  import { booksReadingStarterTemplates } from './categories/books-reading';
3
4
  import { businessProductivityStarterTemplates } from './categories/business-productivity';
@@ -63,6 +64,9 @@ function createTemplateSummary(category, template) {
63
64
  };
64
65
  }
65
66
  export function resolveStarterTemplate(seed, templateId = 'default') {
67
+ if (seed.category === FALLBACK_TEMPLATE_CATEGORY) {
68
+ return resolveFallbackTemplate();
69
+ }
66
70
  const categoryTemplates = STARTER_TEMPLATE_REGISTRY[seed.category];
67
71
  const selected = categoryTemplates?.find((template) => template.id === templateId);
68
72
  const categoryDefault = categoryTemplates?.find((template) => template.id === 'default');
@@ -1 +1 @@
1
- {"version":3,"file":"starter.registry.js","sourceRoot":"","sources":["../../../src/templates/starter/starter.registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"starter.registry.js","sourceRoot":"","sources":["../../../src/templates/starter/starter.registry.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import type { AppManifest } from '@ankhorage/contracts';
2
2
  import { listStarterTemplateSummaries, listStarterTemplates, listStarterTemplatesByCategory, resolveStarterTemplate } from './starter.registry';
3
- import { TEMPLATE_KINDS, type StarterTemplateOptions, type TemplateSeed } from './starter.types';
4
- export { TEMPLATE_KINDS };
3
+ import { FALLBACK_TEMPLATE_CATEGORY, TEMPLATE_KINDS, type StarterTemplateOptions, type TemplateSeed } from './starter.types';
4
+ export { FALLBACK_TEMPLATE_CATEGORY, TEMPLATE_KINDS };
5
5
  export { listStarterTemplateSummaries, listStarterTemplates, listStarterTemplatesByCategory, resolveStarterTemplate, };
6
- export type { CategoryStarterTemplateDefinition, StarterTemplateFactory, StarterTemplateId, StarterTemplateOptions, StarterTemplateSelection, StarterTemplateSummary, TemplateKind, TemplateSeed, } from './starter.types';
6
+ export type { CategoryStarterTemplateDefinition, StarterTemplateFactory, StarterTemplateCategory, StarterTemplateId, StarterTemplateOptions, StarterTemplateSelection, StarterTemplateSummary, TemplateKind, TemplateSeed, } from './starter.types';
7
7
  export declare function createStarterTemplate(seed: TemplateSeed, options?: StarterTemplateOptions): AppManifest;
8
8
  //# sourceMappingURL=starter.template.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"starter.template.d.ts","sourceRoot":"","sources":["../../../src/templates/starter/starter.template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,KAAK,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEjG,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,GACvB,CAAC;AACF,YAAY,EACV,iCAAiC,EACjC,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,YAAY,EACZ,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE,sBAA2B,GACnC,WAAW,CAGb"}
1
+ {"version":3,"file":"starter.template.d.ts","sourceRoot":"","sources":["../../../src/templates/starter/starter.template.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,0BAA0B,EAC1B,cAAc,EAEd,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,0BAA0B,EAAE,cAAc,EAAE,CAAC;AACtD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,GACvB,CAAC;AACF,YAAY,EACV,iCAAiC,EACjC,sBAAsB,EACtB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,YAAY,EACZ,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,EAClB,OAAO,GAAE,sBAA2B,GACnC,WAAW,CAGb"}
@@ -1,6 +1,6 @@
1
1
  import { listStarterTemplateSummaries, listStarterTemplates, listStarterTemplatesByCategory, resolveStarterTemplate, } from './starter.registry';
2
- import { TEMPLATE_KINDS } from './starter.types';
3
- export { TEMPLATE_KINDS };
2
+ import { FALLBACK_TEMPLATE_CATEGORY, TEMPLATE_KINDS, } from './starter.types';
3
+ export { FALLBACK_TEMPLATE_CATEGORY, TEMPLATE_KINDS };
4
4
  export { listStarterTemplateSummaries, listStarterTemplates, listStarterTemplatesByCategory, resolveStarterTemplate, };
5
5
  export function createStarterTemplate(seed, options = {}) {
6
6
  const template = resolveStarterTemplate(seed, options.templateId);
@@ -1 +1 @@
1
- {"version":3,"file":"starter.template.js","sourceRoot":"","sources":["../../../src/templates/starter/starter.template.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAkD,MAAM,iBAAiB,CAAC;AAEjG,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,GACvB,CAAC;AAYF,MAAM,UAAU,qBAAqB,CACnC,IAAkB,EAClB,UAAkC,EAAE;IAEpC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAClE,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"starter.template.js","sourceRoot":"","sources":["../../../src/templates/starter/starter.template.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,0BAA0B,EAC1B,cAAc,GAIf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,0BAA0B,EAAE,cAAc,EAAE,CAAC;AACtD,OAAO,EACL,4BAA4B,EAC5B,oBAAoB,EACpB,8BAA8B,EAC9B,sBAAsB,GACvB,CAAC;AAaF,MAAM,UAAU,qBAAqB,CACnC,IAAkB,EAClB,UAAkC,EAAE;IAEpC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAClE,OAAO,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import type { AppCategory, AppManifest, ThemeConfig } from '@ankhorage/contracts';
2
+ export declare const FALLBACK_TEMPLATE_CATEGORY: "fallback";
3
+ export type StarterTemplateCategory = AppCategory | typeof FALLBACK_TEMPLATE_CATEGORY;
2
4
  export declare const TEMPLATE_KINDS: readonly ["starter"];
3
5
  export type TemplateKind = (typeof TEMPLATE_KINDS)[number];
4
6
  export type StarterTemplateId = string;
@@ -13,7 +15,7 @@ export interface StarterTemplateSummary {
13
15
  description: string;
14
16
  }
15
17
  export interface TemplateSeed {
16
- category: AppCategory;
18
+ category: StarterTemplateCategory;
17
19
  categoryLabel: string;
18
20
  appName: string;
19
21
  slug: string;
@@ -1 +1 @@
1
- {"version":3,"file":"starter.types.d.ts","sourceRoot":"","sources":["../../../src/templates/starter/starter.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAElF,eAAO,MAAM,cAAc,sBAAuB,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEvC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,iBAAiB,CAAC;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,MAAM,sBAAsB,GAAG,CACnC,IAAI,EAAE,YAAY,EAClB,OAAO,CAAC,EAAE,sBAAsB,KAC7B,WAAW,CAAC;AAEjB,MAAM,WAAW,iCAAiC;IAChD,EAAE,EAAE,iBAAiB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;CAChC"}
1
+ {"version":3,"file":"starter.types.d.ts","sourceRoot":"","sources":["../../../src/templates/starter/starter.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAElF,eAAO,MAAM,0BAA0B,EAAG,UAAmB,CAAC;AAE9D,MAAM,MAAM,uBAAuB,GAAG,WAAW,GAAG,OAAO,0BAA0B,CAAC;AAEtF,eAAO,MAAM,cAAc,sBAAuB,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEvC,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,iBAAiB,CAAC;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,uBAAuB,CAAC;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC;AAED,MAAM,MAAM,sBAAsB,GAAG,CACnC,IAAI,EAAE,YAAY,EAClB,OAAO,CAAC,EAAE,sBAAsB,KAC7B,WAAW,CAAC;AAEjB,MAAM,WAAW,iCAAiC;IAChD,EAAE,EAAE,iBAAiB,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;CAChC"}
@@ -1,2 +1,3 @@
1
+ export const FALLBACK_TEMPLATE_CATEGORY = 'fallback';
1
2
  export const TEMPLATE_KINDS = ['starter'];
2
3
  //# sourceMappingURL=starter.types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"starter.types.js","sourceRoot":"","sources":["../../../src/templates/starter/starter.types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,CAAU,CAAC"}
1
+ {"version":3,"file":"starter.types.js","sourceRoot":"","sources":["../../../src/templates/starter/starter.types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAmB,CAAC;AAI9D,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,CAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ankhorage/templates",
3
- "version": "1.8.9",
3
+ "version": "1.9.1",
4
4
  "description": "Reusable Ankhorage app templates, presets, and manifest generators.",
5
5
  "homepage": "https://github.com/ankhorage/templates#readme",
6
6
  "bugs": {
@@ -33,11 +33,28 @@
33
33
  ".": {
34
34
  "types": "./dist/index.d.ts",
35
35
  "import": "./dist/index.js"
36
- }
36
+ },
37
+ "./cli": {
38
+ "types": "./dist/cli/index.d.ts",
39
+ "import": "./dist/cli/index.js"
40
+ },
41
+ "./package.json": "./package.json"
37
42
  },
38
43
  "main": "./dist/index.js",
39
44
  "module": "./dist/index.js",
40
45
  "types": "./dist/index.d.ts",
46
+ "bin": {
47
+ "ankhorage-templates": "./dist/cli.js"
48
+ },
49
+ "ankh": {
50
+ "category": "templates",
51
+ "provider": "./dist/cli/index.js",
52
+ "capabilities": [
53
+ "templates.list",
54
+ "templates.inspect",
55
+ "templates.create"
56
+ ]
57
+ },
41
58
  "scripts": {
42
59
  "build": "bun x tsc -p tsconfig.json",
43
60
  "knip": "ankhorage-knip",
@@ -51,13 +68,15 @@
51
68
  "version-packages": "changeset version"
52
69
  },
53
70
  "dependencies": {
54
- "@ankhorage/contracts": "^1.18.3",
71
+ "@ankhorage/contracts": "^1.19.0",
55
72
  "@ankhorage/zora": "^2.8.0"
56
73
  },
57
74
  "devDependencies": {
75
+ "@ankhorage/ankh": "^0.4.0",
58
76
  "@ankhorage/devtools": "^1.0.6",
59
77
  "@changesets/cli": "^2.31.0",
60
78
  "@types/bun": "^1.3.13",
79
+ "@types/node": "^25.2.3",
61
80
  "@types/react": "^19.2.14",
62
81
  "typescript": "^5.9.3"
63
82
  },