@kb-labs/core-config 1.2.0 → 1.4.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/index.d.ts +1016 -25
  2. package/dist/index.js +1533 -29
  3. package/dist/index.js.map +1 -1
  4. package/package.json +2 -2
  5. package/dist/__tests__/cache.spec.d.ts +0 -6
  6. package/dist/__tests__/cache.spec.d.ts.map +0 -1
  7. package/dist/__tests__/cache.spec.js +0 -87
  8. package/dist/__tests__/cache.spec.js.map +0 -1
  9. package/dist/__tests__/fs-atomic.spec.d.ts +0 -6
  10. package/dist/__tests__/fs-atomic.spec.d.ts.map +0 -1
  11. package/dist/__tests__/fs-atomic.spec.js +0 -153
  12. package/dist/__tests__/fs-atomic.spec.js.map +0 -1
  13. package/dist/__tests__/get-product-config-edge-cases.spec.d.ts +0 -6
  14. package/dist/__tests__/get-product-config-edge-cases.spec.d.ts.map +0 -1
  15. package/dist/__tests__/get-product-config-edge-cases.spec.js +0 -334
  16. package/dist/__tests__/get-product-config-edge-cases.spec.js.map +0 -1
  17. package/dist/__tests__/init-workspace.spec.d.ts +0 -6
  18. package/dist/__tests__/init-workspace.spec.d.ts.map +0 -1
  19. package/dist/__tests__/init-workspace.spec.js +0 -101
  20. package/dist/__tests__/init-workspace.spec.js.map +0 -1
  21. package/dist/__tests__/kb-error.spec.d.ts +0 -6
  22. package/dist/__tests__/kb-error.spec.d.ts.map +0 -1
  23. package/dist/__tests__/kb-error.spec.js +0 -193
  24. package/dist/__tests__/kb-error.spec.js.map +0 -1
  25. package/dist/__tests__/preset-lockfile.spec.d.ts +0 -6
  26. package/dist/__tests__/preset-lockfile.spec.d.ts.map +0 -1
  27. package/dist/__tests__/preset-lockfile.spec.js +0 -142
  28. package/dist/__tests__/preset-lockfile.spec.js.map +0 -1
  29. package/dist/__tests__/product-config-profiles.spec.d.ts +0 -6
  30. package/dist/__tests__/product-config-profiles.spec.d.ts.map +0 -1
  31. package/dist/__tests__/product-config-profiles.spec.js +0 -82
  32. package/dist/__tests__/product-config-profiles.spec.js.map +0 -1
  33. package/dist/__tests__/product-config.spec.d.ts +0 -6
  34. package/dist/__tests__/product-config.spec.d.ts.map +0 -1
  35. package/dist/__tests__/product-config.spec.js +0 -304
  36. package/dist/__tests__/product-config.spec.js.map +0 -1
  37. package/dist/__tests__/profiles-demo.d.ts +0 -11
  38. package/dist/__tests__/profiles-demo.d.ts.map +0 -1
  39. package/dist/__tests__/profiles-demo.js +0 -173
  40. package/dist/__tests__/profiles-demo.js.map +0 -1
  41. package/dist/__tests__/profiles-resolver.spec.d.ts +0 -2
  42. package/dist/__tests__/profiles-resolver.spec.d.ts.map +0 -1
  43. package/dist/__tests__/profiles-resolver.spec.js +0 -114
  44. package/dist/__tests__/profiles-resolver.spec.js.map +0 -1
  45. package/dist/__tests__/profiles-section.spec.d.ts +0 -2
  46. package/dist/__tests__/profiles-section.spec.d.ts.map +0 -1
  47. package/dist/__tests__/profiles-section.spec.js +0 -50
  48. package/dist/__tests__/profiles-section.spec.js.map +0 -1
  49. package/dist/__tests__/runtime.spec.d.ts +0 -2
  50. package/dist/__tests__/runtime.spec.d.ts.map +0 -1
  51. package/dist/__tests__/runtime.spec.js +0 -170
  52. package/dist/__tests__/runtime.spec.js.map +0 -1
  53. package/dist/__tests__/upsert-lockfile.spec.d.ts +0 -1
  54. package/dist/__tests__/upsert-lockfile.spec.d.ts.map +0 -1
  55. package/dist/__tests__/upsert-lockfile.spec.js +0 -2
  56. package/dist/__tests__/upsert-lockfile.spec.js.map +0 -1
  57. package/dist/__tests__/validate-config.spec.d.ts +0 -2
  58. package/dist/__tests__/validate-config.spec.d.ts.map +0 -1
  59. package/dist/__tests__/validate-config.spec.js +0 -14
  60. package/dist/__tests__/validate-config.spec.js.map +0 -1
  61. package/dist/api/init-workspace.d.ts +0 -10
  62. package/dist/api/init-workspace.d.ts.map +0 -1
  63. package/dist/api/init-workspace.js +0 -186
  64. package/dist/api/init-workspace.js.map +0 -1
  65. package/dist/api/product-config.d.ts +0 -20
  66. package/dist/api/product-config.d.ts.map +0 -1
  67. package/dist/api/product-config.js +0 -236
  68. package/dist/api/product-config.js.map +0 -1
  69. package/dist/api/read-config.d.ts +0 -22
  70. package/dist/api/read-config.d.ts.map +0 -1
  71. package/dist/api/read-config.js +0 -112
  72. package/dist/api/read-config.js.map +0 -1
  73. package/dist/api/read-kb-config.d.ts +0 -12
  74. package/dist/api/read-kb-config.d.ts.map +0 -1
  75. package/dist/api/read-kb-config.js +0 -47
  76. package/dist/api/read-kb-config.js.map +0 -1
  77. package/dist/api/upsert-lockfile.d.ts +0 -10
  78. package/dist/api/upsert-lockfile.d.ts.map +0 -1
  79. package/dist/api/upsert-lockfile.js +0 -63
  80. package/dist/api/upsert-lockfile.js.map +0 -1
  81. package/dist/cache/fs-cache.d.ts +0 -38
  82. package/dist/cache/fs-cache.d.ts.map +0 -1
  83. package/dist/cache/fs-cache.js +0 -142
  84. package/dist/cache/fs-cache.js.map +0 -1
  85. package/dist/errors/kb-error.d.ts +0 -35
  86. package/dist/errors/kb-error.d.ts.map +0 -1
  87. package/dist/errors/kb-error.js +0 -57
  88. package/dist/errors/kb-error.js.map +0 -1
  89. package/dist/hash/config-hash.d.ts +0 -17
  90. package/dist/hash/config-hash.d.ts.map +0 -1
  91. package/dist/hash/config-hash.js +0 -55
  92. package/dist/hash/config-hash.js.map +0 -1
  93. package/dist/index.d.ts.map +0 -1
  94. package/dist/lockfile/lockfile.d.ts +0 -53
  95. package/dist/lockfile/lockfile.d.ts.map +0 -1
  96. package/dist/lockfile/lockfile.js +0 -142
  97. package/dist/lockfile/lockfile.js.map +0 -1
  98. package/dist/merge/layered-merge.d.ts +0 -16
  99. package/dist/merge/layered-merge.d.ts.map +0 -1
  100. package/dist/merge/layered-merge.js +0 -87
  101. package/dist/merge/layered-merge.js.map +0 -1
  102. package/dist/preset/resolve-preset.d.ts +0 -28
  103. package/dist/preset/resolve-preset.d.ts.map +0 -1
  104. package/dist/preset/resolve-preset.js +0 -104
  105. package/dist/preset/resolve-preset.js.map +0 -1
  106. package/dist/profiles/loader.d.ts +0 -12
  107. package/dist/profiles/loader.d.ts.map +0 -1
  108. package/dist/profiles/loader.js +0 -34
  109. package/dist/profiles/loader.js.map +0 -1
  110. package/dist/profiles/resolver.d.ts +0 -11
  111. package/dist/profiles/resolver.d.ts.map +0 -1
  112. package/dist/profiles/resolver.js +0 -252
  113. package/dist/profiles/resolver.js.map +0 -1
  114. package/dist/profiles/scope-selector.d.ts +0 -19
  115. package/dist/profiles/scope-selector.d.ts.map +0 -1
  116. package/dist/profiles/scope-selector.js +0 -64
  117. package/dist/profiles/scope-selector.js.map +0 -1
  118. package/dist/profiles/types.d.ts +0 -462
  119. package/dist/profiles/types.d.ts.map +0 -1
  120. package/dist/profiles/types.js +0 -68
  121. package/dist/profiles/types.js.map +0 -1
  122. package/dist/runtime/index.d.ts +0 -2
  123. package/dist/runtime/index.d.ts.map +0 -1
  124. package/dist/runtime/index.js +0 -2
  125. package/dist/runtime/index.js.map +0 -1
  126. package/dist/runtime/runtime.d.ts +0 -46
  127. package/dist/runtime/runtime.d.ts.map +0 -1
  128. package/dist/runtime/runtime.js +0 -126
  129. package/dist/runtime/runtime.js.map +0 -1
  130. package/dist/types/index.d.ts +0 -2
  131. package/dist/types/index.d.ts.map +0 -1
  132. package/dist/types/index.js +0 -2
  133. package/dist/types/index.js.map +0 -1
  134. package/dist/types/init.d.ts +0 -33
  135. package/dist/types/init.d.ts.map +0 -1
  136. package/dist/types/init.js +0 -6
  137. package/dist/types/init.js.map +0 -1
  138. package/dist/types/preset.d.ts +0 -27
  139. package/dist/types/preset.d.ts.map +0 -1
  140. package/dist/types/preset.js +0 -6
  141. package/dist/types/preset.js.map +0 -1
  142. package/dist/types/types.d.ts +0 -70
  143. package/dist/types/types.d.ts.map +0 -1
  144. package/dist/types/types.js +0 -2
  145. package/dist/types/types.js.map +0 -1
  146. package/dist/utils/__tests__/env.spec.d.ts +0 -2
  147. package/dist/utils/__tests__/env.spec.d.ts.map +0 -1
  148. package/dist/utils/__tests__/env.spec.js +0 -33
  149. package/dist/utils/__tests__/env.spec.js.map +0 -1
  150. package/dist/utils/env.d.ts +0 -7
  151. package/dist/utils/env.d.ts.map +0 -1
  152. package/dist/utils/env.js +0 -25
  153. package/dist/utils/env.js.map +0 -1
  154. package/dist/utils/fs-atomic.d.ts +0 -15
  155. package/dist/utils/fs-atomic.d.ts.map +0 -1
  156. package/dist/utils/fs-atomic.js +0 -46
  157. package/dist/utils/fs-atomic.js.map +0 -1
  158. package/dist/utils/index.d.ts +0 -3
  159. package/dist/utils/index.d.ts.map +0 -1
  160. package/dist/utils/index.js +0 -3
  161. package/dist/utils/index.js.map +0 -1
  162. package/dist/utils/paths.d.ts +0 -21
  163. package/dist/utils/paths.d.ts.map +0 -1
  164. package/dist/utils/paths.js +0 -32
  165. package/dist/utils/paths.js.map +0 -1
  166. package/dist/utils/product-normalize.d.ts +0 -25
  167. package/dist/utils/product-normalize.d.ts.map +0 -1
  168. package/dist/utils/product-normalize.js +0 -48
  169. package/dist/utils/product-normalize.js.map +0 -1
  170. package/dist/validation/validate-config.d.ts +0 -10
  171. package/dist/validation/validate-config.d.ts.map +0 -1
  172. package/dist/validation/validate-config.js +0 -21
  173. package/dist/validation/validate-config.js.map +0 -1
