@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.
- package/dist/index.d.ts +1016 -25
- package/dist/index.js +1533 -29
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/__tests__/cache.spec.d.ts +0 -6
- package/dist/__tests__/cache.spec.d.ts.map +0 -1
- package/dist/__tests__/cache.spec.js +0 -87
- package/dist/__tests__/cache.spec.js.map +0 -1
- package/dist/__tests__/fs-atomic.spec.d.ts +0 -6
- package/dist/__tests__/fs-atomic.spec.d.ts.map +0 -1
- package/dist/__tests__/fs-atomic.spec.js +0 -153
- package/dist/__tests__/fs-atomic.spec.js.map +0 -1
- package/dist/__tests__/get-product-config-edge-cases.spec.d.ts +0 -6
- package/dist/__tests__/get-product-config-edge-cases.spec.d.ts.map +0 -1
- package/dist/__tests__/get-product-config-edge-cases.spec.js +0 -334
- package/dist/__tests__/get-product-config-edge-cases.spec.js.map +0 -1
- package/dist/__tests__/init-workspace.spec.d.ts +0 -6
- package/dist/__tests__/init-workspace.spec.d.ts.map +0 -1
- package/dist/__tests__/init-workspace.spec.js +0 -101
- package/dist/__tests__/init-workspace.spec.js.map +0 -1
- package/dist/__tests__/kb-error.spec.d.ts +0 -6
- package/dist/__tests__/kb-error.spec.d.ts.map +0 -1
- package/dist/__tests__/kb-error.spec.js +0 -193
- package/dist/__tests__/kb-error.spec.js.map +0 -1
- package/dist/__tests__/preset-lockfile.spec.d.ts +0 -6
- package/dist/__tests__/preset-lockfile.spec.d.ts.map +0 -1
- package/dist/__tests__/preset-lockfile.spec.js +0 -142
- package/dist/__tests__/preset-lockfile.spec.js.map +0 -1
- package/dist/__tests__/product-config-profiles.spec.d.ts +0 -6
- package/dist/__tests__/product-config-profiles.spec.d.ts.map +0 -1
- package/dist/__tests__/product-config-profiles.spec.js +0 -82
- package/dist/__tests__/product-config-profiles.spec.js.map +0 -1
- package/dist/__tests__/product-config.spec.d.ts +0 -6
- package/dist/__tests__/product-config.spec.d.ts.map +0 -1
- package/dist/__tests__/product-config.spec.js +0 -304
- package/dist/__tests__/product-config.spec.js.map +0 -1
- package/dist/__tests__/profiles-demo.d.ts +0 -11
- package/dist/__tests__/profiles-demo.d.ts.map +0 -1
- package/dist/__tests__/profiles-demo.js +0 -173
- package/dist/__tests__/profiles-demo.js.map +0 -1
- package/dist/__tests__/profiles-resolver.spec.d.ts +0 -2
- package/dist/__tests__/profiles-resolver.spec.d.ts.map +0 -1
- package/dist/__tests__/profiles-resolver.spec.js +0 -114
- package/dist/__tests__/profiles-resolver.spec.js.map +0 -1
- package/dist/__tests__/profiles-section.spec.d.ts +0 -2
- package/dist/__tests__/profiles-section.spec.d.ts.map +0 -1
- package/dist/__tests__/profiles-section.spec.js +0 -50
- package/dist/__tests__/profiles-section.spec.js.map +0 -1
- package/dist/__tests__/runtime.spec.d.ts +0 -2
- package/dist/__tests__/runtime.spec.d.ts.map +0 -1
- package/dist/__tests__/runtime.spec.js +0 -170
- package/dist/__tests__/runtime.spec.js.map +0 -1
- package/dist/__tests__/upsert-lockfile.spec.d.ts +0 -1
- package/dist/__tests__/upsert-lockfile.spec.d.ts.map +0 -1
- package/dist/__tests__/upsert-lockfile.spec.js +0 -2
- package/dist/__tests__/upsert-lockfile.spec.js.map +0 -1
- package/dist/__tests__/validate-config.spec.d.ts +0 -2
- package/dist/__tests__/validate-config.spec.d.ts.map +0 -1
- package/dist/__tests__/validate-config.spec.js +0 -14
- package/dist/__tests__/validate-config.spec.js.map +0 -1
- package/dist/api/init-workspace.d.ts +0 -10
- package/dist/api/init-workspace.d.ts.map +0 -1
- package/dist/api/init-workspace.js +0 -186
- package/dist/api/init-workspace.js.map +0 -1
- package/dist/api/product-config.d.ts +0 -20
- package/dist/api/product-config.d.ts.map +0 -1
- package/dist/api/product-config.js +0 -236
- package/dist/api/product-config.js.map +0 -1
- package/dist/api/read-config.d.ts +0 -22
- package/dist/api/read-config.d.ts.map +0 -1
- package/dist/api/read-config.js +0 -112
- package/dist/api/read-config.js.map +0 -1
- package/dist/api/read-kb-config.d.ts +0 -12
- package/dist/api/read-kb-config.d.ts.map +0 -1
- package/dist/api/read-kb-config.js +0 -47
- package/dist/api/read-kb-config.js.map +0 -1
- package/dist/api/upsert-lockfile.d.ts +0 -10
- package/dist/api/upsert-lockfile.d.ts.map +0 -1
- package/dist/api/upsert-lockfile.js +0 -63
- package/dist/api/upsert-lockfile.js.map +0 -1
- package/dist/cache/fs-cache.d.ts +0 -38
- package/dist/cache/fs-cache.d.ts.map +0 -1
- package/dist/cache/fs-cache.js +0 -142
- package/dist/cache/fs-cache.js.map +0 -1
- package/dist/errors/kb-error.d.ts +0 -35
- package/dist/errors/kb-error.d.ts.map +0 -1
- package/dist/errors/kb-error.js +0 -57
- package/dist/errors/kb-error.js.map +0 -1
- package/dist/hash/config-hash.d.ts +0 -17
- package/dist/hash/config-hash.d.ts.map +0 -1
- package/dist/hash/config-hash.js +0 -55
- package/dist/hash/config-hash.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/lockfile/lockfile.d.ts +0 -53
- package/dist/lockfile/lockfile.d.ts.map +0 -1
- package/dist/lockfile/lockfile.js +0 -142
- package/dist/lockfile/lockfile.js.map +0 -1
- package/dist/merge/layered-merge.d.ts +0 -16
- package/dist/merge/layered-merge.d.ts.map +0 -1
- package/dist/merge/layered-merge.js +0 -87
- package/dist/merge/layered-merge.js.map +0 -1
- package/dist/preset/resolve-preset.d.ts +0 -28
- package/dist/preset/resolve-preset.d.ts.map +0 -1
- package/dist/preset/resolve-preset.js +0 -104
- package/dist/preset/resolve-preset.js.map +0 -1
- package/dist/profiles/loader.d.ts +0 -12
- package/dist/profiles/loader.d.ts.map +0 -1
- package/dist/profiles/loader.js +0 -34
- package/dist/profiles/loader.js.map +0 -1
- package/dist/profiles/resolver.d.ts +0 -11
- package/dist/profiles/resolver.d.ts.map +0 -1
- package/dist/profiles/resolver.js +0 -252
- package/dist/profiles/resolver.js.map +0 -1
- package/dist/profiles/scope-selector.d.ts +0 -19
- package/dist/profiles/scope-selector.d.ts.map +0 -1
- package/dist/profiles/scope-selector.js +0 -64
- package/dist/profiles/scope-selector.js.map +0 -1
- package/dist/profiles/types.d.ts +0 -462
- package/dist/profiles/types.d.ts.map +0 -1
- package/dist/profiles/types.js +0 -68
- package/dist/profiles/types.js.map +0 -1
- package/dist/runtime/index.d.ts +0 -2
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js +0 -2
- package/dist/runtime/index.js.map +0 -1
- package/dist/runtime/runtime.d.ts +0 -46
- package/dist/runtime/runtime.d.ts.map +0 -1
- package/dist/runtime/runtime.js +0 -126
- package/dist/runtime/runtime.js.map +0 -1
- package/dist/types/index.d.ts +0 -2
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/types/init.d.ts +0 -33
- package/dist/types/init.d.ts.map +0 -1
- package/dist/types/init.js +0 -6
- package/dist/types/init.js.map +0 -1
- package/dist/types/preset.d.ts +0 -27
- package/dist/types/preset.d.ts.map +0 -1
- package/dist/types/preset.js +0 -6
- package/dist/types/preset.js.map +0 -1
- package/dist/types/types.d.ts +0 -70
- package/dist/types/types.d.ts.map +0 -1
- package/dist/types/types.js +0 -2
- package/dist/types/types.js.map +0 -1
- package/dist/utils/__tests__/env.spec.d.ts +0 -2
- package/dist/utils/__tests__/env.spec.d.ts.map +0 -1
- package/dist/utils/__tests__/env.spec.js +0 -33
- package/dist/utils/__tests__/env.spec.js.map +0 -1
- package/dist/utils/env.d.ts +0 -7
- package/dist/utils/env.d.ts.map +0 -1
- package/dist/utils/env.js +0 -25
- package/dist/utils/env.js.map +0 -1
- package/dist/utils/fs-atomic.d.ts +0 -15
- package/dist/utils/fs-atomic.d.ts.map +0 -1
- package/dist/utils/fs-atomic.js +0 -46
- package/dist/utils/fs-atomic.js.map +0 -1
- package/dist/utils/index.d.ts +0 -3
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -3
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/paths.d.ts +0 -21
- package/dist/utils/paths.d.ts.map +0 -1
- package/dist/utils/paths.js +0 -32
- package/dist/utils/paths.js.map +0 -1
- package/dist/utils/product-normalize.d.ts +0 -25
- package/dist/utils/product-normalize.d.ts.map +0 -1
- package/dist/utils/product-normalize.js +0 -48
- package/dist/utils/product-normalize.js.map +0 -1
- package/dist/validation/validate-config.d.ts +0 -10
- package/dist/validation/validate-config.d.ts.map +0 -1
- package/dist/validation/validate-config.js +0 -21
- package/dist/validation/validate-config.js.map +0 -1
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module @kb-labs/core/config/api/product-config
|
|
3
|
-
* High-level product configuration resolver with layered merge
|
|
4
|
-
*/
|
|
5
|
-
import { promises as fsp } from 'node:fs';
|
|
6
|
-
import path from 'node:path';
|
|
7
|
-
// Note: KbError and ERROR_HINTS are available if needed for future error handling
|
|
8
|
-
import { readWorkspaceConfig } from './read-config';
|
|
9
|
-
import { layeredMergeWithTrace } from '../merge/layered-merge';
|
|
10
|
-
import { toFsProduct } from '../utils/product-normalize';
|
|
11
|
-
import { computeConfigHash } from '../hash/config-hash';
|
|
12
|
-
import { resolvePreset, getPresetConfigForProduct } from '../preset/resolve-preset';
|
|
13
|
-
import { updateLockfile } from '../lockfile/lockfile';
|
|
14
|
-
/**
|
|
15
|
-
* Get product configuration with layered merge and trace
|
|
16
|
-
*/
|
|
17
|
-
export async function getProductConfig(opts, schema) {
|
|
18
|
-
const { cwd, product, cli = {}, writeFinal = false, profileLayer } = opts;
|
|
19
|
-
const fsProduct = toFsProduct(product);
|
|
20
|
-
// Read workspace configuration
|
|
21
|
-
const workspaceConfig = await readWorkspaceConfig(cwd);
|
|
22
|
-
// Build configuration layers
|
|
23
|
-
const layers = [];
|
|
24
|
-
// 1. Runtime defaults
|
|
25
|
-
layers.push({
|
|
26
|
-
label: 'runtime',
|
|
27
|
-
value: getRuntimeDefaults(product),
|
|
28
|
-
source: 'runtime:defaults',
|
|
29
|
-
});
|
|
30
|
-
// 2. Profile defaults
|
|
31
|
-
if (profileLayer && profileLayer.products) {
|
|
32
|
-
// profileLayer.products is already the product-specific overlay (not a map of products)
|
|
33
|
-
const profileOverlay = profileLayer.products;
|
|
34
|
-
layers.push({
|
|
35
|
-
label: 'profile',
|
|
36
|
-
value: profileOverlay,
|
|
37
|
-
source: profileLayer.source,
|
|
38
|
-
});
|
|
39
|
-
if (profileLayer.scope && profileLayer.scope.products) {
|
|
40
|
-
// profileLayer.scope.products is already the scope-specific overlay
|
|
41
|
-
const scopeOverlay = profileLayer.scope.products;
|
|
42
|
-
layers.push({
|
|
43
|
-
label: 'profile-scope',
|
|
44
|
-
value: scopeOverlay,
|
|
45
|
-
source: profileLayer.scope.source,
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
layers.push({
|
|
51
|
-
label: 'profile',
|
|
52
|
-
value: {},
|
|
53
|
-
source: 'profile:none',
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
// 3. Preset defaults (resolve org preset if configured)
|
|
57
|
-
let presetConfig = {};
|
|
58
|
-
if (workspaceConfig?.data) {
|
|
59
|
-
const workspaceData = workspaceConfig.data;
|
|
60
|
-
if (workspaceData.$extends) {
|
|
61
|
-
try {
|
|
62
|
-
const preset = await resolvePreset(workspaceData.$extends, cwd);
|
|
63
|
-
presetConfig = getPresetConfigForProduct(preset, product);
|
|
64
|
-
layers.push({
|
|
65
|
-
label: 'preset',
|
|
66
|
-
value: presetConfig,
|
|
67
|
-
source: `preset:${workspaceData.$extends}`,
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
// Preset resolution failed, continue without preset
|
|
72
|
-
console.warn(`Warning: Could not resolve preset ${workspaceData.$extends}:`, error);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
if (Object.keys(presetConfig).length === 0) {
|
|
77
|
-
layers.push({
|
|
78
|
-
label: 'preset',
|
|
79
|
-
value: {},
|
|
80
|
-
source: 'preset:none',
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
// 4. Workspace config
|
|
84
|
-
if (workspaceConfig?.data) {
|
|
85
|
-
const workspaceData = workspaceConfig.data?.products?.[fsProduct] || {};
|
|
86
|
-
layers.push({
|
|
87
|
-
label: 'workspace',
|
|
88
|
-
value: workspaceData,
|
|
89
|
-
source: 'workspace:kb-labs.config',
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
// 5. Local config (.kb/<product>/<product>.config.json)
|
|
93
|
-
const localConfigPath = path.join(cwd, '.kb', fsProduct, `${fsProduct}.config.json`);
|
|
94
|
-
try {
|
|
95
|
-
const localConfig = await fsp.readFile(localConfigPath, 'utf-8');
|
|
96
|
-
const localData = JSON.parse(localConfig);
|
|
97
|
-
layers.push({
|
|
98
|
-
label: 'local',
|
|
99
|
-
value: localData,
|
|
100
|
-
source: `local:.kb/${fsProduct}/${fsProduct}.config.json`,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
catch {
|
|
104
|
-
// Local config is optional
|
|
105
|
-
}
|
|
106
|
-
// 6. CLI overrides
|
|
107
|
-
if (Object.keys(cli).length > 0) {
|
|
108
|
-
layers.push({
|
|
109
|
-
label: 'cli',
|
|
110
|
-
value: cli,
|
|
111
|
-
source: 'cli:overrides',
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
// Merge all layers
|
|
115
|
-
const { merged, trace } = layeredMergeWithTrace(layers);
|
|
116
|
-
// Validate against schema if provided
|
|
117
|
-
if (schema) {
|
|
118
|
-
// Schema validation will be implemented with AJV
|
|
119
|
-
// For now, we'll skip validation
|
|
120
|
-
}
|
|
121
|
-
// Write final config if requested
|
|
122
|
-
if (writeFinal) {
|
|
123
|
-
await writeFinalConfig(cwd, fsProduct, merged);
|
|
124
|
-
}
|
|
125
|
-
// Update lockfile with config hash
|
|
126
|
-
try {
|
|
127
|
-
const configHash = computeConfigHash(merged);
|
|
128
|
-
const configHashes = {};
|
|
129
|
-
configHashes[product] = configHash;
|
|
130
|
-
await updateLockfile(cwd, {
|
|
131
|
-
configHashes
|
|
132
|
-
});
|
|
133
|
-
}
|
|
134
|
-
catch (error) {
|
|
135
|
-
// Lockfile update is optional, don't fail the config resolution
|
|
136
|
-
console.warn('Warning: Could not update lockfile:', error);
|
|
137
|
-
}
|
|
138
|
-
return {
|
|
139
|
-
config: merged,
|
|
140
|
-
trace,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
/**
|
|
144
|
-
* Explain product configuration (trace only)
|
|
145
|
-
*/
|
|
146
|
-
export async function explainProductConfig(opts, schema) {
|
|
147
|
-
const result = await getProductConfig(opts, schema);
|
|
148
|
-
return { trace: result.trace };
|
|
149
|
-
}
|
|
150
|
-
/**
|
|
151
|
-
* Get runtime defaults for a product
|
|
152
|
-
*/
|
|
153
|
-
function getRuntimeDefaults(product) {
|
|
154
|
-
const defaults = {
|
|
155
|
-
devlink: {
|
|
156
|
-
watch: true,
|
|
157
|
-
build: true,
|
|
158
|
-
},
|
|
159
|
-
release: {
|
|
160
|
-
registry: 'https://registry.npmjs.org',
|
|
161
|
-
strategy: 'semver',
|
|
162
|
-
bump: 'auto',
|
|
163
|
-
strict: true,
|
|
164
|
-
verify: ['audit', 'build', 'tests'],
|
|
165
|
-
publish: { npm: true, github: false },
|
|
166
|
-
rollback: { enabled: true, maxHistory: 5 },
|
|
167
|
-
output: { json: true, md: true, text: true },
|
|
168
|
-
changelog: {
|
|
169
|
-
enabled: true,
|
|
170
|
-
includeTypes: ['feat', 'fix', 'perf', 'refactor', 'revert'],
|
|
171
|
-
excludeTypes: ['chore', 'ci'],
|
|
172
|
-
ignoreAuthors: ['dependabot', 'renovate', 'github-actions[bot]', '*[bot]'],
|
|
173
|
-
collapseMerges: true,
|
|
174
|
-
collapseReverts: true,
|
|
175
|
-
preferMergeSummary: true,
|
|
176
|
-
bumpStrategy: 'independent',
|
|
177
|
-
workspace: true,
|
|
178
|
-
perPackage: true,
|
|
179
|
-
format: 'both',
|
|
180
|
-
level: 'standard',
|
|
181
|
-
locale: 'en',
|
|
182
|
-
cache: true,
|
|
183
|
-
requireAudit: true,
|
|
184
|
-
requireSignedTags: false,
|
|
185
|
-
redactPatterns: ['(?i)token=\\w+', '(?i)apikey=\\w+', '(https?://[^\\s]+@[^\\s]+)', '(gh[ps]_[A-Za-z0-9_]+)'],
|
|
186
|
-
maxBodyLength: 500,
|
|
187
|
-
ignoreSubmodules: true,
|
|
188
|
-
},
|
|
189
|
-
git: {
|
|
190
|
-
provider: 'auto',
|
|
191
|
-
autoUnshallow: false,
|
|
192
|
-
},
|
|
193
|
-
},
|
|
194
|
-
aiReview: {
|
|
195
|
-
enabled: true,
|
|
196
|
-
rules: [],
|
|
197
|
-
},
|
|
198
|
-
aiDocs: {
|
|
199
|
-
enabled: true,
|
|
200
|
-
templates: [],
|
|
201
|
-
},
|
|
202
|
-
devkit: {
|
|
203
|
-
sync: true,
|
|
204
|
-
check: true,
|
|
205
|
-
},
|
|
206
|
-
analytics: {
|
|
207
|
-
enabled: true,
|
|
208
|
-
sinks: [],
|
|
209
|
-
buffer: {},
|
|
210
|
-
},
|
|
211
|
-
};
|
|
212
|
-
return defaults[product] || {};
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Write final configuration to .kb/<product>/<product>.config.json
|
|
216
|
-
*/
|
|
217
|
-
async function writeFinalConfig(cwd, fsProduct, config) {
|
|
218
|
-
const configDir = path.join(cwd, '.kb', fsProduct);
|
|
219
|
-
const configPath = path.join(configDir, `${fsProduct}.config.json`);
|
|
220
|
-
// Ensure directory exists
|
|
221
|
-
await fsp.mkdir(configDir, { recursive: true });
|
|
222
|
-
// Write config with schema version
|
|
223
|
-
const finalConfig = {
|
|
224
|
-
$schema: 'https://schemas.kb-labs.dev/config.schema.json',
|
|
225
|
-
schemaVersion: '1.0',
|
|
226
|
-
...config,
|
|
227
|
-
};
|
|
228
|
-
await fsp.writeFile(configPath, JSON.stringify(finalConfig, null, 2));
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* Get configuration hash for lockfile
|
|
232
|
-
*/
|
|
233
|
-
export function getConfigHash(config) {
|
|
234
|
-
return computeConfigHash(config);
|
|
235
|
-
}
|
|
236
|
-
//# sourceMappingURL=product-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"product-config.js","sourceRoot":"","sources":["../../src/api/product-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module @kb-labs/core/config/api/read-config
|
|
3
|
-
* Enhanced config file reading with YAML support and find-up
|
|
4
|
-
*/
|
|
5
|
-
export interface ConfigFileResult {
|
|
6
|
-
data: unknown;
|
|
7
|
-
format: 'json' | 'yaml';
|
|
8
|
-
path: string;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Read config file with format detection and caching
|
|
12
|
-
*/
|
|
13
|
-
export declare function readConfigFile(filePath: string): Promise<ConfigFileResult>;
|
|
14
|
-
/**
|
|
15
|
-
* Find git root directory
|
|
16
|
-
*/
|
|
17
|
-
export declare function findGitRoot(startDir: string): Promise<string | null>;
|
|
18
|
-
/**
|
|
19
|
-
* Read workspace config with find-up to git root
|
|
20
|
-
*/
|
|
21
|
-
export declare function readWorkspaceConfig(cwd: string): Promise<ConfigFileResult | null>;
|
|
22
|
-
//# sourceMappingURL=read-config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-config.d.ts","sourceRoot":"","sources":["../../src/api/read-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+ChF;AA8CD;;GAEG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiB1E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAQvF"}
|
package/dist/api/read-config.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module @kb-labs/core/config/api/read-config
|
|
3
|
-
* Enhanced config file reading with YAML support and find-up
|
|
4
|
-
*/
|
|
5
|
-
import { promises as fsp } from 'node:fs';
|
|
6
|
-
import path from 'node:path';
|
|
7
|
-
import { extname } from 'node:path';
|
|
8
|
-
import YAML from 'yaml';
|
|
9
|
-
import { KbError, ERROR_HINTS } from '../errors/kb-error';
|
|
10
|
-
import { fsCache } from '../cache/fs-cache';
|
|
11
|
-
/**
|
|
12
|
-
* Read config file with format detection and caching
|
|
13
|
-
*/
|
|
14
|
-
export async function readConfigFile(filePath) {
|
|
15
|
-
const absPath = path.resolve(filePath);
|
|
16
|
-
// Check cache first
|
|
17
|
-
const cached = await fsCache.get(absPath);
|
|
18
|
-
if (cached !== null) {
|
|
19
|
-
return cached;
|
|
20
|
-
}
|
|
21
|
-
try {
|
|
22
|
-
const raw = await fsp.readFile(absPath, 'utf-8');
|
|
23
|
-
const ext = extname(absPath).toLowerCase();
|
|
24
|
-
let data;
|
|
25
|
-
let format;
|
|
26
|
-
if (ext === '.yaml' || ext === '.yml') {
|
|
27
|
-
data = YAML.parse(raw);
|
|
28
|
-
format = 'yaml';
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
data = JSON.parse(raw);
|
|
32
|
-
format = 'json';
|
|
33
|
-
}
|
|
34
|
-
const result = { data, format, path: absPath };
|
|
35
|
-
// Cache the result
|
|
36
|
-
await fsCache.set(absPath, result);
|
|
37
|
-
return result;
|
|
38
|
-
}
|
|
39
|
-
catch (error) {
|
|
40
|
-
if (error instanceof SyntaxError) {
|
|
41
|
-
throw new KbError('ERR_CONFIG_INVALID', `Failed to parse config file: ${filePath}`, ERROR_HINTS.ERR_CONFIG_INVALID, { filePath, error: error.message });
|
|
42
|
-
}
|
|
43
|
-
throw new KbError('ERR_CONFIG_NOT_FOUND', `Config file not found: ${filePath}`, ERROR_HINTS.ERR_CONFIG_NOT_FOUND, { filePath, error: error instanceof Error ? error.message : String(error) });
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Find nearest config file walking up from startDir to git root
|
|
48
|
-
* Prioritizes .kb/kb-labs.config.* over kb-labs.config.* for backward compatibility
|
|
49
|
-
*/
|
|
50
|
-
async function findNearestConfig(startDir, filenames = []) {
|
|
51
|
-
const start = path.resolve(startDir);
|
|
52
|
-
const tried = [];
|
|
53
|
-
let dir = start;
|
|
54
|
-
// Default filenames if not provided: prioritize .kb/ location
|
|
55
|
-
const defaultFilenames = [
|
|
56
|
-
'.kb/kb.config.yaml',
|
|
57
|
-
'.kb/kb.config.yml',
|
|
58
|
-
'.kb/kb.config.json',
|
|
59
|
-
];
|
|
60
|
-
const searchFilenames = filenames.length > 0 ? filenames : defaultFilenames;
|
|
61
|
-
while (true) {
|
|
62
|
-
for (const filename of searchFilenames) {
|
|
63
|
-
const candidate = path.join(dir, filename);
|
|
64
|
-
tried.push(candidate);
|
|
65
|
-
try {
|
|
66
|
-
await fsp.access(candidate);
|
|
67
|
-
return { path: candidate, tried };
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
// Continue to next filename
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
const parent = path.dirname(dir);
|
|
74
|
-
if (parent === dir) {
|
|
75
|
-
// Reached filesystem root
|
|
76
|
-
break;
|
|
77
|
-
}
|
|
78
|
-
dir = parent;
|
|
79
|
-
}
|
|
80
|
-
return { path: null, tried };
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Find git root directory
|
|
84
|
-
*/
|
|
85
|
-
export async function findGitRoot(startDir) {
|
|
86
|
-
let dir = path.resolve(startDir);
|
|
87
|
-
while (true) {
|
|
88
|
-
try {
|
|
89
|
-
await fsp.access(path.join(dir, '.git'));
|
|
90
|
-
return dir;
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
const parent = path.dirname(dir);
|
|
94
|
-
if (parent === dir) {
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
dir = parent;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Read workspace config with find-up to git root
|
|
104
|
-
*/
|
|
105
|
-
export async function readWorkspaceConfig(cwd) {
|
|
106
|
-
const { path: configPath } = await findNearestConfig(cwd);
|
|
107
|
-
if (!configPath) {
|
|
108
|
-
return null;
|
|
109
|
-
}
|
|
110
|
-
return readConfigFile(configPath);
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=read-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-config.js","sourceRoot":"","sources":["../../src/api/read-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module @kb-labs/core-config/api/read-kb-config
|
|
3
|
-
* Find + read kb.config.* files (product-level workspace config).
|
|
4
|
-
*/
|
|
5
|
-
import { type ConfigFileResult } from './read-config';
|
|
6
|
-
export type KbConfigResult = ConfigFileResult;
|
|
7
|
-
export declare function findKbConfig(cwd: string, filenames?: string[]): Promise<{
|
|
8
|
-
path: string | null;
|
|
9
|
-
tried: string[];
|
|
10
|
-
}>;
|
|
11
|
-
export declare function readKbConfig(cwd: string): Promise<KbConfigResult | null>;
|
|
12
|
-
//# sourceMappingURL=read-kb-config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-kb-config.d.ts","sourceRoot":"","sources":["../../src/api/read-kb-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAA+B,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAWnF,MAAM,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAE9C,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,MAAM,EAAwB,GACxC,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA0BnD;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAM9E"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module @kb-labs/core-config/api/read-kb-config
|
|
3
|
-
* Find + read kb.config.* files (product-level workspace config).
|
|
4
|
-
*/
|
|
5
|
-
import path from 'node:path';
|
|
6
|
-
import { promises as fsp } from 'node:fs';
|
|
7
|
-
import { findGitRoot, readConfigFile } from './read-config';
|
|
8
|
-
const KB_CONFIG_FILENAMES = [
|
|
9
|
-
'kb.config.json',
|
|
10
|
-
'kb.config.yaml',
|
|
11
|
-
'kb.config.yml',
|
|
12
|
-
'.kb/kb.config.json',
|
|
13
|
-
'.kb/kb.config.yaml',
|
|
14
|
-
'.kb/kb.config.yml',
|
|
15
|
-
];
|
|
16
|
-
export async function findKbConfig(cwd, filenames = KB_CONFIG_FILENAMES) {
|
|
17
|
-
const tried = [];
|
|
18
|
-
const gitRoot = await findGitRoot(cwd);
|
|
19
|
-
const stopDir = gitRoot || path.parse(cwd).root;
|
|
20
|
-
let dir = path.resolve(cwd);
|
|
21
|
-
while (true) {
|
|
22
|
-
for (const filename of filenames) {
|
|
23
|
-
const candidate = path.join(dir, filename);
|
|
24
|
-
tried.push(candidate);
|
|
25
|
-
try {
|
|
26
|
-
await fsp.access(candidate);
|
|
27
|
-
return { path: candidate, tried };
|
|
28
|
-
}
|
|
29
|
-
catch {
|
|
30
|
-
// continue
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
if (dir === stopDir || dir === path.dirname(dir)) {
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
dir = path.dirname(dir);
|
|
37
|
-
}
|
|
38
|
-
return { path: null, tried };
|
|
39
|
-
}
|
|
40
|
-
export async function readKbConfig(cwd) {
|
|
41
|
-
const { path } = await findKbConfig(cwd);
|
|
42
|
-
if (!path) {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
return readConfigFile(path);
|
|
46
|
-
}
|
|
47
|
-
//# sourceMappingURL=read-kb-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"read-kb-config.js","sourceRoot":"","sources":["../../src/api/read-kb-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,cAAc,EAAyB,MAAM,eAAe,CAAC;AAEnF,MAAM,mBAAmB,GAAG;IAC1B,gBAAgB;IAChB,gBAAgB;IAChB,eAAe;IACf,oBAAoB;IACpB,oBAAoB;IACpB,mBAAmB;CACpB,CAAC;AAIF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAW,EACX,YAAsB,mBAAmB;IAEzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;IAChD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,IAAI,EAAE,CAAC;QACZ,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAC5B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,WAAW;YACb,CAAC;QACH,CAAC;QAED,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM;QACR,CAAC;QAED,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module @kb-labs/core/config/api/upsert-lockfile
|
|
3
|
-
* Upsert lockfile operations
|
|
4
|
-
*/
|
|
5
|
-
import type { UpsertLockfileOptions, InitResult } from '../types/init';
|
|
6
|
-
/**
|
|
7
|
-
* Upsert lockfile with new references
|
|
8
|
-
*/
|
|
9
|
-
export declare function upsertLockfile(opts: UpsertLockfileOptions): Promise<InitResult>;
|
|
10
|
-
//# sourceMappingURL=upsert-lockfile.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upsert-lockfile.d.ts","sourceRoot":"","sources":["../../src/api/upsert-lockfile.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEvE;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,UAAU,CAAC,CAyDrB"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module @kb-labs/core/config/api/upsert-lockfile
|
|
3
|
-
* Upsert lockfile operations
|
|
4
|
-
*/
|
|
5
|
-
import path from 'node:path';
|
|
6
|
-
import { promises as fs } from 'node:fs';
|
|
7
|
-
import { readLockfile, writeLockfile } from '../lockfile/lockfile';
|
|
8
|
-
import { ensureWithinWorkspace } from '../utils/fs-atomic';
|
|
9
|
-
/**
|
|
10
|
-
* Upsert lockfile with new references
|
|
11
|
-
*/
|
|
12
|
-
export async function upsertLockfile(opts) {
|
|
13
|
-
const cwd = path.resolve(opts.cwd);
|
|
14
|
-
const lockfilePath = path.join(cwd, '.kb', 'lock.json');
|
|
15
|
-
const oldLockfilePath = path.join(cwd, '.kb', 'lockfile.json');
|
|
16
|
-
const result = {
|
|
17
|
-
actions: [],
|
|
18
|
-
created: [],
|
|
19
|
-
updated: [],
|
|
20
|
-
skipped: [],
|
|
21
|
-
warnings: [],
|
|
22
|
-
};
|
|
23
|
-
// Ensure we're writing within workspace
|
|
24
|
-
ensureWithinWorkspace(lockfilePath, cwd);
|
|
25
|
-
// Check for deprecated lockfile location
|
|
26
|
-
try {
|
|
27
|
-
await fs.access(oldLockfilePath);
|
|
28
|
-
result.warnings.push('Deprecated lockfile found at .kb/lockfile.json, please migrate to .kb/lock.json');
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
// No old lockfile, that's fine
|
|
32
|
-
}
|
|
33
|
-
// Read existing lockfile
|
|
34
|
-
const existing = await readLockfile(cwd);
|
|
35
|
-
// Build lockfile data
|
|
36
|
-
const lockfileData = {
|
|
37
|
-
$schema: 'https://schemas.kb-labs.dev/lockfile.schema.json',
|
|
38
|
-
schemaVersion: '1.0',
|
|
39
|
-
orgPreset: opts.presetRef !== undefined ? opts.presetRef || undefined : existing?.orgPreset,
|
|
40
|
-
profile: opts.profileRef !== undefined ? opts.profileRef || undefined : existing?.profile,
|
|
41
|
-
policyBundle: opts.policyBundle !== undefined ? opts.policyBundle || undefined : existing?.policyBundle,
|
|
42
|
-
hashes: existing?.hashes || {},
|
|
43
|
-
generatedAt: new Date().toISOString(),
|
|
44
|
-
};
|
|
45
|
-
if (!existing) {
|
|
46
|
-
// Creating new lockfile
|
|
47
|
-
if (!opts.dryRun) {
|
|
48
|
-
await writeLockfile(cwd, lockfileData);
|
|
49
|
-
}
|
|
50
|
-
result.actions.push({ kind: 'write', path: lockfilePath });
|
|
51
|
-
result.created.push(lockfilePath);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
// Updating existing lockfile
|
|
55
|
-
if (!opts.dryRun) {
|
|
56
|
-
await writeLockfile(cwd, lockfileData);
|
|
57
|
-
}
|
|
58
|
-
result.actions.push({ kind: 'update', path: lockfilePath });
|
|
59
|
-
result.updated.push(lockfilePath);
|
|
60
|
-
}
|
|
61
|
-
return result;
|
|
62
|
-
}
|
|
63
|
-
//# sourceMappingURL=upsert-lockfile.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upsert-lockfile.js","sourceRoot":"","sources":["../../src/api/upsert-lockfile.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAqB,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAG3D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAA2B;IAE3B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACxD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAe;QACzB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,wCAAwC;IACxC,qBAAqB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAEzC,yCAAyC;IACzC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACjC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClB,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,yBAAyB;IACzB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;IAEzC,sBAAsB;IACtB,MAAM,YAAY,GAAiB;QACjC,OAAO,EAAE,kDAAkD;QAC3D,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS;QAC3F,OAAO,EAAE,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,OAAO;QACzF,YAAY,EAAE,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,YAAY;QACvG,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE;QAC9B,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,wBAAwB;QACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,aAAa,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,6BAA6B;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,aAAa,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/cache/fs-cache.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module @kb-labs/core/config/cache/fs-cache
|
|
3
|
-
* LRU cache for filesystem reads with clearCaches() support
|
|
4
|
-
*/
|
|
5
|
-
declare class FSCache {
|
|
6
|
-
private cache;
|
|
7
|
-
private keyCache;
|
|
8
|
-
/**
|
|
9
|
-
* Generate cache key from file path, mtime, and size
|
|
10
|
-
*/
|
|
11
|
-
private getCacheKey;
|
|
12
|
-
/**
|
|
13
|
-
* Get cached file data if available and not stale
|
|
14
|
-
*/
|
|
15
|
-
get(absPath: string): Promise<any | null>;
|
|
16
|
-
/**
|
|
17
|
-
* Cache file data
|
|
18
|
-
*/
|
|
19
|
-
set(absPath: string, data: any): Promise<void>;
|
|
20
|
-
/**
|
|
21
|
-
* Clear all caches
|
|
22
|
-
*/
|
|
23
|
-
clearCaches(): void;
|
|
24
|
-
/**
|
|
25
|
-
* Get cache statistics
|
|
26
|
-
*/
|
|
27
|
-
getStats(): {
|
|
28
|
-
size: number;
|
|
29
|
-
keySize: number;
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
declare const fsCache: FSCache;
|
|
33
|
-
export { fsCache, FSCache };
|
|
34
|
-
/**
|
|
35
|
-
* Clear all filesystem caches
|
|
36
|
-
*/
|
|
37
|
-
export declare function clearCaches(): void;
|
|
38
|
-
//# sourceMappingURL=fs-cache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fs-cache.d.ts","sourceRoot":"","sources":["../../src/cache/fs-cache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6DH,cAAM,OAAO;IACX,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,QAAQ,CAAuC;IAEvD;;OAEG;YACW,WAAW;IAsBzB;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAiC/C;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpD;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB;;OAEG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAM9C;AAGD,QAAA,MAAM,OAAO,SAAgB,CAAC;AAE9B,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAE5B;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
|