@kb-labs/core-config 1.0.0 → 1.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 (173) hide show
  1. package/dist/__tests__/cache.spec.d.ts +6 -0
  2. package/dist/__tests__/cache.spec.d.ts.map +1 -0
  3. package/dist/__tests__/cache.spec.js +87 -0
  4. package/dist/__tests__/cache.spec.js.map +1 -0
  5. package/dist/__tests__/fs-atomic.spec.d.ts +6 -0
  6. package/dist/__tests__/fs-atomic.spec.d.ts.map +1 -0
  7. package/dist/__tests__/fs-atomic.spec.js +153 -0
  8. package/dist/__tests__/fs-atomic.spec.js.map +1 -0
  9. package/dist/__tests__/get-product-config-edge-cases.spec.d.ts +6 -0
  10. package/dist/__tests__/get-product-config-edge-cases.spec.d.ts.map +1 -0
  11. package/dist/__tests__/get-product-config-edge-cases.spec.js +334 -0
  12. package/dist/__tests__/get-product-config-edge-cases.spec.js.map +1 -0
  13. package/dist/__tests__/init-workspace.spec.d.ts +6 -0
  14. package/dist/__tests__/init-workspace.spec.d.ts.map +1 -0
  15. package/dist/__tests__/init-workspace.spec.js +101 -0
  16. package/dist/__tests__/init-workspace.spec.js.map +1 -0
  17. package/dist/__tests__/kb-error.spec.d.ts +6 -0
  18. package/dist/__tests__/kb-error.spec.d.ts.map +1 -0
  19. package/dist/__tests__/kb-error.spec.js +193 -0
  20. package/dist/__tests__/kb-error.spec.js.map +1 -0
  21. package/dist/__tests__/preset-lockfile.spec.d.ts +6 -0
  22. package/dist/__tests__/preset-lockfile.spec.d.ts.map +1 -0
  23. package/dist/__tests__/preset-lockfile.spec.js +142 -0
  24. package/dist/__tests__/preset-lockfile.spec.js.map +1 -0
  25. package/dist/__tests__/product-config-profiles.spec.d.ts +6 -0
  26. package/dist/__tests__/product-config-profiles.spec.d.ts.map +1 -0
  27. package/dist/__tests__/product-config-profiles.spec.js +82 -0
  28. package/dist/__tests__/product-config-profiles.spec.js.map +1 -0
  29. package/dist/__tests__/product-config.spec.d.ts +6 -0
  30. package/dist/__tests__/product-config.spec.d.ts.map +1 -0
  31. package/dist/__tests__/product-config.spec.js +304 -0
  32. package/dist/__tests__/product-config.spec.js.map +1 -0
  33. package/dist/__tests__/profiles-demo.d.ts +11 -0
  34. package/dist/__tests__/profiles-demo.d.ts.map +1 -0
  35. package/dist/__tests__/profiles-demo.js +173 -0
  36. package/dist/__tests__/profiles-demo.js.map +1 -0
  37. package/dist/__tests__/profiles-resolver.spec.d.ts +2 -0
  38. package/dist/__tests__/profiles-resolver.spec.d.ts.map +1 -0
  39. package/dist/__tests__/profiles-resolver.spec.js +114 -0
  40. package/dist/__tests__/profiles-resolver.spec.js.map +1 -0
  41. package/dist/__tests__/profiles-section.spec.d.ts +2 -0
  42. package/dist/__tests__/profiles-section.spec.d.ts.map +1 -0
  43. package/dist/__tests__/profiles-section.spec.js +50 -0
  44. package/dist/__tests__/profiles-section.spec.js.map +1 -0
  45. package/dist/__tests__/runtime.spec.d.ts +2 -0
  46. package/dist/__tests__/runtime.spec.d.ts.map +1 -0
  47. package/dist/__tests__/runtime.spec.js +170 -0
  48. package/dist/__tests__/runtime.spec.js.map +1 -0
  49. package/dist/__tests__/upsert-lockfile.spec.d.ts +1 -0
  50. package/dist/__tests__/upsert-lockfile.spec.d.ts.map +1 -0
  51. package/dist/__tests__/upsert-lockfile.spec.js +2 -0
  52. package/dist/__tests__/upsert-lockfile.spec.js.map +1 -0
  53. package/dist/__tests__/validate-config.spec.d.ts +2 -0
  54. package/dist/__tests__/validate-config.spec.d.ts.map +1 -0
  55. package/dist/__tests__/validate-config.spec.js +14 -0
  56. package/dist/__tests__/validate-config.spec.js.map +1 -0
  57. package/dist/api/init-workspace.d.ts +10 -0
  58. package/dist/api/init-workspace.d.ts.map +1 -0
  59. package/dist/api/init-workspace.js +186 -0
  60. package/dist/api/init-workspace.js.map +1 -0
  61. package/dist/api/product-config.d.ts +20 -0
  62. package/dist/api/product-config.d.ts.map +1 -0
  63. package/dist/api/product-config.js +236 -0
  64. package/dist/api/product-config.js.map +1 -0
  65. package/dist/api/read-config.d.ts +22 -0
  66. package/dist/api/read-config.d.ts.map +1 -0
  67. package/dist/api/read-config.js +112 -0
  68. package/dist/api/read-config.js.map +1 -0
  69. package/dist/api/read-kb-config.d.ts +12 -0
  70. package/dist/api/read-kb-config.d.ts.map +1 -0
  71. package/dist/api/read-kb-config.js +47 -0
  72. package/dist/api/read-kb-config.js.map +1 -0
  73. package/dist/api/upsert-lockfile.d.ts +10 -0
  74. package/dist/api/upsert-lockfile.d.ts.map +1 -0
  75. package/dist/api/upsert-lockfile.js +63 -0
  76. package/dist/api/upsert-lockfile.js.map +1 -0
  77. package/dist/cache/fs-cache.d.ts +38 -0
  78. package/dist/cache/fs-cache.d.ts.map +1 -0
  79. package/dist/cache/fs-cache.js +142 -0
  80. package/dist/cache/fs-cache.js.map +1 -0
  81. package/dist/errors/kb-error.d.ts +35 -0
  82. package/dist/errors/kb-error.d.ts.map +1 -0
  83. package/dist/errors/kb-error.js +57 -0
  84. package/dist/errors/kb-error.js.map +1 -0
  85. package/dist/hash/config-hash.d.ts +17 -0
  86. package/dist/hash/config-hash.d.ts.map +1 -0
  87. package/dist/hash/config-hash.js +55 -0
  88. package/dist/hash/config-hash.js.map +1 -0
  89. package/dist/index.d.ts +25 -1016
  90. package/dist/index.d.ts.map +1 -0
  91. package/dist/index.js +29 -1533
  92. package/dist/index.js.map +1 -1
  93. package/dist/lockfile/lockfile.d.ts +53 -0
  94. package/dist/lockfile/lockfile.d.ts.map +1 -0
  95. package/dist/lockfile/lockfile.js +142 -0
  96. package/dist/lockfile/lockfile.js.map +1 -0
  97. package/dist/merge/layered-merge.d.ts +16 -0
  98. package/dist/merge/layered-merge.d.ts.map +1 -0
  99. package/dist/merge/layered-merge.js +87 -0
  100. package/dist/merge/layered-merge.js.map +1 -0
  101. package/dist/preset/resolve-preset.d.ts +28 -0
  102. package/dist/preset/resolve-preset.d.ts.map +1 -0
  103. package/dist/preset/resolve-preset.js +104 -0
  104. package/dist/preset/resolve-preset.js.map +1 -0
  105. package/dist/profiles/loader.d.ts +12 -0
  106. package/dist/profiles/loader.d.ts.map +1 -0
  107. package/dist/profiles/loader.js +34 -0
  108. package/dist/profiles/loader.js.map +1 -0
  109. package/dist/profiles/resolver.d.ts +11 -0
  110. package/dist/profiles/resolver.d.ts.map +1 -0
  111. package/dist/profiles/resolver.js +252 -0
  112. package/dist/profiles/resolver.js.map +1 -0
  113. package/dist/profiles/scope-selector.d.ts +19 -0
  114. package/dist/profiles/scope-selector.d.ts.map +1 -0
  115. package/dist/profiles/scope-selector.js +64 -0
  116. package/dist/profiles/scope-selector.js.map +1 -0
  117. package/dist/profiles/types.d.ts +462 -0
  118. package/dist/profiles/types.d.ts.map +1 -0
  119. package/dist/profiles/types.js +68 -0
  120. package/dist/profiles/types.js.map +1 -0
  121. package/dist/runtime/index.d.ts +2 -0
  122. package/dist/runtime/index.d.ts.map +1 -0
  123. package/dist/runtime/index.js +2 -0
  124. package/dist/runtime/index.js.map +1 -0
  125. package/dist/runtime/runtime.d.ts +46 -0
  126. package/dist/runtime/runtime.d.ts.map +1 -0
  127. package/dist/runtime/runtime.js +126 -0
  128. package/dist/runtime/runtime.js.map +1 -0
  129. package/dist/types/index.d.ts +2 -0
  130. package/dist/types/index.d.ts.map +1 -0
  131. package/dist/types/index.js +2 -0
  132. package/dist/types/index.js.map +1 -0
  133. package/dist/types/init.d.ts +33 -0
  134. package/dist/types/init.d.ts.map +1 -0
  135. package/dist/types/init.js +6 -0
  136. package/dist/types/init.js.map +1 -0
  137. package/dist/types/preset.d.ts +27 -0
  138. package/dist/types/preset.d.ts.map +1 -0
  139. package/dist/types/preset.js +6 -0
  140. package/dist/types/preset.js.map +1 -0
  141. package/dist/types/types.d.ts +70 -0
  142. package/dist/types/types.d.ts.map +1 -0
  143. package/dist/types/types.js +2 -0
  144. package/dist/types/types.js.map +1 -0
  145. package/dist/utils/__tests__/env.spec.d.ts +2 -0
  146. package/dist/utils/__tests__/env.spec.d.ts.map +1 -0
  147. package/dist/utils/__tests__/env.spec.js +33 -0
  148. package/dist/utils/__tests__/env.spec.js.map +1 -0
  149. package/dist/utils/env.d.ts +7 -0
  150. package/dist/utils/env.d.ts.map +1 -0
  151. package/dist/utils/env.js +25 -0
  152. package/dist/utils/env.js.map +1 -0
  153. package/dist/utils/fs-atomic.d.ts +15 -0
  154. package/dist/utils/fs-atomic.d.ts.map +1 -0
  155. package/dist/utils/fs-atomic.js +46 -0
  156. package/dist/utils/fs-atomic.js.map +1 -0
  157. package/dist/utils/index.d.ts +3 -0
  158. package/dist/utils/index.d.ts.map +1 -0
  159. package/dist/utils/index.js +3 -0
  160. package/dist/utils/index.js.map +1 -0
  161. package/dist/utils/paths.d.ts +21 -0
  162. package/dist/utils/paths.d.ts.map +1 -0
  163. package/dist/utils/paths.js +32 -0
  164. package/dist/utils/paths.js.map +1 -0
  165. package/dist/utils/product-normalize.d.ts +25 -0
  166. package/dist/utils/product-normalize.d.ts.map +1 -0
  167. package/dist/utils/product-normalize.js +48 -0
  168. package/dist/utils/product-normalize.js.map +1 -0
  169. package/dist/validation/validate-config.d.ts +10 -0
  170. package/dist/validation/validate-config.d.ts.map +1 -0
  171. package/dist/validation/validate-config.js +21 -0
  172. package/dist/validation/validate-config.js.map +1 -0
  173. package/package.json +13 -13
