@g3nomaly/core 0.1.6 → 0.2.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.
Files changed (93) hide show
  1. package/dist/cli/commands/add.d.ts +17 -0
  2. package/dist/cli/commands/add.d.ts.map +1 -0
  3. package/dist/cli/commands/add.js +76 -0
  4. package/dist/cli/commands/add.js.map +1 -0
  5. package/dist/cli/commands/ls.d.ts +5 -0
  6. package/dist/cli/commands/ls.d.ts.map +1 -0
  7. package/dist/cli/commands/ls.js +22 -0
  8. package/dist/cli/commands/ls.js.map +1 -0
  9. package/dist/cli/commands/remove.d.ts +13 -0
  10. package/dist/cli/commands/remove.d.ts.map +1 -0
  11. package/dist/cli/commands/remove.js +109 -0
  12. package/dist/cli/commands/remove.js.map +1 -0
  13. package/dist/cli/commands/update.d.ts +10 -0
  14. package/dist/cli/commands/update.d.ts.map +1 -0
  15. package/dist/cli/commands/update.js +92 -0
  16. package/dist/cli/commands/update.js.map +1 -0
  17. package/dist/cli/dialogue.d.ts +74 -0
  18. package/dist/cli/dialogue.d.ts.map +1 -0
  19. package/dist/cli/dialogue.js +117 -0
  20. package/dist/cli/dialogue.js.map +1 -0
  21. package/dist/cli/index.d.ts +10 -0
  22. package/dist/cli/index.d.ts.map +1 -0
  23. package/dist/cli/index.js +10 -0
  24. package/dist/cli/index.js.map +1 -0
  25. package/dist/cli/theme.d.ts +23 -0
  26. package/dist/cli/theme.d.ts.map +1 -0
  27. package/dist/cli/theme.js +25 -0
  28. package/dist/cli/theme.js.map +1 -0
  29. package/dist/cli/types.d.ts +45 -0
  30. package/dist/cli/types.d.ts.map +1 -0
  31. package/dist/cli/types.js +2 -0
  32. package/dist/cli/types.js.map +1 -0
  33. package/dist/config/config.d.ts +7 -10
  34. package/dist/config/config.d.ts.map +1 -1
  35. package/dist/config/config.js +17 -27
  36. package/dist/config/config.js.map +1 -1
  37. package/dist/config/index.d.ts +3 -3
  38. package/dist/config/index.d.ts.map +1 -1
  39. package/dist/config/index.js +2 -2
  40. package/dist/config/index.js.map +1 -1
  41. package/dist/config/types.d.ts +35 -36
  42. package/dist/config/types.d.ts.map +1 -1
  43. package/dist/config/types.js +14 -17
  44. package/dist/config/types.js.map +1 -1
  45. package/dist/installer/classify.d.ts +7 -0
  46. package/dist/installer/classify.d.ts.map +1 -0
  47. package/dist/installer/classify.js +47 -0
  48. package/dist/installer/classify.js.map +1 -0
  49. package/dist/installer/index.d.ts +6 -0
  50. package/dist/installer/index.d.ts.map +1 -0
  51. package/dist/installer/index.js +7 -0
  52. package/dist/installer/index.js.map +1 -0
  53. package/dist/installer/install.d.ts +13 -0
  54. package/dist/installer/install.d.ts.map +1 -0
  55. package/dist/installer/install.js +61 -0
  56. package/dist/installer/install.js.map +1 -0
  57. package/dist/installer/io.d.ts +4 -0
  58. package/dist/installer/io.d.ts.map +1 -0
  59. package/dist/installer/io.js +18 -0
  60. package/dist/installer/io.js.map +1 -0
  61. package/dist/installer/remove.d.ts +14 -0
  62. package/dist/installer/remove.d.ts.map +1 -0
  63. package/dist/installer/remove.js +37 -0
  64. package/dist/installer/remove.js.map +1 -0
  65. package/dist/installer/types.d.ts +80 -0
  66. package/dist/installer/types.d.ts.map +1 -0
  67. package/dist/installer/types.js +21 -0
  68. package/dist/installer/types.js.map +1 -0
  69. package/dist/registry/registry.selectors.d.ts +11 -0
  70. package/dist/registry/registry.selectors.d.ts.map +1 -1
  71. package/dist/registry/registry.selectors.js +24 -0
  72. package/dist/registry/registry.selectors.js.map +1 -1
  73. package/dist/registry/types.d.ts +2 -0
  74. package/dist/registry/types.d.ts.map +1 -1
  75. package/dist/registry/types.js +5 -0
  76. package/dist/registry/types.js.map +1 -1
  77. package/dist/utils/index.d.ts +3 -0
  78. package/dist/utils/index.d.ts.map +1 -1
  79. package/dist/utils/index.js +2 -0
  80. package/dist/utils/index.js.map +1 -1
  81. package/dist/utils/merge.d.ts +6 -0
  82. package/dist/utils/merge.d.ts.map +1 -0
  83. package/dist/utils/merge.js +21 -0
  84. package/dist/utils/merge.js.map +1 -0
  85. package/dist/utils/packageMeta.d.ts +12 -0
  86. package/dist/utils/packageMeta.d.ts.map +1 -0
  87. package/dist/utils/packageMeta.js +20 -0
  88. package/dist/utils/packageMeta.js.map +1 -0
  89. package/dist/utils/prompt.d.ts +3 -0
  90. package/dist/utils/prompt.d.ts.map +1 -0
  91. package/dist/utils/prompt.js +8 -0
  92. package/dist/utils/prompt.js.map +1 -0
  93. package/package.json +12 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACpE,YAAY,EACV,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,UAAU,EAC/D,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,GACnD,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,10 @@
