@hypercli/kit 0.1.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 (70) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +23 -0
  3. package/dist/base-command.d.ts +58 -0
  4. package/dist/base-command.d.ts.map +1 -0
  5. package/dist/base-command.js +131 -0
  6. package/dist/base-command.js.map +1 -0
  7. package/dist/commands/cookbook/info.d.ts +24 -0
  8. package/dist/commands/cookbook/info.d.ts.map +1 -0
  9. package/dist/commands/cookbook/info.js +142 -0
  10. package/dist/commands/cookbook/info.js.map +1 -0
  11. package/dist/commands/cookbook/list.d.ts +18 -0
  12. package/dist/commands/cookbook/list.d.ts.map +1 -0
  13. package/dist/commands/cookbook/list.js +81 -0
  14. package/dist/commands/cookbook/list.js.map +1 -0
  15. package/dist/commands/kit/info.d.ts +23 -0
  16. package/dist/commands/kit/info.d.ts.map +1 -0
  17. package/dist/commands/kit/info.js +136 -0
  18. package/dist/commands/kit/info.js.map +1 -0
  19. package/dist/commands/kit/install.d.ts +49 -0
  20. package/dist/commands/kit/install.d.ts.map +1 -0
  21. package/dist/commands/kit/install.js +352 -0
  22. package/dist/commands/kit/install.js.map +1 -0
  23. package/dist/commands/kit/list.d.ts +15 -0
  24. package/dist/commands/kit/list.d.ts.map +1 -0
  25. package/dist/commands/kit/list.js +93 -0
  26. package/dist/commands/kit/list.js.map +1 -0
  27. package/dist/commands/kit/uninstall.d.ts +19 -0
  28. package/dist/commands/kit/uninstall.d.ts.map +1 -0
  29. package/dist/commands/kit/uninstall.js +79 -0
  30. package/dist/commands/kit/uninstall.js.map +1 -0
  31. package/dist/commands/kit/update.d.ts +21 -0
  32. package/dist/commands/kit/update.d.ts.map +1 -0
  33. package/dist/commands/kit/update.js +197 -0
  34. package/dist/commands/kit/update.js.map +1 -0
  35. package/dist/commands/recipe/info.d.ts +24 -0
  36. package/dist/commands/recipe/info.d.ts.map +1 -0
  37. package/dist/commands/recipe/info.js +149 -0
  38. package/dist/commands/recipe/info.js.map +1 -0
  39. package/dist/commands/recipe/list.d.ts +18 -0
  40. package/dist/commands/recipe/list.d.ts.map +1 -0
  41. package/dist/commands/recipe/list.js +104 -0
  42. package/dist/commands/recipe/list.js.map +1 -0
  43. package/dist/index.d.ts +4 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +7 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/lib/flags.d.ts +14 -0
  48. package/dist/lib/flags.d.ts.map +1 -0
  49. package/dist/lib/flags.js +30 -0
  50. package/dist/lib/flags.js.map +1 -0
  51. package/dist/manifest.d.ts +105 -0
  52. package/dist/manifest.d.ts.map +1 -0
  53. package/dist/manifest.js +115 -0
  54. package/dist/manifest.js.map +1 -0
  55. package/dist/source-resolver.d.ts +62 -0
  56. package/dist/source-resolver.d.ts.map +1 -0
  57. package/dist/source-resolver.js +187 -0
  58. package/dist/source-resolver.js.map +1 -0
  59. package/dist/utils/find-project-root.d.ts +32 -0
  60. package/dist/utils/find-project-root.d.ts.map +1 -0
  61. package/dist/utils/find-project-root.js +135 -0
  62. package/dist/utils/find-project-root.js.map +1 -0
  63. package/help/kit/info.md +41 -0
  64. package/help/kit/install.md +52 -0
  65. package/help/kit/list.md +25 -0
  66. package/help/kit/uninstall.md +38 -0
  67. package/help/kit/update.md +35 -0
  68. package/help/kit.md +36 -0
  69. package/oclif.manifest.json +587 -0
  70. package/package.json +92 -0