@@ -0,0 +1,48 @@
1
+ /**
2
+ * @module @kb-labs/core/config/utils/product-normalize
3
+ * Product ID normalization between code (camelCase) and filesystem (kebab-case)
4
+ */
5
+ const FS_MAP = new Map([
6
+ ['aiReview', 'ai-review'],
7
+ ['aiDocs', 'ai-docs'],
8
+ ['devlink', 'devlink'],
9
+ ['release', 'release'],
10
+ ['devkit', 'devkit'],
11
+ ['mind', 'mind'],
12
+ ['workflow', 'workflow'],
13
+ ['analytics', 'analytics'],
14
+ ]);
15
+ /**
16
+ * Convert product ID to filesystem kebab-case format
17
+ * @param id Product ID (e.g., 'aiReview', 'mind', 'workflow')
18
+ * @returns kebab-case string for filesystem paths
19
+ */
20
+ export function toFsProduct(id) {
21
+ return FS_MAP.get(id) ?? id;
22
+ }
23
+ /**
24
+ * Convert filesystem kebab-case key to product ID
25
+ * @param fsKey kebab-case string from filesystem
26
+ * @returns Product ID (camelCase if mapped, original otherwise)
27
+ */
28
+ export function toConfigProduct(fsKey) {
29
+ for (const [k, v] of FS_MAP) {
30
+ if (v === fsKey) {
31
+ return k;
32
+ }
33
+ }
34
+ return fsKey;
35
+ }
36
+ /**
37
+ * Check if a string is a known product ID
38
+ */
39
+ export function isValidProductId(value) {
40
+ return FS_MAP.has(value);
41
+ }
42
+ /**
43
+ * Get all known product IDs
44
+ */
45
+ export function getAllProductIds() {
46
+ return Array.from(FS_MAP.keys());
47
+ }
48
+ //# sourceMappingURL=product-normalize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"product-normalize.js","sourceRoot":"","sources":["../../src/utils/product-normalize.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;IACrB,CAAC,UAAU,EAAE,WAAW,CAAC;IACzB,CAAC,QAAQ,EAAE,SAAS,CAAC;IACrB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,SAAS,EAAE,SAAS,CAAC;IACtB,CAAC,QAAQ,EAAE,QAAQ,CAAC;IACpB,CAAC,MAAM,EAAE,MAAM,CAAC;IAChB,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,WAAW,EAAE,WAAW,CAAC;CAC3B,CAAC,CAAC;AAEH;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,EAAU;IACpC,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;YAAA,OAAO,CAAC,CAAC;QAAA,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export type ValidationResult = {
2
+ ok: boolean;
3
+ errors: any[] | null;
4
+ };
5
+ /**
6
+ * Temporary schema registry hook – upcoming implementation will register schemas here.
7
+ */
8
+ export declare function registerProductSchema(product: string, schema: any): void;
9
+ export declare function validateProductConfig(product: string, config: unknown): ValidationResult;
10
+ //# sourceMappingURL=validate-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-config.d.ts","sourceRoot":"","sources":["../../src/validation/validate-config.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,gBAAgB,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;CAAE,CAAC;AAOrE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAExE;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAOxF"}
@@ -0,0 +1,21 @@
1
+ import Ajv from 'ajv';
2
+ import addFormats from 'ajv-formats';
3
+ const ajv = new Ajv({ allErrors: true, strict: false });
4
+ addFormats(ajv);
5
+ const schemaMap = {};
6
+ /**
7
+ * Temporary schema registry hook – upcoming implementation will register schemas here.
8
+ */
9
+ export function registerProductSchema(product, schema) {
10
+ schemaMap[product] = schema;
11
+ }
12
+ export function validateProductConfig(product, config) {
13
+ const schema = schemaMap[product];
14
+ if (!schema) {
15
+ return { ok: true, errors: null };
16
+ }
17
+ const validate = ajv.compile(schema);
18
+ const ok = validate(config);
19
+ return { ok: !!ok, errors: validate.errors || null };
20
+ }
21
+ //# sourceMappingURL=validate-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-config.js","sourceRoot":"","sources":["../../src/validation/validate-config.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,UAAU,MAAM,aAAa,CAAC;AAIrC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACxD,UAAU,CAAC,GAAG,CAAC,CAAC;AAEhB,MAAM,SAAS,GAAwB,EAAE,CAAC;AAE1C;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,MAAW;IAChE,SAAS,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,MAAe;IACpE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QAAA,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAAA,CAAC;IAEjD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;AACvD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kb-labs/core-config",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Core configuration system for KB Labs products, including schema validation, resolution, and merging",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -18,6 +18,16 @@
18
18
  "LICENSE"