1
+ // packages/core/src/cli/index.ts
2
+ export * from "./types";
3
+ export { ConflictDecision, FileState } from "../installer/types";
4
+ export { StepKind, runDialogue, runDialogueValue } from "./dialogue";
5
+ export { addEntries } from "./commands/add";
6
+ export { updateEntries } from "./commands/update";
7
+ export { removeEntries } from "./commands/remove";
8
+ export { lsEntries } from "./commands/ls";
9
+ export { c, sym, lineSuccess, lineWarn, lineInfo, lineError } from "./theme";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAKpE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,23 @@
1
+ export declare const sym: {
2
+ success: string;
3
+ warn: string;
4
+ info: string;
5
+ error: string;
6
+ search: string;
7
+ };
8
+ export declare const c: {
9
+ bold: import("chalk").ChalkInstance;
10
+ dim: import("chalk").ChalkInstance;
11
+ key: import("chalk").ChalkInstance;
12
+ file: import("chalk").ChalkInstance;
13
+ flag: import("chalk").ChalkInstance;
14
+ cmd: import("chalk").ChalkInstance;
15
+ dir: import("chalk").ChalkInstance;
16
+ target: import("chalk").ChalkInstance;
17
+ header: import("chalk").ChalkInstance;
18
+ };
19
+ export declare function lineSuccess(msg: string): string;
20
+ export declare function lineWarn(msg: string): string;
21
+ export declare function lineInfo(msg: string): string;
22
+ export declare function lineError(msg: string): string;
23
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/cli/theme.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,GAAG;IACd,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,MAAM;CACP,CAAC;AAEF,eAAO,MAAM,CAAC;IACZ,IAAI;IACJ,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;IACJ,GAAG;IACH,GAAG;IACH,MAAM;IACN,MAAM;CACP,CAAC;AAEF,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAqC;AACrF,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAmD;AAChG,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAgD;AAC7F,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAgD"}
@@ -0,0 +1,25 @@
1
+ // packages/core/src/cli/theme.ts
2
+ import chalk from "chalk";
3
+ export const sym = {
4
+ success: chalk.green("✓"),
5
+ warn: chalk.yellow("⚠"),
6
+ info: chalk.dim("i"),
7
+ error: chalk.red("✗"),
8
+ search: chalk.cyan("🔍"),
9
+ };
10
+ export const c = {
11
+ bold: chalk.bold,
12
+ dim: chalk.dim,
13
+ key: chalk.cyan,
14
+ file: chalk.magenta,
15
+ flag: chalk.yellow.bold,
16
+ cmd: chalk.white.bold,
17
+ dir: chalk.blue,
18
+ target: chalk.green,
19
+ header: chalk.bold.underline,
20
+ };
21
+ export function lineSuccess(msg) { return `${sym.success} ${msg}`; }
22
+ export function lineWarn(msg) { return `${sym.warn} ${chalk.yellow(msg)}`; }
23
+ export function lineInfo(msg) { return `${sym.info} ${chalk.dim(msg)}`; }
24
+ export function lineError(msg) { return `${sym.error} ${chalk.red(msg)}`; }
25
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/cli/theme.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;IACzB,IAAI,EAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IAC1B,IAAI,EAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACvB,KAAK,EAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;IACvB,MAAM,EAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,CAAC,GAAG;IACf,IAAI,EAAI,KAAK,CAAC,IAAI;IAClB,GAAG,EAAK,KAAK,CAAC,GAAG;IACjB,GAAG,EAAK,KAAK,CAAC,IAAI;IAClB,IAAI,EAAI,KAAK,CAAC,OAAO;IACrB,IAAI,EAAI,KAAK,CAAC,MAAM,CAAC,IAAI;IACzB,GAAG,EAAK,KAAK,CAAC,KAAK,CAAC,IAAI;IACxB,GAAG,EAAK,KAAK,CAAC,IAAI;IAClB,MAAM,EAAE,KAAK,CAAC,KAAK;IACnB,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS;CAC7B,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,GAAW,IAAY,OAAO,GAAG,GAAG,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;AACrF,MAAM,UAAU,QAAQ,CAAC,GAAW,IAAe,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAChG,MAAM,UAAU,QAAQ,CAAC,GAAW,IAAe,OAAO,GAAG,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7F,MAAM,UAAU,SAAS,CAAC,GAAW,IAAc,OAAO,GAAG,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { BaseRegistryEntry } from "../registry/types";
2
+ import type { RegistryStore } from "../registry/registry.store";
3
+ import type { FileSource } from "../installer/types";
4
+ import type { Dialogue, DialogueAnswers, StepChoice } from "./dialogue";
5
+ /** Options the install-shaped commands (add, update, remove) read. */
6
+ export interface InstallOptions {
7
+ force?: boolean;
8
+ dryRun?: boolean;
9
+ /** Preset dialogue answers by step id; skips the terminal prompt. */
10
+ answers?: DialogueAnswers;
11
+ }
12
+ export interface LSOptions {
13
+ json?: boolean;
14
+ }
15
+ /** One install destination: where files land and the manifest tracking them. */
16
+ export interface InstallTarget {
17
+ label: string;
18
+ installDir: string;
19
+ store: RegistryStore<BaseRegistryEntry>;
20
+ }
21
+ /** Where an entry's file contents come from — disk copy, remote fetch, generated. */
22
+ export type EntrySource = (entry: BaseRegistryEntry) => FileSource | Promise<FileSource>;
23
+ /** Input the install dialogues resolve against: picker choices and `{placeholder}` values. */
24
+ export interface InstallInput {
25
+ keyChoices?: StepChoice<string>[];
26
+ key?: string;
27
+ target?: string;
28
+ dependents?: string;
29
+ missing?: string;
30
+ unknown?: string;
31
+ }
32
+ export interface AddDialogues {
33
+ onNoValue?: Dialogue<InstallInput>;
34
+ onCollision?: Dialogue<InstallInput>;
35
+ }
36
+ export interface UpdateDialogues {
37
+ onCollision?: Dialogue<InstallInput>;
38
+ }
39
+ export interface RemoveDialogues {
40
+ onNoValue?: Dialogue<InstallInput>;
41
+ onCascade?: Dialogue<InstallInput>;
42
+ onCollision?: Dialogue<InstallInput>;
43
+ onIncomplete?: Dialogue<InstallInput>;
44
+ }
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExE,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAG,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,qEAAqE;IACrE,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,gFAAgF;AAChF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAO,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAO,aAAa,CAAC,iBAAiB,CAAC,CAAC;CAC9C;AAED,qFAAqF;AACrF,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzF,8FAA8F;AAC9F,MAAM,WAAW,YAAY;IAC3B,UAAU,CAAC,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IAClC,GAAG,CAAC,EAAS,MAAM,CAAC;IACpB,MAAM,CAAC,EAAM,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAK,MAAM,CAAC;IACpB,OAAO,CAAC,EAAK,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,SAAS,CAAC,EAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;IACrC,YAAY,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,CAAC;CACvC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":""}
@@ -1,4 +1,4 @@
1
- import { type G3nConfig, type CoreConfig, type G3nuiConfig, type G3nerateConfig, type SkillsConfig } from "./types";
1
+ import { type G3nConfig, type G3nConfigFile, type G3nuiConfig, type G3nerateConfig, type SkillsConfig } from "./types";
2
2
  export declare function getConfigPath(projectRoot: string): string;