@@ -0,0 +1,18 @@
1
+ /**
2
+ * List recipes from installed kits
3
+ */
4
+ import { BaseCommand } from "#base-command";
5
+ export default class RecipeList extends BaseCommand<typeof RecipeList> {
6
+ static description: string;
7
+ static examples: string[];
8
+ static flags: {
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ cwd: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
+ debug: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ };
13
+ static args: {
14
+ kit: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
15
+ };
16
+ run(): Promise<void>;
17
+ }
18
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/recipe/list.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAW5C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW,CAAC,OAAO,UAAU,CAAC;IACrE,OAAgB,WAAW,SAAsC;IAEjE,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;MAGnB;IAEF,OAAgB,IAAI;;MAKlB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAyF1B"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * List recipes from installed kits
3
+ */
4
+ import { readFileSync } from "node:fs";
5
+ import { truncateDescription } from "@hypercli/core";
6
+ import { c, getContext, indent, keyValue, msg, renderMarkdown } from "@hypercli/ui";
7
+ import { Args } from "@oclif/core";
8
+ import yaml from "js-yaml";
9
+ import { BaseCommand } from "#base-command";
10
+ import { outputFlags } from "#lib/flags";
11
+ export default class RecipeList extends BaseCommand {
12
+ static description = "List recipes from installed kits";
13
+ static examples = [
14
+ "<%= config.bin %> recipe list",
15
+ "<%= config.bin %> recipe list starlight",
16
+ "<%= config.bin %> recipe list --json",
17
+ ];
18
+ static flags = {
19
+ ...BaseCommand.baseFlags,
20
+ ...outputFlags,
21
+ };
22
+ static args = {
23
+ kit: Args.string({
24
+ description: "Filter by kit name",
25
+ required: false,
26
+ }),
27
+ };
28
+ async run() {
29
+ const { args, flags } = await this.parse(RecipeList);
30
+ await this.resolveEffectiveCwd(flags);
31
+ const kits = await this.discoverKitTree(flags.cwd);
32
+ const targetKits = args.kit ? kits.filter((k) => k.manifest.name === args.kit) : kits;
33
+ if (targetKits.length === 0 && args.kit) {
34
+ this.log(msg.error(`Kit not found: ${args.kit}`));
35
+ this.log(`\n Run ${c.command("hyper kit list")} to see installed kits.\n`);
36
+ this.exit(1);
37
+ }
38
+ // Collect all recipes
39
+ const recipes = [];
40
+ for (const kit of targetKits) {
41
+ for (const cb of kit.cookbooks) {
42
+ for (const recipe of cb.recipes) {
43
+ let description;
44
+ try {
45
+ const content = readFileSync(recipe.path, "utf-8");
46
+ const parsed = yaml.load(content);
47
+ description = parsed?.description;
48
+ }
49
+ catch {
50
+ // ignore
51
+ }
52
+ recipes.push({
53
+ name: recipe.name,
54
+ kit: kit.manifest.name,
55
+ cookbook: cb.name,
56
+ description,
57
+ path: recipe.path,
58
+ });
59
+ }
60
+ }
61
+ }
62
+ if (flags.json) {
63
+ this.log(JSON.stringify(recipes, null, 2));
64
+ return;
65
+ }
66
+ if (recipes.length === 0) {
67
+ this.log(msg.info("No recipes found."));
68
+ this.log(`\n Run ${c.command("hyper kit install <source>")} to add a kit.\n`);
69
+ return;
70
+ }
71
+ this.log("");
72
+ this.log(renderMarkdown(`# ${recipes.length} Recipes Available`));
73
+ // Group by kit, then cookbook
74
+ const byKit = new Map();
75
+ for (const r of recipes) {
76
+ if (!byKit.has(r.kit))
77
+ byKit.set(r.kit, new Map());
78
+ const byCookbook = byKit.get(r.kit);
79
+ if (!byCookbook.has(r.cookbook))
80
+ byCookbook.set(r.cookbook, []);
81
+ byCookbook.get(r.cookbook).push(r);
82
+ }
83
+ const ctx = getContext();
84
+ const termWidth = ctx.capabilities.columns;
85
+ const indentSize = ctx.tokens.space.indent;
86
+ const recipeIndent = 3; // indent levels for recipe table
87
+ const separator = " ";
88
+ for (const [kitName, byCookbook] of byKit) {
89
+ this.log(renderMarkdown(`## kit: ${c.kit(kitName)}`));
90
+ for (const [cbName, cbRecipes] of byCookbook) {
91
+ this.log(` ${c.cookbook(cbName)}`);
92
+ const maxNameWidth = Math.max(...cbRecipes.map((r) => r.name.length));
93
+ const descWidth = termWidth - recipeIndent * indentSize - maxNameWidth - separator.length;
94
+ const recipeTable = keyValue(cbRecipes.map((r) => ({
95
+ key: r.name,
96
+ value: r.description ? truncateDescription(r.description, descWidth) : undefined,
97
+ })), { keyStyle: { color: "code" }, separator, nullDisplay: "" });
98
+ this.log(indent(recipeTable, recipeIndent));
99
+ this.log("");
100
+ }
101
+ }
102
+ }
103
+ }
104
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/recipe/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const version = "0.0.0";
2
+ export { BaseCommand, type BaseFlags, type BaseArgs, type KitTree, type CookbookTree, type RecipeEntry, } from "#base-command";
3
+ export { resolveKitSource, buildInstallCommand, type KitSourceType, type ResolvedKitSource, } from "#source-resolver";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,OAAO,EACN,WAAW,EACX,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,WAAW,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACN,gBAAgB,EAChB,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,iBAAiB,GACtB,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ // @hypercli/kit - Kit lifecycle management for HyperDev
2
+ export const version = "0.0.0";
3
+ // Base Command
4
+ export { BaseCommand, } from "#base-command";
5
+ // Source resolution
6
+ export { resolveKitSource, buildInstallCommand, } from "#source-resolver";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,eAAe;AACf,OAAO,EACN,WAAW,GAMX,MAAM,eAAe,CAAC;AAEvB,oBAAoB;AACpB,OAAO,EACN,gBAAgB,EAChB,mBAAmB,GAGnB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared flag definitions for kit browse commands
3
+ */
4
+ export declare const outputFlags: {
5
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
6
+ };
7
+ export declare const infoFlags: {
8
+ variables: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
+ source: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ steps: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ recipes: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ };
14
+ //# sourceMappingURL=flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.d.ts","sourceRoot":"","sources":["../../src/lib/flags.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,eAAO,MAAM,WAAW;;CAKvB,CAAC;AAEF,eAAO,MAAM,SAAS;;;;;;CAkBrB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Shared flag definitions for kit browse commands
3
+ */
4
+ import { Flags } from "@oclif/core";
5
+ export const outputFlags = {
6
+ json: Flags.boolean({
7
+ description: "Output as JSON",
8
+ default: false,
9
+ }),
10
+ };
11
+ export const infoFlags = {
12
+ ...outputFlags,
13
+ variables: Flags.boolean({
14
+ description: "Show variable details",
15
+ default: false,
16
+ }),
17
+ source: Flags.boolean({
18
+ description: "Show provenance info (path, URL, commit)",
19
+ default: false,
20
+ }),
21
+ steps: Flags.boolean({
22
+ description: "Show step list with tool types (recipe info only)",
23
+ default: false,
24
+ }),
25
+ recipes: Flags.boolean({
26
+ description: "Expand recipes with descriptions",
27
+ default: false,
28
+ }),
29
+ };
30
+ //# sourceMappingURL=flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flags.js","sourceRoot":"","sources":["../../src/lib/flags.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;QACnB,WAAW,EAAE,gBAAgB;QAC7B,OAAO,EAAE,KAAK;KACd,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;IACxB,GAAG,WAAW;IACd,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;QACxB,WAAW,EAAE,uBAAuB;QACpC,OAAO,EAAE,KAAK;KACd,CAAC;IACF,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;QACrB,WAAW,EAAE,0CAA0C;QACvD,OAAO,EAAE,KAAK;KACd,CAAC;IACF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QACpB,WAAW,EAAE,mDAAmD;QAChE,OAAO,EAAE,KAAK;KACd,CAAC;IACF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;QACtB,WAAW,EAAE,kCAAkC;QAC/C,OAAO,EAAE,KAAK;KACd,CAAC;CACF,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Kit Manifest Management
3
+ *
4
+ * Tracks installed kits in .hyper/kits/manifest.json with version/commit information
5
+ */
6
+ import type { KitSourceType } from "#source-resolver";
7
+ /**
8
+ * Individual kit entry in the manifest
9
+ *
10
+ * @example
11
+ * ```json
12
+ * {
13
+ * "name": "nextjs",
14
+ * "source": "kit/nextjs#main",
15
+ * "type": "github",
16
+ * "installedAt": "2026-02-13T14:30:00.000Z",
17
+ * "branch": "main",
18
+ * "version": "1.2.0"
19
+ * }
20
+ * ```
21
+ */
22
+ export interface KitManifestEntry {
23
+ /** Kit name (directory name in .hyper/kits/) */
24
+ name: string;
25
+ /** Original source string provided by user */
26
+ source: string;
27
+ /** Source type - determines installation method */
28
+ type: KitSourceType;
29
+ /** Installation timestamp in ISO 8601 format */
30
+ installedAt: string;
31
+ /** Git commit hash (40-char SHA-1, for git-based sources) */
32
+ commit?: string;
33
+ /** Semantic version from package.json or npm/JSR */
34
+ version?: string;
35
+ /** Git branch name (for git-based sources installed from branch) */
36
+ branch?: string;
37
+ /** Git tag name (for git-based sources installed from tag) */
38
+ tag?: string;
39
+ }
40
+ /**
41
+ * Root manifest structure
42
+ *
43
+ * @example
44
+ * ```json
45
+ * {
46
+ * "version": "1.0.0",
47
+ * "kits": {
48
+ * "nextjs": { ... },
49
+ * "react": { ... }
50
+ * }
51
+ * }
52
+ * ```
53
+ */
54
+ export interface KitManifest {
55
+ /** Manifest schema version (semver) */
56
+ version: string;
57
+ /** Map of kit name to manifest entry */
58
+ kits: Record<string, KitManifestEntry>;
59
+ }
60
+ /**
61
+ * Get the path to the manifest file
62
+ */
63
+ export declare function getManifestPath(projectRoot: string): string;
64
+ /**
65
+ * Load the manifest file, or create a new one if it doesn't exist
66
+ */
67
+ export declare function loadManifest(projectRoot: string): KitManifest;
68
+ /**
69
+ * Save the manifest file
70
+ */
71
+ export declare function saveManifest(projectRoot: string, manifest: KitManifest): void;
72
+ /**
73
+ * Add or update a kit in the manifest
74
+ */
75
+ export declare function addKitToManifest(projectRoot: string, entry: KitManifestEntry): void;
76
+ /**
77
+ * Remove a kit from the manifest
78
+ */
79
+ export declare function removeKitFromManifest(projectRoot: string, kitName: string): void;
80
+ /**
81
+ * Check if a kit is already installed
82
+ */
83
+ export declare function isKitInstalled(projectRoot: string, kitName: string): boolean;
84
+ /**
85
+ * Get a kit entry from the manifest
86
+ */
87
+ export declare function getKitFromManifest(projectRoot: string, kitName: string): KitManifestEntry | undefined;
88
+ /**
89
+ * List all installed kits
90
+ */
91
+ export declare function listInstalledKits(projectRoot: string): KitManifestEntry[];
92
+ /**
93
+ * Extract version/commit information from giget result
94
+ * Giget doesn't provide this directly, so we'll need to get it from the downloaded files
95
+ */
96
+ export declare function extractGitInfo(_kitDir: string): Promise<{
97
+ commit?: string;
98
+ branch?: string;
99
+ tag?: string;
100
+ }>;
101
+ /**
102
+ * Extract version from package.json if it exists
103
+ */
104
+ export declare function extractPackageVersion(kitDir: string): string | undefined;
105
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,gBAAgB;IAChC,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IAEb,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IAEf,mDAAmD;IACnD,IAAI,EAAE,aAAa,CAAC;IAEpB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IAEpB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,8DAA8D;IAC9D,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,WAAW;IAC3B,uCAAuC;IACvC,OAAO,EAAE,MAAM,CAAC;IAEhB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACvC;AAID;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAqB7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,CAW7E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAInF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAIhF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAG5E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACb,gBAAgB,GAAG,SAAS,CAG9B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,EAAE,CAGzE;AAED;;;GAGG;AACH,wBAAsB,cAAc,CACnC,OAAO,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAI7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAcxE"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Kit Manifest Management
3
+ *
4
+ * Tracks installed kits in .hyper/kits/manifest.json with version/commit information
5
+ */
6
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
7
+ import { dirname, join } from "node:path";
8
+ const MANIFEST_VERSION = "1.0.0";
9
+ /**
10
+ * Get the path to the manifest file
11
+ */
12
+ export function getManifestPath(projectRoot) {
13
+ return join(projectRoot, ".hyper", "kits", "manifest.json");
14
+ }
15
+ /**
16
+ * Load the manifest file, or create a new one if it doesn't exist
17
+ */
18
+ export function loadManifest(projectRoot) {
19
+ const manifestPath = getManifestPath(projectRoot);
20
+ if (!existsSync(manifestPath)) {
21
+ return {
22
+ version: MANIFEST_VERSION,
23
+ kits: {},
24
+ };
25
+ }
26
+ try {
27
+ const content = readFileSync(manifestPath, "utf-8");
28
+ return JSON.parse(content);
29
+ }
30
+ catch (error) {
31
+ // If manifest is corrupted, return empty manifest
32
+ console.warn("Warning: Failed to read manifest.json, creating new one");
33
+ return {
34
+ version: MANIFEST_VERSION,
35
+ kits: {},
36
+ };
37
+ }
38
+ }
39
+ /**
40
+ * Save the manifest file
41
+ */
42
+ export function saveManifest(projectRoot, manifest) {
43
+ const manifestPath = getManifestPath(projectRoot);
44
+ const manifestDir = dirname(manifestPath);
45
+ // Ensure .hyper/kits directory exists
46
+ if (!existsSync(manifestDir)) {
47
+ mkdirSync(manifestDir, { recursive: true });
48
+ }
49
+ // Write manifest with pretty formatting
50
+ writeFileSync(manifestPath, JSON.stringify(manifest, null, 2), "utf-8");
51
+ }
52
+ /**
53
+ * Add or update a kit in the manifest
54
+ */
55
+ export function addKitToManifest(projectRoot, entry) {
56
+ const manifest = loadManifest(projectRoot);
57
+ manifest.kits[entry.name] = entry;
58
+ saveManifest(projectRoot, manifest);
59
+ }
60
+ /**
61
+ * Remove a kit from the manifest
62
+ */
63
+ export function removeKitFromManifest(projectRoot, kitName) {
64
+ const manifest = loadManifest(projectRoot);
65
+ delete manifest.kits[kitName];
66
+ saveManifest(projectRoot, manifest);
67
+ }
68
+ /**
69
+ * Check if a kit is already installed
70
+ */
71
+ export function isKitInstalled(projectRoot, kitName) {
72
+ const manifest = loadManifest(projectRoot);
73
+ return kitName in manifest.kits;
74
+ }
75
+ /**
76
+ * Get a kit entry from the manifest
77
+ */
78
+ export function getKitFromManifest(projectRoot, kitName) {
79
+ const manifest = loadManifest(projectRoot);
80
+ return manifest.kits[kitName];
81
+ }
82
+ /**
83
+ * List all installed kits
84
+ */
85
+ export function listInstalledKits(projectRoot) {
86
+ const manifest = loadManifest(projectRoot);
87
+ return Object.values(manifest.kits);
88
+ }
89
+ /**
90
+ * Extract version/commit information from giget result
91
+ * Giget doesn't provide this directly, so we'll need to get it from the downloaded files
92
+ */
93
+ export async function extractGitInfo(_kitDir) {
94
+ // For now, we can't reliably get commit info without .git directory
95
+ // Future enhancement: giget could be modified to save this info
96
+ return {};
97
+ }
98
+ /**
99
+ * Extract version from package.json if it exists
100
+ */
101
+ export function extractPackageVersion(kitDir) {
102
+ const packageJsonPath = join(kitDir, "package.json");
103
+ if (!existsSync(packageJsonPath)) {
104
+ return undefined;
105
+ }
106
+ try {
107
+ const content = readFileSync(packageJsonPath, "utf-8");
108
+ const pkg = JSON.parse(content);
109
+ return pkg.version;
110
+ }
111
+ catch {
112
+ return undefined;
113
+ }
114
+ }
115
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Kit Source Resolution
3
+ *
4
+ * Resolves kit sources from various formats (npm, GitHub, local paths, etc.)
5
+ * into a standardized format that package managers can understand.
6
+ */
7
+ export type KitSourceType = "npm" | "jsr" | "github" | "gitlab" | "bitbucket" | "local" | "git" | "url";
8
+ export interface ResolvedKitSource {
9
+ /** The type of kit source, determines installation method */
10
+ type: KitSourceType;
11
+ /** The resolved source string to pass to package manager */
12
+ source: string;
13
+ /** The original input string */
14
+ original: string;
15
+ /** Optional registry identifier */
16
+ registry?: string;
17
+ }
18
+ /**
19
+ * Resolve a kit source string into a typed, normalized format.
20
+ *
21
+ * Resolution order:
22
+ * 1. Explicit prefixes (file:, github:, jsr:, npm:, git+, etc.)
23
+ * 2. JSR-specific patterns (@jsr/)
24
+ * 3. Git URLs (by protocol or .git extension)
25
+ * 4. HTTP(S) URLs
26
+ * 5. Windows paths (drive letters, UNC paths, backslashes)
27
+ * 6. Unix paths (/, ./, ../, ~/)
28
+ * 7. GitHub/GitLab/Bitbucket shorthand (user/repo)
29
+ * 8. NPM packages (default)
30
+ *
31
+ * @param input - The kit source string from user input
32
+ * @returns Resolved kit source with type and normalized source
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * resolveKitSource('@kit/nextjs')
37
+ * // → { type: 'npm', source: '@kit/nextjs', registry: 'npm' }
38
+ *
39
+ * resolveKitSource('svallory/hypergen-kit-nextjs')
40
+ * // → { type: 'github', source: 'github:svallory/hypergen-kit-nextjs' }
41
+ *
42
+ * resolveKitSource('./my-local-kit')
43
+ * // → { type: 'local', source: './my-local-kit' }
44
+ *
45
+ * resolveKitSource('C:\\Projects\\my-kit')
46
+ * // → { type: 'local', source: 'C:\\Projects\\my-kit' }
47
+ * ```
48
+ */
49
+ export declare function resolveKitSource(input: string): ResolvedKitSource;
50
+ /**
51
+ * Build package manager install command for a resolved kit source.
52
+ *
53
+ * @param resolved - The resolved kit source
54
+ * @param pm - Package manager to use
55
+ * @param flags - Installation flags (dev, global)
56
+ * @returns Command string to execute
57
+ */
58
+ export declare function buildInstallCommand(resolved: ResolvedKitSource, pm: "bun" | "pnpm" | "yarn" | "npm", flags: {
59
+ dev?: boolean;
60
+ global?: boolean;
61
+ }): string;
62
+ //# sourceMappingURL=source-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-resolver.d.ts","sourceRoot":"","sources":["../src/source-resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,aAAa,GACtB,KAAK,GACL,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,OAAO,GACP,KAAK,GACL,KAAK,CAAC;AAET,MAAM,WAAW,iBAAiB;IACjC,6DAA6D;IAC7D,IAAI,EAAE,aAAa,CAAC;IACpB,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAuFjE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,iBAAiB,EAC3B,EAAE,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,EACnC,KAAK,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACxC,MAAM,CAcR"}