@@ -1,334 +0,0 @@
1
- /**
2
- * @module @kb-labs/core-config/__tests__/get-product-config-edge-cases.spec.ts
3
- * Edge cases and error handling tests for getProductConfig
4
- */
5
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
6
- import { promises as fsp } from "node:fs";
7
- import path from "node:path";
8
- import { tmpdir } from "node:os";
9
- import { getProductConfig } from "../api/product-config";
10
- import { clearCaches } from "../cache/fs-cache";
11
- describe("getProductConfig Edge Cases", () => {
12
- let testDir;
13
- beforeEach(async () => {
14
- testDir = path.join(tmpdir(), `kb-labs-config-edge-${Date.now()}`);
15
- await fsp.mkdir(testDir, { recursive: true });
16
- clearCaches();
17
- });
18
- afterEach(async () => {
19
- await fsp.rm(testDir, { recursive: true, force: true });
20
- clearCaches();
21
- });
22
- describe("Profile Layer Edge Cases", () => {
23
- it("should handle missing profile layer", async () => {
24
- const workspaceConfig = {
25
- schemaVersion: "1.0",
26
- products: {
27
- "ai-review": { enabled: true },
28
- },
29
- };
30
- await fsp.writeFile(path.join(testDir, "kb.config.json"), JSON.stringify(workspaceConfig, null, 2));
31
- const result = await getProductConfig({
32
- cwd: testDir,
33
- product: "aiReview",
34
- profileLayer: undefined,
35
- }, null);
36
- expect(result.config).toBeDefined();
37
- expect(result.config.enabled).toBe(true);
38
- });
39
- it("should merge profile layer with workspace config", async () => {
40
- const workspaceConfig = {
41
- schemaVersion: "1.0",
42
- products: {
43
- "ai-review": { enabled: true, maxFiles: 100 },
44
- },
45
- };
46
- await fsp.writeFile(path.join(testDir, "kb.config.json"), JSON.stringify(workspaceConfig, null, 2));
47
- const profileLayer = {
48
- profileId: "default",
49
- source: "profile:default",
50
- products: {
51
- "ai-review": { maxFiles: 200 },
52
- },
53
- };
54
- const result = await getProductConfig({
55
- cwd: testDir,
56
- product: "aiReview",
57
- profileLayer,
58
- }, null);
59
- const config = result.config;
60
- expect(config.enabled).toBe(true); // From workspace
61
- // Profile layer merges with workspace
62
- // Profile layer should override workspace (higher priority in merge order)
63
- // Note: maxFiles may not be in runtime defaults, so check only if present
64
- if ("maxFiles" in config) {
65
- expect(config.maxFiles).toBe(200); // Profile should override workspace (100 -> 200)
66
- }
67
- });
68
- it("should handle scope layer with profile layer", async () => {
69
- const workspaceConfig = {
70
- schemaVersion: "1.0",
71
- products: {
72
- "ai-review": { enabled: true, maxFiles: 100 },
73
- },
74
- };
75
- await fsp.writeFile(path.join(testDir, "kb.config.json"), JSON.stringify(workspaceConfig, null, 2));
76
- const profileLayer = {
77
- profileId: "default",
78
- source: "profile:default",
79
- products: {
80
- "ai-review": { maxFiles: 200 },
81
- },
82
- scope: {
83
- id: "src",
84
- source: "profile-scope:src",
85
- products: {
86
- "ai-review": { maxFiles: 150 },
87
- },
88
- },
89
- };
90
- const result = await getProductConfig({
91
- cwd: testDir,
92
- product: "aiReview",
93
- profileLayer,
94
- }, null);
95
- const config = result.config;
96
- expect(config.enabled).toBe(true); // From workspace
97
- // Scope layer should have highest priority (after CLI)
98
- // Note: maxFiles may not be in runtime defaults
99
- if ("maxFiles" in config) {
100
- expect(config.maxFiles).toBe(150); // From scope (overrides profile 200)
101
- }
102
- });
103
- });
104
- describe("CLI Overrides", () => {
105
- it("should apply CLI overrides with highest priority", async () => {
106
- const workspaceConfig = {
107
- schemaVersion: "1.0",
108
- products: {
109
- "ai-review": { enabled: true, maxFiles: 100 },
110
- },
111
- };
112
- await fsp.writeFile(path.join(testDir, "kb.config.json"), JSON.stringify(workspaceConfig, null, 2));
113
- const profileLayer = {
114
- profileId: "default",
115
- source: "profile:default",
116
- products: {
117
- "ai-review": { maxFiles: 200 },
118
- },
119
- };
120
- const result = await getProductConfig({
121
- cwd: testDir,
122
- product: "aiReview",
123
- profileLayer,
124
- cli: { maxFiles: 50 },
125
- }, null);
126
- const config = result.config;
127
- expect(config.maxFiles).toBe(50); // CLI override wins
128
- });
129
- it("should handle CLI overrides without profile layer", async () => {
130
- const workspaceConfig = {
131
- schemaVersion: "1.0",
132
- products: {
133
- "ai-review": { enabled: true, maxFiles: 100 },
134
- },
135
- };
136
- await fsp.writeFile(path.join(testDir, "kb.config.json"), JSON.stringify(workspaceConfig, null, 2));
137
- const result = await getProductConfig({
138
- cwd: testDir,
139
- product: "aiReview",
140
- cli: { maxFiles: 50, debug: true },
141
- }, null);
142
- const config = result.config;
143
- expect(config.maxFiles).toBe(50); // CLI override
144
- expect(config.debug).toBe(true); // CLI override
145
- });
146
- });
147
- describe("Merge Conflicts", () => {
148
- it("should handle nested object merges correctly", async () => {
149
- const workspaceConfig = {
150
- schemaVersion: "1.0",
151
- products: {
152
- "ai-review": {
153
- enabled: true,
154
- rules: {
155
- security: { level: "high" },
156
- performance: { level: "medium" },
157
- },
158
- },
159
- },
160
- };
161
- await fsp.writeFile(path.join(testDir, "kb.config.json"), JSON.stringify(workspaceConfig, null, 2));
162
- const profileLayer = {
163
- profileId: "default",
164
- source: "profile:default",
165
- products: {
166
- "ai-review": {
167
- rules: {
168
- security: { level: "critical" },
169
- style: { level: "low" },
170
- },
171
- },
172
- },
173
- };
174
- const result = await getProductConfig({
175
- cwd: testDir,
176
- product: "aiReview",
177
- profileLayer,
178
- }, null);
179
- const config = result.config;
180
- // Profile should override workspace values for matching keys
181
- // Merge behavior: nested objects are merged, so both workspace and profile values should be present
182
- expect(config.rules).toBeDefined();
183
- if (config.rules.security) {
184
- expect(config.rules.security.level).toBe("critical"); // From profile (overrides workspace 'high')
185
- }
186
- if (config.rules.performance) {
187
- expect(config.rules.performance.level).toBe("medium"); // From workspace (preserved if not in profile)
188
- }
189
- if (config.rules.style) {
190
- expect(config.rules.style.level).toBe("low"); // From profile (added)
191
- }
192
- });
193
- });
194
- describe("Cache Behavior", () => {
195
- it("should cache configuration results", async () => {
196
- const workspaceConfig = {
197
- schemaVersion: "1.0",
198
- products: {
199
- "ai-review": { enabled: true },
200
- },
201
- };
202
- await fsp.writeFile(path.join(testDir, "kb.config.json"), JSON.stringify(workspaceConfig, null, 2));
203
- // First call - should populate cache
204
- const result1 = await getProductConfig({
205
- cwd: testDir,
206
- product: "aiReview",
207
- }, null);
208
- // Second call - should use cache
209
- const result2 = await getProductConfig({
210
- cwd: testDir,
211
- product: "aiReview",
212
- }, null);
213
- expect(result1.config).toEqual(result2.config);
214
- expect(result1.trace).toEqual(result2.trace);
215
- });
216
- it("should invalidate cache when config changes", async () => {
217
- const workspaceConfig1 = {
218
- schemaVersion: "1.0",
219
- products: {
220
- "ai-review": { enabled: true, maxFiles: 100 },
221
- },
222
- };
223
- await fsp.writeFile(path.join(testDir, "kb.config.json"), JSON.stringify(workspaceConfig1, null, 2));
224
- const result1 = await getProductConfig({
225
- cwd: testDir,
226
- product: "aiReview",
227
- }, null);
228
- // Update config
229
- const workspaceConfig2 = {
230
- schemaVersion: "1.0",
231
- products: {
232
- "ai-review": { enabled: true, maxFiles: 200 },
233
- },
234
- };
235
- await fsp.writeFile(path.join(testDir, "kb.config.json"), JSON.stringify(workspaceConfig2, null, 2));
236
- // Clear cache to simulate cache invalidation
237
- clearCaches();
238
- // Should get new config (after cache clear)
239
- const result2 = await getProductConfig({
240
- cwd: testDir,
241
- product: "aiReview",
242
- }, null);
243
- const config1 = result1.config;
244
- const config2 = result2.config;
245
- // Verify that configs are different (cache invalidation works)
246
- // Note: maxFiles may not be in runtime defaults, but should be in workspace config
247
- // Both configs should have enabled: true, but maxFiles should differ
248
- expect(config1.enabled).toBe(true);
249
- expect(config2.enabled).toBe(true);
250
- // If maxFiles is present in configs, verify it changed
251
- if ("maxFiles" in config1 && "maxFiles" in config2) {
252
- expect(config1.maxFiles).toBe(100);
253
- expect(config2.maxFiles).toBe(200);
254
- expect(config1.maxFiles).not.toBe(config2.maxFiles);
255
- }
256
- else {
257
- // If maxFiles is not preserved (not in runtime defaults),
258
- // at least verify configs were reloaded (different objects)
259
- expect(config1).not.toBe(config2);
260
- }
261
- });
262
- });
263
- describe("Trace Generation", () => {
264
- it("should generate trace for all layers", async () => {
265
- const workspaceConfig = {
266
- schemaVersion: "1.0",
267
- products: {
268
- "ai-review": { enabled: true },
269
- },
270
- };
271
- await fsp.writeFile(path.join(testDir, "kb.config.json"), JSON.stringify(workspaceConfig, null, 2));
272
- const profileLayer = {
273
- profileId: "default",
274
- source: "profile:default",
275
- products: {
276
- "ai-review": { maxFiles: 200 },
277
- },
278
- };
279
- const result = await getProductConfig({
280
- cwd: testDir,
281
- product: "aiReview",
282
- profileLayer,
283
- cli: { debug: true },
284
- }, null);
285
- expect(result.trace).toBeDefined();
286
- expect(Array.isArray(result.trace)).toBe(true);
287
- expect(result.trace.length).toBeGreaterThan(0);
288
- // Trace contains merged steps - check that we have trace
289
- expect(result.trace).toBeDefined();
290
- expect(Array.isArray(result.trace)).toBe(true);
291
- expect(result.trace.length).toBeGreaterThan(0);
292
- // Verify trace structure
293
- const layers = result.trace.map((step) => step.layer || step.label);
294
- expect(layers.length).toBeGreaterThan(0);
295
- // Should have at least runtime and CLI if profile/workspace are empty
296
- expect(layers).toContain("runtime");
297
- expect(layers).toContain("cli");
298
- });
299
- });
300
- describe("Write Final Config", () => {
301
- it("should write final config when writeFinal=true", async () => {
302
- const workspaceConfig = {
303
- schemaVersion: "1.0",
304
- products: {
305
- "ai-review": { enabled: true },
306
- },
307
- };
308
- await fsp.writeFile(path.join(testDir, "kb.config.json"), JSON.stringify(workspaceConfig, null, 2));
309
- await getProductConfig({
310
- cwd: testDir,
311
- product: "aiReview",
312
- writeFinal: true,
313
- }, null);
314
- // Check that final config was written
315
- const finalConfigPath = path.join(testDir, ".kb", "ai-review", "ai-review.config.json");
316
- const finalConfigExists = await fsp
317
- .access(finalConfigPath)
318
- .then(() => true)
319
- .catch(() => false);
320
- expect(finalConfigExists).toBe(true);
321
- if (finalConfigExists) {
322
- const finalConfigContent = await fsp.readFile(finalConfigPath, "utf-8");
323
- const finalConfig = JSON.parse(finalConfigContent);
324
- // Final config structure: { $schema, schemaVersion, ...config }
325
- expect(finalConfig).toBeDefined();
326
- expect(finalConfig.$schema).toBe("https://schemas.kb-labs.dev/config.schema.json");
327
- expect(finalConfig.schemaVersion).toBe("1.0");
328
- // Config properties should be at root level (spread from merged config)
329
- expect(finalConfig.enabled).toBeDefined(); // Should have config properties
330
- }
331
- });
332
- });
333
- });
334
- //# sourceMappingURL=get-product-config-edge-cases.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-product-config-edge-cases.spec.js","sourceRoot":"","sources":["../../src/__tests__/get-product-config-edge-cases.spec.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * @module @kb-labs/core-config/__tests__/init-workspace
3
- * Smoke tests for initWorkspaceConfig
4
- */
5
- export {};
6
- //# sourceMappingURL=init-workspace.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init-workspace.spec.d.ts","sourceRoot":"","sources":["../../src/__tests__/init-workspace.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -1,101 +0,0 @@
1
- /**
2
- * @module @kb-labs/core-config/__tests__/init-workspace
3
- * Smoke tests for initWorkspaceConfig
4
- */
5
- import { describe, it, expect, beforeEach, afterEach } from "vitest";
6
- import { promises as fs } from "node:fs";
7
- import path from "node:path";
8
- import { initWorkspaceConfig } from "../api/init-workspace";
9
- import os from "node:os";
10
- describe("initWorkspaceConfig", () => {
11
- let tmpDir;
12
- beforeEach(async () => {
13
- tmpDir = path.join(os.tmpdir(), `kb-test-${Date.now()}-${Math.random()}`);
14
- await fs.mkdir(tmpDir, { recursive: true });
15
- });
16
- afterEach(async () => {
17
- await fs.rm(tmpDir, { recursive: true, force: true });
18
- });
19
- it("creates new workspace config in YAML format", async () => {
20
- const result = await initWorkspaceConfig({
21
- cwd: tmpDir,
22
- format: "yaml",
23
- products: ["aiReview"],
24
- });
25
- expect(result.created).toHaveLength(1);
26
- expect(result.created[0]).toMatch(/\.kb\/kb\.config\.yaml$/);
27
- const configPath = path.join(tmpDir, ".kb", "kb.config.yaml");
28
- const content = await fs.readFile(configPath, "utf-8");
29
- expect(content).toContain('schemaVersion: "1.0"');
30
- expect(content).toContain("aiReview");
31
- });
32
- it("creates new workspace config in JSON format", async () => {
33
- const result = await initWorkspaceConfig({
34
- cwd: tmpDir,
35
- format: "json",
36
- products: ["aiReview"],
37
- });
38
- expect(result.created).toHaveLength(1);
39
- expect(result.created[0]).toMatch(/\.kb\/kb\.config\.json$/);
40
- const configPath = path.join(tmpDir, ".kb", "kb.config.json");
41
- const content = await fs.readFile(configPath, "utf-8");
42
- const parsed = JSON.parse(content);
43
- expect(parsed.schemaVersion).toBe("1.0");
44
- expect(parsed.products).toHaveProperty("aiReview");
45
- });
46
- it("is idempotent - second run skips unchanged config", async () => {
47
- // First run
48
- await initWorkspaceConfig({
49
- cwd: tmpDir,
50
- format: "yaml",
51
- products: ["aiReview"],
52
- });
53
- // Second run with same options
54
- const result2 = await initWorkspaceConfig({
55
- cwd: tmpDir,
56
- format: "yaml",
57
- products: ["aiReview"],
58
- });
59
- expect(result2.skipped).toHaveLength(1);
60
- expect(result2.created).toHaveLength(0);
61
- expect(result2.updated).toHaveLength(0);
62
- });
63
- it("detects conflicts without --force", async () => {
64
- // Create initial config
65
- const configPath = path.join(tmpDir, ".kb", "kb.config.yaml");
66
- await fs.mkdir(path.dirname(configPath), { recursive: true });
67
- await fs.writeFile(configPath, 'schemaVersion: "1.0"\nproducts:\n aiReview: {}\n', "utf-8");
68
- // Try to overwrite with different content
69
- const result = await initWorkspaceConfig({
70
- cwd: tmpDir,
71
- format: "yaml",
72
- products: ["aiReview", "aiDocs"],
73
- force: false,
74
- });
75
- const conflicts = result.actions.filter((a) => a.kind === "conflict");
76
- expect(conflicts.length).toBeGreaterThan(0);
77
- expect(result.warnings.length).toBeGreaterThan(0);
78
- });
79
- it("supports dry-run mode", async () => {
80
- const result = await initWorkspaceConfig({
81
- cwd: tmpDir,
82
- format: "yaml",
83
- products: ["aiReview"],
84
- dryRun: true,
85
- });
86
- expect(result.actions.length).toBeGreaterThan(0);
87
- // File should not actually be created
88
- const configPath = path.join(tmpDir, ".kb", "kb.config.yaml");
89
- await expect(fs.access(configPath)).rejects.toThrow();
90
- });
91
- it("warns when deprecated profiles option is provided", async () => {
92
- const result = await initWorkspaceConfig({
93
- cwd: tmpDir,
94
- format: "yaml",
95
- profiles: { default: "legacy" },
96
- });
97
- expect(result.warnings.length).toBeGreaterThan(0);
98
- expect(result.warnings.some((w) => w.includes("profiles option is deprecated"))).toBe(true);
99
- });
100
- });
101
- //# sourceMappingURL=init-workspace.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init-workspace.spec.js","sourceRoot":"","sources":["../../src/__tests__/init-workspace.spec.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * @module @kb-labs/core/config/__tests__/kb-error.spec.ts
3
- * Tests for KbError class and error utilities
4
- */
5
- export {};
6
- //# sourceMappingURL=kb-error.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"kb-error.spec.d.ts","sourceRoot":"","sources":["../../src/__tests__/kb-error.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}