3
3
  /**
4
4
  * Directory that owns the project's `.g3n.config.json`: the nearest ancestor
@@ -8,8 +8,8 @@ export declare function getConfigPath(projectRoot: string): string;
8
8
  */
9
9
  export declare function resolveProjectRoot(fromDir?: string): string | null;
10
10
  /**
11
- * Loads `.g3n.config.json` from the project root.
12
- * Returns a fully-defaulted config if the file doesn't exist yet.
11
+ * Loads `.g3n.config.json` from the project root as a fully-defaulted view:
12
+ * sections missing on disk read as their defaults.
13
13
  */
14
14
  export declare function loadConfig(projectRoot: string): Promise<G3nConfig>;
15
15
  /** Every key optional at every depth, so a caller can name one setting alone. */
@@ -17,14 +17,11 @@ type DeepPartial<T> = T extends readonly unknown[] ? T : T extends object ? {
17
17
  [K in keyof T]?: DeepPartial<T[K]>;
18
18
  } : T;
19
19
  /**
20
- * Deep-merges updates into the existing config and writes back to disk.
21
- * Pass any subset of the config — only the keys you provide are updated.
22
- *
23
- * @example
24
- * await saveConfig(cwd, { g3nui: { settings: { componentsDir: "src/ui" } } })
20
+ * Deep-merges updates into the existing config file and writes back to disk.
21
+ * Only sections already on disk or named in `updates` are written — a
22
+ * package's init never materializes another package's section.
25
23
  */
26
- export declare function saveConfig(projectRoot: string, updates: DeepPartial<G3nConfig>): Promise<G3nConfig>;
27
- export declare function loadCoreConfig(projectRoot: string): Promise<CoreConfig>;
24
+ export declare function saveConfig(projectRoot: string, updates: DeepPartial<G3nConfigFile>): Promise<G3nConfig>;
28
25
  export declare function loadG3nuiConfig(projectRoot: string): Promise<G3nuiConfig>;
29
26
  export declare function loadG3nerateConfig(projectRoot: string): Promise<G3nerateConfig>;
30
27
  export declare function loadSkillsConfig(projectRoot: string): Promise<SkillsConfig>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,SAAS,CAAC;AAYjB,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CASjF;AAMD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAWxE;AAMD,iFAAiF;AACjF,KAAK,WAAW,CAAC,CAAC,IAChB,CAAC,SAAS,SAAS,OAAO,EAAE,GAAG,CAAC,GAC9B,CAAC,SAAS,MAAM,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACzD,CAAC,CAAC;AAEN;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,CAAC,SAAS,CAAC,GAC9B,OAAO,CAAC,SAAS,CAAC,CAapB;AAMD,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAE7E;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAE/E;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAErF;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAEjF;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAExE"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,YAAY,EAClB,MAAM,SAAS,CAAC;AAYjB,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,MAAsB,GAAG,MAAM,GAAG,IAAI,CASjF;AAYD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAExE;AAMD,iFAAiF;AACjF,KAAK,WAAW,CAAC,CAAC,IAChB,CAAC,SAAS,SAAS,OAAO,EAAE,GAAG,CAAC,GAC9B,CAAC,SAAS,MAAM,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAAE,GACzD,CAAC,CAAC;AAEN;;;;GAIG;AACH,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,CAAC,aAAa,CAAC,GAClC,OAAO,CAAC,SAAS,CAAC,CAOpB;AAMD,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAE/E;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAErF;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAEjF;AAED,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAExE"}
@@ -1,7 +1,8 @@
1
1
  // packages/core/src/config/config.ts