19
19
  ],
20
20
  "sideEffects": false,
21
+ "scripts": {
22
+ "clean": "rimraf dist",
23
+ "build": "pnpm clean && tsup --config tsup.config.ts",
24
+ "dev": "tsup --config tsup.config.ts --watch",
25
+ "type-check": "tsc --noEmit",
26
+ "test": "vitest run --passWithNoTests",
27
+ "lint": "eslint . --ignore-pattern 'dist/**'",
28
+ "lint:fix": "eslint . --fix --ignore-pattern 'dist/**'",
29
+ "test:watch": "vitest"
30
+ },
21
31
  "dependencies": {
22
32
  "ajv": "^8.17.1",
23
33
  "ajv-formats": "^3.0.1",
@@ -26,7 +36,7 @@
26
36
  "zod": "^3.23.8"
27
37
  },
28
38
  "devDependencies": {
29
- "@kb-labs/devkit": "link:../../../kb-labs-devkit",
39
+ "@kb-labs/devkit": "^1.0.0",
30
40
  "@types/node": "^24.3.3",
31
41
  "@types/picomatch": "^4",
32
42
  "@typescript-eslint/eslint-plugin": "^8",
@@ -43,15 +53,5 @@
43
53
  },
44
54
  "publishConfig": {
45
55
  "access": "public"
46
- },
47
- "scripts": {
48
- "clean": "rimraf dist",
49
- "build": "pnpm clean && tsup --config tsup.config.ts",
50
- "dev": "tsup --config tsup.config.ts --watch",
51
- "type-check": "tsc --noEmit",
52
- "test": "vitest run --passWithNoTests",
53
- "lint": "eslint . --ignore-pattern 'dist/**'",
54
- "lint:fix": "eslint . --fix --ignore-pattern 'dist/**'",
55
- "test:watch": "vitest"
56
56
  }
57
- }
57
+ }