2
2
  import { existsSync } from "node:fs";
3
3
  import { dirname, join } from "node:path";
4
- import { G3nConfigSchema, } from "./types";
4
+ import { deepMerge } from "../utils/merge";
5
+ import { G3nConfigFileSchema, G3nConfigSchema, } from "./types";
5
6
  if ("window" in globalThis) {
6
7
  throw new Error("@g3nomaly/core config utilities are CLI-only");
7
8
  }
@@ -34,44 +35,33 @@ export function resolveProjectRoot(fromDir = process.cwd()) {
34
35
  // ---------------------------------------------------------------------------
35
36
  // Read
36
37
  // ---------------------------------------------------------------------------
38
+ async function readConfigFile(projectRoot) {
39
+ const file = Bun.file(getConfigPath(projectRoot));
40
+ if (!(await file.exists()))
41
+ return {};
42
+ return G3nConfigFileSchema.parse(await file.json());
43
+ }
37
44
  /**
38
- * Loads `.g3n.config.json` from the project root.
39
- * Returns a fully-defaulted config if the file doesn't exist yet.
45
+ * Loads `.g3n.config.json` from the project root as a fully-defaulted view:
46
+ * sections missing on disk read as their defaults.
40
47
  */
41
48
  export async function loadConfig(projectRoot) {
42
- const configPath = getConfigPath(projectRoot);
43
- const file = Bun.file(configPath);
44
- const exists = await file.exists();
45
- if (!exists) {
46
- return G3nConfigSchema.parse({});
47
- }
48
- const raw = await file.json();
49
- return G3nConfigSchema.parse(raw);
49
+ return G3nConfigSchema.parse(await readConfigFile(projectRoot));
50
50
  }
51
51
  /**
52
- * Deep-merges updates into the existing config and writes back to disk.
53
- * Pass any subset of the config — only the keys you provide are updated.
54
- *
55
- * @example
56
- * await saveConfig(cwd, { g3nui: { settings: { componentsDir: "src/ui" } } })
52
+ * Deep-merges updates into the existing config file and writes back to disk.
53
+ * Only sections already on disk or named in `updates` are written — a
54
+ * package's init never materializes another package's section.
57
55
  */
58
56
  export async function saveConfig(projectRoot, updates) {
59
- const existing = await loadConfig(projectRoot);
60
- const merged = G3nConfigSchema.parse({
61
- core: { ...existing.core, ...updates.core },
62
- g3nui: { ...existing.g3nui, ...updates.g3nui, settings: { ...existing.g3nui.settings, ...updates.g3nui?.settings } },
63
- g3nerate: { ...existing.g3nerate, ...updates.g3nerate, settings: { ...existing.g3nerate.settings, ...updates.g3nerate?.settings } },
64
- skills: { ...existing.skills, ...updates.skills, settings: { ...existing.skills.settings, ...updates.skills?.settings } },
65
- });
57
+ const existing = await readConfigFile(projectRoot);
58
+ const merged = G3nConfigFileSchema.parse(deepMerge(existing, updates));
66
59
  await Bun.write(getConfigPath(projectRoot), JSON.stringify(merged, null, 2));
67
- return merged;
60
+ return G3nConfigSchema.parse(merged);
68
61
  }
69
62
  // ---------------------------------------------------------------------------
70
63
  // Section accessors
71
64
  // ---------------------------------------------------------------------------
72
- export async function loadCoreConfig(projectRoot) {
73
- return (await loadConfig(projectRoot)).core;
74
- }
75
65
  export async function loadG3nuiConfig(projectRoot) {
76
66
  return (await loadConfig(projectRoot)).g3nui;
77
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,eAAe,GAMhB,MAAM,SAAS,CAAC;AAEjB,IAAI,QAAQ,IAAI,UAAU,EAAE,CAAC;IAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;AAClE,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAEvC,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC/C,OAAO,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAO,GAAW,OAAO,CAAC,GAAG,EAAE;IAChE,IAAI,GAAG,GAAG,OAAO,CAAC;IAClB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACnD,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAmB;IAClD,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAElC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAYD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,WAAmB,EACnB,OAA+B;IAE/B,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC;QACnC,IAAI,EAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAM,GAAG,OAAO,CAAC,IAAI,EAAE;QACnD,KAAK,EAAK,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAK,GAAG,OAAO,CAAC,KAAK,EAAK,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAK,GAAG,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;QAChI,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;QACnI,MAAM,EAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAI,GAAG,OAAO,CAAC,MAAM,EAAI,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAI,GAAG,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;KAClI,CAAC,CAAC;IAEH,MAAM,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,oBAAoB;AACpB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,WAAmB;IACtD,OAAO,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,WAAmB;IACvD,OAAO,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,WAAmB;IAC1D,OAAO,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACxD,OAAO,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC;AAChD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,WAAmB;IACpD,OAAO,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export type { CoreConfig, PackageMeta, G3nuiSettings, G3nuiConfig, G3nerateSettings, G3nerateConfig, SkillTarget, SkillsInstallDirs, SkillsSettings, SkillsConfig, G3nConfig, } from "./types";
2
- export { CoreConfigSchema, PackageMetaSchema, G3nuiSettingsSchema, G3nuiConfigSchema, G3nerateSettingsSchema, G3nerateConfigSchema, SkillTargetSchema, SkillsInstallDirsSchema, SkillsSettingsSchema, SkillsConfigSchema, G3nConfigSchema, } from "./types";
3
- export { getConfigPath, resolveProjectRoot, loadConfig, saveConfig, loadCoreConfig, loadG3nuiConfig, loadG3nerateConfig, loadSkillsConfig, configExists, } from "./config";
1
+ export type { G3nuiSettings, G3nuiConfig, G3nerateSettings, G3nerateConfig, SkillTarget, SkillsInstallDirs, SkillsSettings, SkillsConfig, G3nConfigFile, G3nConfig, } from "./types";
2
+ export { G3nuiSettingsSchema, G3nuiConfigSchema, G3nerateSettingsSchema, G3nerateConfigSchema, SkillTargetSchema, SkillsInstallDirsSchema, SkillsSettingsSchema, SkillsConfigSchema, G3nConfigFileSchema, G3nConfigSchema, } from "./types";
3
+ export { getConfigPath, resolveProjectRoot, loadConfig, saveConfig, loadG3nuiConfig, loadG3nerateConfig, loadSkillsConfig, configExists, } from "./config";
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,UAAU,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,SAAS,GACV,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,GACb,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,GACV,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,GACb,MAAM,UAAU,CAAC"}
@@ -1,3 +1,3 @@
1
- export { CoreConfigSchema, PackageMetaSchema, G3nuiSettingsSchema, G3nuiConfigSchema, G3nerateSettingsSchema, G3nerateConfigSchema, SkillTargetSchema, SkillsInstallDirsSchema, SkillsSettingsSchema, SkillsConfigSchema, G3nConfigSchema, } from "./types";
2
- export { getConfigPath, resolveProjectRoot, loadConfig, saveConfig, loadCoreConfig, loadG3nuiConfig, loadG3nerateConfig, loadSkillsConfig, configExists, } from "./config";
1
+ export { G3nuiSettingsSchema, G3nuiConfigSchema, G3nerateSettingsSchema, G3nerateConfigSchema, SkillTargetSchema, SkillsInstallDirsSchema, SkillsSettingsSchema, SkillsConfigSchema, G3nConfigFileSchema, G3nConfigSchema, } from "./types";
2
+ export { getConfigPath, resolveProjectRoot, loadConfig, saveConfig, loadG3nuiConfig, loadG3nerateConfig, loadSkillsConfig, configExists, } from "./config";
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,GACb,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GAChB,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,GACb,MAAM,UAAU,CAAC"}
@@ -1,15 +1,4 @@
1
1
  import { z } from "zod";
2
- export declare const CoreConfigSchema: z.ZodObject<{
3
- version: z.ZodDefault<z.ZodString>;
4
- description: z.ZodDefault<z.ZodString>;
5
- license: z.ZodDefault<z.ZodString>;
6
- }, z.core.$strip>;
7
- /** Shared package metadata present on every non-core package section */
8
- export declare const PackageMetaSchema: z.ZodObject<{
9
- version: z.ZodDefault<z.ZodString>;
10
- description: z.ZodDefault<z.ZodString>;
11
- license: z.ZodDefault<z.ZodString>;
12
- }, z.core.$strip>;
13
2
  export declare const G3nuiSettingsSchema: z.ZodObject<{
14
3
  componentsDir: z.ZodDefault<z.ZodString>;
15
4
  includeDebugFiles: z.ZodDefault<z.ZodBoolean>;
@@ -21,9 +10,6 @@ export declare const G3nuiSettingsSchema: z.ZodObject<{
21
10
  registeredPackages: z.ZodDefault<z.ZodArray<z.ZodString>>;
22
11
  }, z.core.$strip>;
23
12
  export declare const G3nuiConfigSchema: z.ZodObject<{
24
- version: z.ZodDefault<z.ZodString>;
25
- description: z.ZodDefault<z.ZodString>;
26
- license: z.ZodDefault<z.ZodString>;
27
13
  settings: z.ZodDefault<z.ZodObject<{
28
14
  componentsDir: z.ZodDefault<z.ZodString>;
29
15
  includeDebugFiles: z.ZodDefault<z.ZodBoolean>;
@@ -39,9 +25,6 @@ export declare const G3nerateSettingsSchema: z.ZodObject<{
39
25
  outputDir: z.ZodDefault<z.ZodString>;
40
26
  }, z.core.$strip>;
41
27
  export declare const G3nerateConfigSchema: z.ZodObject<{
42
- version: z.ZodDefault<z.ZodString>;
43
- description: z.ZodDefault<z.ZodString>;
44
- license: z.ZodDefault<z.ZodString>;
45
28
  settings: z.ZodDefault<z.ZodObject<{
46
29
  outputDir: z.ZodDefault<z.ZodString>;
47
30
  }, z.core.$strip>>;
@@ -66,9 +49,6 @@ export declare const SkillsSettingsSchema: z.ZodObject<{
66
49
  }, z.core.$strip>>;
67
50
  }, z.core.$strip>;
68
51
  export declare const SkillsConfigSchema: z.ZodObject<{
69
- version: z.ZodDefault<z.ZodString>;
70
- description: z.ZodDefault<z.ZodString>;
71
- license: z.ZodDefault<z.ZodString>;
72
52
  settings: z.ZodDefault<z.ZodObject<{
73
53
  filetreeRoot: z.ZodDefault<z.ZodString>;
74
54
  targets: z.ZodDefault<z.ZodArray<z.ZodEnum<{
@@ -81,16 +61,42 @@ export declare const SkillsConfigSchema: z.ZodObject<{
81
61
  }, z.core.$strip>>;
82
62
  }, z.core.$strip>>;
83
63
  }, z.core.$strip>;
84
- export declare const G3nConfigSchema: z.ZodObject<{
85
- core: z.ZodDefault<z.ZodObject<{
86
- version: z.ZodDefault<z.ZodString>;
87
- description: z.ZodDefault<z.ZodString>;
88
- license: z.ZodDefault<z.ZodString>;
64
+ /** What `.g3n.config.json` holds on disk: only the sections a package's init has written. */
65
+ export declare const G3nConfigFileSchema: z.ZodObject<{
66
+ g3nui: z.ZodOptional<z.ZodObject<{
67
+ settings: z.ZodDefault<z.ZodObject<{
68
+ componentsDir: z.ZodDefault<z.ZodString>;
69
+ includeDebugFiles: z.ZodDefault<z.ZodBoolean>;
70
+ includeMetaFiles: z.ZodDefault<z.ZodBoolean>;
71
+ manifestFormat: z.ZodDefault<z.ZodEnum<{
72
+ json: "json";
73
+ ts: "ts";
74
+ }>>;
75
+ registeredPackages: z.ZodDefault<z.ZodArray<z.ZodString>>;
76
+ }, z.core.$strip>>;
89
77
  }, z.core.$strip>>;
78
+ g3nerate: z.ZodOptional<z.ZodObject<{
79
+ settings: z.ZodDefault<z.ZodObject<{
80
+ outputDir: z.ZodDefault<z.ZodString>;
81
+ }, z.core.$strip>>;
82
+ }, z.core.$strip>>;
83
+ skills: z.ZodOptional<z.ZodObject<{
84
+ settings: z.ZodDefault<z.ZodObject<{
85
+ filetreeRoot: z.ZodDefault<z.ZodString>;
86
+ targets: z.ZodDefault<z.ZodArray<z.ZodEnum<{
87
+ claude: "claude";
88
+ codex: "codex";
89
+ }>>>;
90
+ installDirs: z.ZodDefault<z.ZodObject<{
91
+ claude: z.ZodDefault<z.ZodString>;
92
+ codex: z.ZodDefault<z.ZodString>;
93
+ }, z.core.$strip>>;
94
+ }, z.core.$strip>>;
95
+ }, z.core.$strip>>;
96
+ }, z.core.$strip>;
97
+ /** The fully-defaulted view every consumer reads through `loadConfig`. */
98
+ export declare const G3nConfigSchema: z.ZodObject<{
90
99
  g3nui: z.ZodDefault<z.ZodObject<{
91
- version: z.ZodDefault<z.ZodString>;
92
- description: z.ZodDefault<z.ZodString>;
93
- license: z.ZodDefault<z.ZodString>;
94
100
  settings: z.ZodDefault<z.ZodObject<{
95
101
  componentsDir: z.ZodDefault<z.ZodString>;
96
102
  includeDebugFiles: z.ZodDefault<z.ZodBoolean>;
@@ -103,17 +109,11 @@ export declare const G3nConfigSchema: z.ZodObject<{
103
109
  }, z.core.$strip>>;
104
110
  }, z.core.$strip>>;
105
111
  g3nerate: z.ZodDefault<z.ZodObject<{
106
- version: z.ZodDefault<z.ZodString>;
107
- description: z.ZodDefault<z.ZodString>;
108
- license: z.ZodDefault<z.ZodString>;
109
112
  settings: z.ZodDefault<z.ZodObject<{
110
113
  outputDir: z.ZodDefault<z.ZodString>;
111
114
  }, z.core.$strip>>;
112
115
  }, z.core.$strip>>;
113
116
  skills: z.ZodDefault<z.ZodObject<{
114
- version: z.ZodDefault<z.ZodString>;
115
- description: z.ZodDefault<z.ZodString>;
116
- license: z.ZodDefault<z.ZodString>;
117
117
  settings: z.ZodDefault<z.ZodObject<{
118
118
  filetreeRoot: z.ZodDefault<z.ZodString>;
119
119
  targets: z.ZodDefault<z.ZodArray<z.ZodEnum<{
@@ -127,8 +127,6 @@ export declare const G3nConfigSchema: z.ZodObject<{
127
127
  }, z.core.$strip>>;
128
128
  }, z.core.$strip>>;
129
129
  }, z.core.$strip>;
130
- export type CoreConfig = z.infer<typeof CoreConfigSchema>;
131
- export type PackageMeta = z.infer<typeof PackageMetaSchema>;
132
130
  export type G3nuiSettings = z.infer<typeof G3nuiSettingsSchema>;
133
131
  export type G3nuiConfig = z.infer<typeof G3nuiConfigSchema>;
134
132
  export type G3nerateSettings = z.infer<typeof G3nerateSettingsSchema>;
@@ -137,5 +135,6 @@ export type SkillTarget = z.infer<typeof SkillTargetSchema>;
137
135
  export type SkillsInstallDirs = z.infer<typeof SkillsInstallDirsSchema>;
138
136
  export type SkillsSettings = z.infer<typeof SkillsSettingsSchema>;
139
137
  export type SkillsConfig = z.infer<typeof SkillsConfigSchema>;
138
+ export type G3nConfigFile = z.infer<typeof G3nConfigFileSchema>;
140
139
  export type G3nConfig = z.infer<typeof G3nConfigSchema>;
141
140
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,gBAAgB;;;;iBAI3B,CAAC;AAEH,wEAAwE;AACxE,eAAO,MAAM,iBAAiB;;;;iBAI5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;iBAW9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;iBAE5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;iBAGjC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;iBAE/B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;EAA8B,CAAC;AAE7D,eAAO,MAAM,uBAAuB;;;iBAKlC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAO/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;iBAE7B,CAAC;AAMH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAK1B,CAAC;AAMH,MAAM,MAAM,UAAU,GAAY,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AACnE,MAAM,MAAM,WAAW,GAAW,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,aAAa,GAAS,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,WAAW,GAAW,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAM,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACzE,MAAM,MAAM,cAAc,GAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,WAAW,GAAW,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAK,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,YAAY,GAAU,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACrE,MAAM,MAAM,SAAS,GAAa,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,mBAAmB;;;;;;;;;iBAW9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;iBAE5B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;iBAGjC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;iBAE/B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;EAA8B,CAAC;AAE7D,eAAO,MAAM,uBAAuB;;;iBAKlC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;iBAO/B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;iBAE7B,CAAC;AAMH,6FAA6F;AAC7F,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI9B,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAI1B,CAAC;AAMH,MAAM,MAAM,aAAa,GAAS,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,WAAW,GAAW,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAM,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACzE,MAAM,MAAM,cAAc,GAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,WAAW,GAAW,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAK,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AACvE,MAAM,MAAM,YAAY,GAAU,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACrE,MAAM,MAAM,aAAa,GAAS,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AACtE,MAAM,MAAM,SAAS,GAAa,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -1,19 +1,10 @@
1
1
  // packages/core/src/config/types.ts
2
2
  import { z } from "zod";
3
3
  // ---------------------------------------------------------------------------
4
- // Per-package section schemas
4
+ // Per-package section schemas — settings only. Package metadata (version,
5
+ // description, license) lives in each package's package.json and is read at
6
+ // runtime via `readPackageMeta`, never persisted here.
5
7
  // ---------------------------------------------------------------------------
6
- export const CoreConfigSchema = z.object({
7
- version: z.string().default("0.1.0"),
8
- description: z.string().default(""),
9
- license: z.string().default("UNLICENSED"),
10
- });
11
- /** Shared package metadata present on every non-core package section */
12
- export const PackageMetaSchema = z.object({
13
- version: z.string().default("0.1.0"),
14
- description: z.string().default(""),
15
- license: z.string().default("UNLICENSED"),
16
- });
17
8
  export const G3nuiSettingsSchema = z.object({
18
9
  /** Where components are installed in the user's project */
19
10
  componentsDir: z.string().default("src/components/ui"),
@@ -26,14 +17,14 @@ export const G3nuiSettingsSchema = z.object({
26
17
  /** External package adapters to load (e.g. ["shadcn"]) */
27
18
  registeredPackages: z.array(z.string()).default([]),
28
19
  });
29
- export const G3nuiConfigSchema = PackageMetaSchema.extend({
20
+ export const G3nuiConfigSchema = z.object({
30
21
  settings: G3nuiSettingsSchema.default(() => G3nuiSettingsSchema.parse({})),
31
22
  });
32
23
  export const G3nerateSettingsSchema = z.object({
33
24
  /** Output directory for generated files */
34
25
  outputDir: z.string().default("src/generated"),
35
26
  });
36
- export const G3nerateConfigSchema = PackageMetaSchema.extend({
27
+ export const G3nerateConfigSchema = z.object({
37
28
  settings: G3nerateSettingsSchema.default(() => G3nerateSettingsSchema.parse({})),
38
29
  });
39
30
  export const SkillTargetSchema = z.enum(["claude", "codex"]);
@@ -51,14 +42,20 @@ export const SkillsSettingsSchema = z.object({
51
42
  /** Install directory per target; the skills.json registry sits next to each */
52
43
  installDirs: SkillsInstallDirsSchema.default(() => SkillsInstallDirsSchema.parse({})),
53
44
  });
54
- export const SkillsConfigSchema = PackageMetaSchema.extend({
45
+ export const SkillsConfigSchema = z.object({
55
46
  settings: SkillsSettingsSchema.default(() => SkillsSettingsSchema.parse({})),
56
47
  });
57
48
  // ---------------------------------------------------------------------------
58
- // Root merged config schema
49
+ // Root config schemas
59
50
  // ---------------------------------------------------------------------------
51
+ /** What `.g3n.config.json` holds on disk: only the sections a package's init has written. */
52
+ export const G3nConfigFileSchema = z.object({
53
+ g3nui: G3nuiConfigSchema.optional(),
54
+ g3nerate: G3nerateConfigSchema.optional(),
55
+ skills: SkillsConfigSchema.optional(),
56
+ });
57
+ /** The fully-defaulted view every consumer reads through `loadConfig`. */
60
58
  export const G3nConfigSchema = z.object({
61
- core: CoreConfigSchema.default(() => CoreConfigSchema.parse({})),
62
59
  g3nui: G3nuiConfigSchema.default(() => G3nuiConfigSchema.parse({})),
63
60
  g3nerate: G3nerateConfigSchema.default(() => G3nerateConfigSchema.parse({})),
64
61
  skills: SkillsConfigSchema.default(() => SkillsConfigSchema.parse({})),
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { BaseFileEntry, BaseRegistryEntry } from "../registry/types";
2
+ import type { FileClassification, InstallerIO } from "./types";
3
+ /** `path → hash` map of a manifest entry's files; empty when never installed. */
4
+ export declare function recordedHashes(entry: Pick<BaseRegistryEntry, "files"> | undefined): Record<string, string>;
5
+ export declare function classifyFile<F extends BaseFileEntry>(file: F, installDir: string, recordedHash: string | undefined, io: InstallerIO, resolveLatestHash?: (file: F) => Promise<string>): Promise<FileClassification<F>>;
6
+ export declare function classifyFiles<F extends BaseFileEntry>(files: readonly F[], installDir: string, recorded: Record<string, string | undefined>, io: InstallerIO, resolveLatestHash?: (file: F) => Promise<string>): Promise<FileClassification<F>[]>;
7
+ //# sourceMappingURL=classify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.d.ts","sourceRoot":"","sources":["../../src/installer/classify.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAE9D,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM1G;AAoBD,wBAAsB,YAAY,CAAC,CAAC,SAAS,aAAa,EACxD,IAAI,EAAE,CAAC,EACP,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,EAAE,EAAE,WAAW,EACf,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,GAC/C,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAUhC;AAED,wBAAsB,aAAa,CAAC,CAAC,SAAS,aAAa,EACzD,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EAC5C,EAAE,EAAE,WAAW,EACf,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,GAC/C,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAMlC"}
@@ -0,0 +1,47 @@
1
+ // packages/core/src/installer/classify.ts
2
+ import path from "node:path";
3
+ import { FileState } from "./types";
4
+ /** `path → hash` map of a manifest entry's files; empty when never installed. */
5
+ export function recordedHashes(entry) {
6
+ const map = {};
7
+ for (const file of entry?.files ?? []) {
8
+ if (file.hash)
9
+ map[file.path] = file.hash;
10
+ }
11
+ return map;
12
+ }
13
+ function resolveState(exists, currentHash, recordedHash, latestHash) {
14
+ if (!exists)
15
+ return FileState.SafeUpdate;
16
+ if (recordedHash === undefined) {
17
+ return currentHash === latestHash ? FileState.UpToDate : FileState.Conflict;
18
+ }
19
+ const userModified = currentHash !== recordedHash;
20
+ const registryChanged = latestHash !== recordedHash;
21
+ if (!userModified && !registryChanged)
22
+ return FileState.UpToDate;
23
+ if (!userModified)
24
+ return FileState.SafeUpdate;
25
+ if (!registryChanged)
26
+ return FileState.UserOnly;
27
+ return FileState.Conflict;
28
+ }
29
+ export async function classifyFile(file, installDir, recordedHash, io, resolveLatestHash) {
30
+ const destPath = path.join(installDir, file.path);
31
+ const latestHash = file.hash ?? (await resolveLatestHash?.(file));
32
+ if (latestHash === undefined) {
33
+ throw new Error(`no hash for "${file.path}" and no resolveLatestHash provided`);
34
+ }
35
+ const exists = io.exists(destPath);
36
+ const currentHash = exists ? await io.hashFile(destPath) : null;
37
+ const state = resolveState(exists, currentHash, recordedHash, latestHash);
38
+ return { file, destPath, state, exists, currentHash, recordedHash, latestHash };
39
+ }
40
+ export async function classifyFiles(files, installDir, recorded, io, resolveLatestHash) {
41
+ const classifications = [];
42
+ for (const file of files) {
43
+ classifications.push(await classifyFile(file, installDir, recorded[file.path], io, resolveLatestHash));
44
+ }
45
+ return classifications;
46
+ }
47
+ //# sourceMappingURL=classify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classify.js","sourceRoot":"","sources":["../../src/installer/classify.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAGnC,iFAAiF;AACjF,MAAM,UAAU,cAAc,CAAC,KAAmD;IAChF,MAAM,GAAG,GAA2B,EAAE,CAAA;IACtC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAA;IAC3C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,YAAY,CACnB,MAAe,EACf,WAA0B,EAC1B,YAAgC,EAChC,UAAkB;IAElB,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC,UAAU,CAAA;IACxC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAA;IAC7E,CAAC;IACD,MAAM,YAAY,GAAM,WAAW,KAAK,YAAY,CAAA;IACpD,MAAM,eAAe,GAAG,UAAU,KAAM,YAAY,CAAA;IACpD,IAAI,CAAC,YAAY,IAAI,CAAC,eAAe;QAAE,OAAO,SAAS,CAAC,QAAQ,CAAA;IAChE,IAAI,CAAC,YAAY;QAAsB,OAAO,SAAS,CAAC,UAAU,CAAA;IAClE,IAAI,CAAC,eAAe;QAAmB,OAAO,SAAS,CAAC,QAAQ,CAAA;IAChE,OAAO,SAAS,CAAC,QAAQ,CAAA;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAO,EACP,UAAkB,EAClB,YAAgC,EAChC,EAAe,EACf,iBAAgD;IAEhD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IACjE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,IAAI,qCAAqC,CAAC,CAAA;IACjF,CAAC;IACD,MAAM,MAAM,GAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC/D,MAAM,KAAK,GAAS,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAA;IAC/E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,CAAA;AACjF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAmB,EACnB,UAAkB,EAClB,QAA4C,EAC5C,EAAe,EACf,iBAAgD;IAEhD,MAAM,eAAe,GAA4B,EAAE,CAAA;IACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,eAAe,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAA;IACxG,CAAC;IACD,OAAO,eAAe,CAAA;AACxB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./types";
2
+ export { createInstallerIO } from "./io";
3
+ export { classifyFile, classifyFiles, recordedHashes } from "./classify";
4
+ export { applyClassifications, copySource } from "./install";
5
+ export { removeInstalledFiles, pruneEmptyDirs } from "./remove";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}
@@ -0,0 +1,7 @@
1
+ // packages/core/src/installer/index.ts
2
+ export * from "./types";
3
+ export { createInstallerIO } from "./io";
4
+ export { classifyFile, classifyFiles, recordedHashes } from "./classify";
5
+ export { applyClassifications, copySource } from "./install";
6
+ export { removeInstalledFiles, pruneEmptyDirs } from "./remove";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA"}