@kb-labs/devkit 1.0.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/.cursorrules +32 -0
- package/.github/CODEOWNERS +2 -0
- package/.github/actions/setup-node-pnpm/action.yml +47 -0
- package/.github/workflow-templates/ci.yml +13 -0
- package/.github/workflow-templates/drift-check.yml +10 -0
- package/.github/workflow-templates/profiles-validate.yml +16 -0
- package/.github/workflow-templates/release.yml +8 -0
- package/.github/workflows/ci-reusable.yml +131 -0
- package/.github/workflows/drift-check-reusable.yml +23 -0
- package/.github/workflows/fixtures.yml +74 -0
- package/.github/workflows/profiles-validate-reusable.yml +67 -0
- package/.github/workflows/release-reusable.yml +50 -0
- package/.vscode/settings.json +23 -0
- package/AGENTS.md +130 -0
- package/LICENSE +21 -0
- package/README.md +1542 -0
- package/agents/devkit-maintainer/context.globs +15 -0
- package/agents/devkit-maintainer/permissions.yml +17 -0
- package/agents/devkit-maintainer/prompt.md +28 -0
- package/agents/devkit-maintainer/runbook.md +31 -0
- package/agents/docs-crafter/prompt.md +24 -0
- package/agents/docs-crafter/runbook.md +18 -0
- package/agents/release-manager/context.globs +7 -0
- package/agents/release-manager/prompt.md +27 -0
- package/agents/release-manager/runbook.md +17 -0
- package/agents/test-generator/context.globs +7 -0
- package/agents/test-generator/prompt.md +27 -0
- package/agents/test-generator/runbook.md +18 -0
- package/bin/devkit-architecture.mjs +1225 -0
- package/bin/devkit-build-order.mjs +500 -0
- package/bin/devkit-check-build-readiness.mjs +222 -0
- package/bin/devkit-check-commands.mjs +394 -0
- package/bin/devkit-check-configs.mjs +461 -0
- package/bin/devkit-check-deprecated.mjs +532 -0
- package/bin/devkit-check-duplicates.mjs +431 -0
- package/bin/devkit-check-exports.mjs +561 -0
- package/bin/devkit-check-imports.mjs +712 -0
- package/bin/devkit-check-paths.mjs +670 -0
- package/bin/devkit-check-scripts.mjs +335 -0
- package/bin/devkit-check-structure.mjs +495 -0
- package/bin/devkit-check-types.mjs +450 -0
- package/bin/devkit-ci.mjs +261 -0
- package/bin/devkit-core-gate.mjs +225 -0
- package/bin/devkit-fix-deps.mjs +1169 -0
- package/bin/devkit-freshness.mjs +199 -0
- package/bin/devkit-health.mjs +489 -0
- package/bin/devkit-migrate-configs.mjs +370 -0
- package/bin/devkit-paths.mjs +192 -0
- package/bin/devkit-stats.mjs +453 -0
- package/bin/devkit-sync.mjs +12 -0
- package/bin/devkit-tsup-external.mjs +148 -0
- package/bin/devkit-types-audit.mjs +615 -0
- package/bin/devkit-types-order.mjs +637 -0
- package/bin/devkit-validate-naming.mjs +203 -0
- package/bin/devkit-visualize.mjs +452 -0
- package/bin/kb-devkit-qa-history.mjs +453 -0
- package/bin/kb-devkit-qa.mjs +915 -0
- package/eslint/node.js +134 -0
- package/eslint/react.js +260 -0
- package/package.json +186 -0
- package/prettier/index.json +10 -0
- package/sync/index.mjs +693 -0
- package/templates/configs/README.md +306 -0
- package/templates/configs/eslint.config.js +27 -0
- package/templates/configs/package.json.bin +25 -0
- package/templates/configs/package.json.lib +30 -0
- package/templates/configs/tsconfig.build.json +15 -0
- package/templates/configs/tsconfig.json +9 -0
- package/templates/configs/tsup.config.bin.ts +34 -0
- package/templates/configs/tsup.config.cli.ts +41 -0
- package/templates/configs/tsup.config.dual.ts +46 -0
- package/templates/configs/tsup.config.ts +36 -0
- package/templates/package-json/README.md +290 -0
- package/templates/package-json/package.json.bin.template +40 -0
- package/templates/package-json/package.json.template +45 -0
- package/tsconfig/base.json +21 -0
- package/tsconfig/cli.json +12 -0
- package/tsconfig/dist/__tests__/cache.spec.d.ts +6 -0
- package/tsconfig/dist/__tests__/cache.spec.d.ts.map +1 -0
- package/tsconfig/dist/__tests__/cache.spec.js +85 -0
- package/tsconfig/dist/__tests__/cache.spec.js.map +1 -0
- package/tsconfig/dist/__tests__/fs-atomic.spec.d.ts +6 -0
- package/tsconfig/dist/__tests__/fs-atomic.spec.d.ts.map +1 -0
- package/tsconfig/dist/__tests__/fs-atomic.spec.js +153 -0
- package/tsconfig/dist/__tests__/fs-atomic.spec.js.map +1 -0
- package/tsconfig/dist/__tests__/init-workspace.spec.d.ts +6 -0
- package/tsconfig/dist/__tests__/init-workspace.spec.d.ts.map +1 -0
- package/tsconfig/dist/__tests__/init-workspace.spec.js +99 -0
- package/tsconfig/dist/__tests__/init-workspace.spec.js.map +1 -0
- package/tsconfig/dist/__tests__/kb-error.spec.d.ts +6 -0
- package/tsconfig/dist/__tests__/kb-error.spec.d.ts.map +1 -0
- package/tsconfig/dist/__tests__/kb-error.spec.js +190 -0
- package/tsconfig/dist/__tests__/kb-error.spec.js.map +1 -0
- package/tsconfig/dist/__tests__/preset-lockfile.spec.d.ts +6 -0
- package/tsconfig/dist/__tests__/preset-lockfile.spec.d.ts.map +1 -0
- package/tsconfig/dist/__tests__/preset-lockfile.spec.js +142 -0
- package/tsconfig/dist/__tests__/preset-lockfile.spec.js.map +1 -0
- package/tsconfig/dist/__tests__/product-config-profiles.spec.d.ts +6 -0
- package/tsconfig/dist/__tests__/product-config-profiles.spec.d.ts.map +1 -0
- package/tsconfig/dist/__tests__/product-config-profiles.spec.js +100 -0
- package/tsconfig/dist/__tests__/product-config-profiles.spec.js.map +1 -0
- package/tsconfig/dist/__tests__/product-config.spec.d.ts +6 -0
- package/tsconfig/dist/__tests__/product-config.spec.d.ts.map +1 -0
- package/tsconfig/dist/__tests__/product-config.spec.js +298 -0
- package/tsconfig/dist/__tests__/product-config.spec.js.map +1 -0
- package/tsconfig/dist/__tests__/runtime.spec.d.ts +2 -0
- package/tsconfig/dist/__tests__/runtime.spec.d.ts.map +1 -0
- package/tsconfig/dist/__tests__/runtime.spec.js +127 -0
- package/tsconfig/dist/__tests__/runtime.spec.js.map +1 -0
- package/tsconfig/dist/__tests__/upsert-lockfile.spec.d.ts +6 -0
- package/tsconfig/dist/__tests__/upsert-lockfile.spec.d.ts.map +1 -0
- package/tsconfig/dist/__tests__/upsert-lockfile.spec.js +251 -0
- package/tsconfig/dist/__tests__/upsert-lockfile.spec.js.map +1 -0
- package/tsconfig/dist/__tests__/validate-config.spec.d.ts +2 -0
- package/tsconfig/dist/__tests__/validate-config.spec.d.ts.map +1 -0
- package/tsconfig/dist/__tests__/validate-config.spec.js +14 -0
- package/tsconfig/dist/__tests__/validate-config.spec.js.map +1 -0
- package/tsconfig/dist/api/init-workspace.d.ts +10 -0
- package/tsconfig/dist/api/init-workspace.d.ts.map +1 -0
- package/tsconfig/dist/api/init-workspace.js +191 -0
- package/tsconfig/dist/api/init-workspace.js.map +1 -0
- package/tsconfig/dist/api/product-config.d.ts +21 -0
- package/tsconfig/dist/api/product-config.d.ts.map +1 -0
- package/tsconfig/dist/api/product-config.js +192 -0
- package/tsconfig/dist/api/product-config.js.map +1 -0
- package/tsconfig/dist/api/read-config.d.ts +22 -0
- package/tsconfig/dist/api/read-config.d.ts.map +1 -0
- package/tsconfig/dist/api/read-config.js +105 -0
- package/tsconfig/dist/api/read-config.js.map +1 -0
- package/tsconfig/dist/api/upsert-lockfile.d.ts +10 -0
- package/tsconfig/dist/api/upsert-lockfile.d.ts.map +1 -0
- package/tsconfig/dist/api/upsert-lockfile.js +63 -0
- package/tsconfig/dist/api/upsert-lockfile.js.map +1 -0
- package/tsconfig/dist/cache/fs-cache.d.ts +38 -0
- package/tsconfig/dist/cache/fs-cache.d.ts.map +1 -0
- package/tsconfig/dist/cache/fs-cache.js +142 -0
- package/tsconfig/dist/cache/fs-cache.js.map +1 -0
- package/tsconfig/dist/errors/kb-error.d.ts +32 -0
- package/tsconfig/dist/errors/kb-error.d.ts.map +1 -0
- package/tsconfig/dist/errors/kb-error.js +54 -0
- package/tsconfig/dist/errors/kb-error.js.map +1 -0
- package/tsconfig/dist/fs/__tests__/fs.spec.d.ts +2 -0
- package/tsconfig/dist/fs/__tests__/fs.spec.d.ts.map +1 -0
- package/tsconfig/dist/fs/__tests__/fs.spec.js +22 -0
- package/tsconfig/dist/fs/__tests__/fs.spec.js.map +1 -0
- package/tsconfig/dist/fs/fs.d.ts +6 -0
- package/tsconfig/dist/fs/fs.d.ts.map +1 -0
- package/tsconfig/dist/fs/fs.js +12 -0
- package/tsconfig/dist/fs/fs.js.map +1 -0
- package/tsconfig/dist/fs/index.d.ts +2 -0
- package/tsconfig/dist/fs/index.d.ts.map +1 -0
- package/tsconfig/dist/fs/index.js +2 -0
- package/tsconfig/dist/fs/index.js.map +1 -0
- package/tsconfig/dist/hash/config-hash.d.ts +17 -0
- package/tsconfig/dist/hash/config-hash.d.ts.map +1 -0
- package/tsconfig/dist/hash/config-hash.js +55 -0
- package/tsconfig/dist/hash/config-hash.js.map +1 -0
- package/tsconfig/dist/index.d.ts +5 -0
- package/tsconfig/dist/index.d.ts.map +1 -0
- package/tsconfig/dist/index.js +5 -0
- package/tsconfig/dist/index.js.map +1 -0
- package/tsconfig/dist/lockfile/lockfile.d.ts +54 -0
- package/tsconfig/dist/lockfile/lockfile.d.ts.map +1 -0
- package/tsconfig/dist/lockfile/lockfile.js +141 -0
- package/tsconfig/dist/lockfile/lockfile.js.map +1 -0
- package/tsconfig/dist/logging/__tests__/logger.spec.d.ts +2 -0
- package/tsconfig/dist/logging/__tests__/logger.spec.d.ts.map +1 -0
- package/tsconfig/dist/logging/__tests__/logger.spec.js +65 -0
- package/tsconfig/dist/logging/__tests__/logger.spec.js.map +1 -0
- package/tsconfig/dist/logging/__tests__/redaction.spec.d.ts +2 -0
- package/tsconfig/dist/logging/__tests__/redaction.spec.d.ts.map +1 -0
- package/tsconfig/dist/logging/__tests__/redaction.spec.js +34 -0
- package/tsconfig/dist/logging/__tests__/redaction.spec.js.map +1 -0
- package/tsconfig/dist/logging/__tests__/sinks-and-env.spec.d.ts +2 -0
- package/tsconfig/dist/logging/__tests__/sinks-and-env.spec.d.ts.map +1 -0
- package/tsconfig/dist/logging/__tests__/sinks-and-env.spec.js +90 -0
- package/tsconfig/dist/logging/__tests__/sinks-and-env.spec.js.map +1 -0
- package/tsconfig/dist/logging/index.d.ts +6 -0
- package/tsconfig/dist/logging/index.d.ts.map +1 -0
- package/tsconfig/dist/logging/index.js +6 -0
- package/tsconfig/dist/logging/index.js.map +1 -0
- package/tsconfig/dist/logging/logger.d.ts +9 -0
- package/tsconfig/dist/logging/logger.d.ts.map +1 -0
- package/tsconfig/dist/logging/logger.js +101 -0
- package/tsconfig/dist/logging/logger.js.map +1 -0
- package/tsconfig/dist/logging/redaction.d.ts +7 -0
- package/tsconfig/dist/logging/redaction.d.ts.map +1 -0
- package/tsconfig/dist/logging/redaction.js +23 -0
- package/tsconfig/dist/logging/redaction.js.map +1 -0
- package/tsconfig/dist/logging/sinks/json.d.ts +4 -0
- package/tsconfig/dist/logging/sinks/json.d.ts.map +1 -0
- package/tsconfig/dist/logging/sinks/json.js +23 -0
- package/tsconfig/dist/logging/sinks/json.js.map +1 -0
- package/tsconfig/dist/logging/sinks/stdout.d.ts +3 -0
- package/tsconfig/dist/logging/sinks/stdout.d.ts.map +1 -0
- package/tsconfig/dist/logging/sinks/stdout.js +24 -0
- package/tsconfig/dist/logging/sinks/stdout.js.map +1 -0
- package/tsconfig/dist/logging/types/index.d.ts +2 -0
- package/tsconfig/dist/logging/types/index.d.ts.map +1 -0
- package/tsconfig/dist/logging/types/index.js +2 -0
- package/tsconfig/dist/logging/types/index.js.map +1 -0
- package/tsconfig/dist/logging/types/types.d.ts +37 -0
- package/tsconfig/dist/logging/types/types.d.ts.map +1 -0
- package/tsconfig/dist/logging/types/types.js +2 -0
- package/tsconfig/dist/logging/types/types.js.map +1 -0
- package/tsconfig/dist/merge/layered-merge.d.ts +16 -0
- package/tsconfig/dist/merge/layered-merge.d.ts.map +1 -0
- package/tsconfig/dist/merge/layered-merge.js +97 -0
- package/tsconfig/dist/merge/layered-merge.js.map +1 -0
- package/tsconfig/dist/preset/resolve-preset.d.ts +29 -0
- package/tsconfig/dist/preset/resolve-preset.d.ts.map +1 -0
- package/tsconfig/dist/preset/resolve-preset.js +104 -0
- package/tsconfig/dist/preset/resolve-preset.js.map +1 -0
- package/tsconfig/dist/repo/__tests__/repo.spec.d.ts +2 -0
- package/tsconfig/dist/repo/__tests__/repo.spec.d.ts.map +1 -0
- package/tsconfig/dist/repo/__tests__/repo.spec.js +25 -0
- package/tsconfig/dist/repo/__tests__/repo.spec.js.map +1 -0
- package/tsconfig/dist/repo/index.d.ts +2 -0
- package/tsconfig/dist/repo/index.d.ts.map +1 -0
- package/tsconfig/dist/repo/index.js +2 -0
- package/tsconfig/dist/repo/index.js.map +1 -0
- package/tsconfig/dist/repo/repo.d.ts +6 -0
- package/tsconfig/dist/repo/repo.d.ts.map +1 -0
- package/tsconfig/dist/repo/repo.js +25 -0
- package/tsconfig/dist/repo/repo.js.map +1 -0
- package/tsconfig/dist/runtime/index.d.ts +2 -0
- package/tsconfig/dist/runtime/index.d.ts.map +1 -0
- package/tsconfig/dist/runtime/index.js +2 -0
- package/tsconfig/dist/runtime/index.js.map +1 -0
- package/tsconfig/dist/runtime/runtime.d.ts +46 -0
- package/tsconfig/dist/runtime/runtime.d.ts.map +1 -0
- package/tsconfig/dist/runtime/runtime.js +126 -0
- package/tsconfig/dist/runtime/runtime.js.map +1 -0
- package/tsconfig/dist/tsconfig.tools.tsbuildinfo +1 -0
- package/tsconfig/dist/tsconfig.tsbuildinfo +1 -0
- package/tsconfig/dist/types/index.d.ts +2 -0
- package/tsconfig/dist/types/index.d.ts.map +1 -0
- package/tsconfig/dist/types/index.js +2 -0
- package/tsconfig/dist/types/index.js.map +1 -0
- package/tsconfig/dist/types/init.d.ts +34 -0
- package/tsconfig/dist/types/init.d.ts.map +1 -0
- package/tsconfig/dist/types/init.js +6 -0
- package/tsconfig/dist/types/init.js.map +1 -0
- package/tsconfig/dist/types/preset.d.ts +27 -0
- package/tsconfig/dist/types/preset.d.ts.map +1 -0
- package/tsconfig/dist/types/preset.js +6 -0
- package/tsconfig/dist/types/preset.js.map +1 -0
- package/tsconfig/dist/types/types.d.ts +6 -0
- package/tsconfig/dist/types/types.d.ts.map +1 -0
- package/tsconfig/dist/types/types.js +2 -0
- package/tsconfig/dist/types/types.js.map +1 -0
- package/tsconfig/dist/utils/__tests__/env.spec.d.ts +2 -0
- package/tsconfig/dist/utils/__tests__/env.spec.d.ts.map +1 -0
- package/tsconfig/dist/utils/__tests__/env.spec.js +33 -0
- package/tsconfig/dist/utils/__tests__/env.spec.js.map +1 -0
- package/tsconfig/dist/utils/env.d.ts +7 -0
- package/tsconfig/dist/utils/env.d.ts.map +1 -0
- package/tsconfig/dist/utils/env.js +25 -0
- package/tsconfig/dist/utils/env.js.map +1 -0
- package/tsconfig/dist/utils/fs-atomic.d.ts +15 -0
- package/tsconfig/dist/utils/fs-atomic.d.ts.map +1 -0
- package/tsconfig/dist/utils/fs-atomic.js +45 -0
- package/tsconfig/dist/utils/fs-atomic.js.map +1 -0
- package/tsconfig/dist/utils/index.d.ts +3 -0
- package/tsconfig/dist/utils/index.d.ts.map +1 -0
- package/tsconfig/dist/utils/index.js +3 -0
- package/tsconfig/dist/utils/index.js.map +1 -0
- package/tsconfig/dist/utils/paths.d.ts +21 -0
- package/tsconfig/dist/utils/paths.d.ts.map +1 -0
- package/tsconfig/dist/utils/paths.js +32 -0
- package/tsconfig/dist/utils/paths.js.map +1 -0
- package/tsconfig/dist/utils/product-normalize.d.ts +27 -0
- package/tsconfig/dist/utils/product-normalize.d.ts.map +1 -0
- package/tsconfig/dist/utils/product-normalize.js +45 -0
- package/tsconfig/dist/utils/product-normalize.js.map +1 -0
- package/tsconfig/dist/validation/validate-config.d.ts +7 -0
- package/tsconfig/dist/validation/validate-config.d.ts.map +1 -0
- package/tsconfig/dist/validation/validate-config.js +22 -0
- package/tsconfig/dist/validation/validate-config.js.map +1 -0
- package/tsconfig/lib.json +13 -0
- package/tsconfig/node.json +12 -0
- package/tsconfig/react-app.json +8 -0
- package/tsconfig/react-lib.json +8 -0
- package/tsconfig/test.json +15 -0
- package/tsup/bin.js +172 -0
- package/tsup/dual.js +155 -0
- package/tsup/external-sync.mjs +41 -0
- package/tsup/external.mjs +109 -0
- package/tsup/node.js +65 -0
- package/tsup/react-lib.js +18 -0
- package/tsup/sdk.js +118 -0
- package/vite/react-app.js +50 -0
- package/vitest/node.js +37 -0
- package/vitest/react.js +39 -0
- package/vitest/vitest-setup.ts +9 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/core/config/preset/resolve-preset
|
|
3
|
+
* Org preset resolution with offline-first npm package loading
|
|
4
|
+
*/
|
|
5
|
+
import { promises as fsp } from 'node:fs';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { KbError, ERROR_HINTS } from '../errors/kb-error';
|
|
8
|
+
import { toFsProduct } from '../utils/product-normalize';
|
|
9
|
+
/**
|
|
10
|
+
* Resolve org preset package (offline-first)
|
|
11
|
+
*/
|
|
12
|
+
export async function resolvePreset(presetRef, cwd) {
|
|
13
|
+
// Parse preset reference (e.g., "@kb-labs/org-preset@1.3.2")
|
|
14
|
+
const [name, version] = parsePresetRef(presetRef);
|
|
15
|
+
// Try local node_modules first (offline-first)
|
|
16
|
+
const localPath = path.join(cwd, 'node_modules', name);
|
|
17
|
+
try {
|
|
18
|
+
const presetInfo = await loadPresetFromPath(localPath, name, version);
|
|
19
|
+
if (presetInfo) {
|
|
20
|
+
return presetInfo;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Local preset not found, continue to network resolution
|
|
25
|
+
}
|
|
26
|
+
// Try network resolution (this would be implemented with npm/pnpm APIs)
|
|
27
|
+
// For now, we'll throw an error if local resolution fails
|
|
28
|
+
throw new KbError('ERR_PRESET_NOT_RESOLVED', `Preset not found: ${presetRef}`, ERROR_HINTS.ERR_PRESET_NOT_RESOLVED, { presetRef, cwd });
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Parse preset reference into name and version
|
|
32
|
+
*/
|
|
33
|
+
function parsePresetRef(presetRef) {
|
|
34
|
+
const atIndex = presetRef.lastIndexOf('@');
|
|
35
|
+
if (atIndex === -1) {
|
|
36
|
+
throw new KbError('ERR_PRESET_REF_INVALID', `Invalid preset reference: ${presetRef}`, 'Preset references must include version (e.g., @kb-labs/org-preset@1.3.2)', { presetRef });
|
|
37
|
+
}
|
|
38
|
+
const name = presetRef.substring(0, atIndex);
|
|
39
|
+
const version = presetRef.substring(atIndex + 1);
|
|
40
|
+
if (!name || !version) {
|
|
41
|
+
throw new KbError('ERR_PRESET_REF_INVALID', `Invalid preset reference: ${presetRef}`, 'Preset references must include both name and version', { presetRef });
|
|
42
|
+
}
|
|
43
|
+
return [name, version];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Load preset from local path
|
|
47
|
+
*/
|
|
48
|
+
async function loadPresetFromPath(presetPath, name, version) {
|
|
49
|
+
try {
|
|
50
|
+
// Check if preset directory exists
|
|
51
|
+
await fsp.access(presetPath);
|
|
52
|
+
// Load package.json to verify version
|
|
53
|
+
const packageJsonPath = path.join(presetPath, 'package.json');
|
|
54
|
+
const packageJson = JSON.parse(await fsp.readFile(packageJsonPath, 'utf-8'));
|
|
55
|
+
// Verify version matches (supports semver ranges)
|
|
56
|
+
if (!versionMatches(packageJson.version, version)) {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
// Load preset config
|
|
60
|
+
const configPath = path.join(presetPath, 'config.defaults.json');
|
|
61
|
+
const config = JSON.parse(await fsp.readFile(configPath, 'utf-8'));
|
|
62
|
+
return {
|
|
63
|
+
name,
|
|
64
|
+
version: packageJson.version,
|
|
65
|
+
path: presetPath,
|
|
66
|
+
config,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if version matches (simple semver range support)
|
|
75
|
+
*/
|
|
76
|
+
function versionMatches(actualVersion, requiredVersion) {
|
|
77
|
+
// Simple exact match for now
|
|
78
|
+
// TODO: Implement proper semver range matching
|
|
79
|
+
if (requiredVersion.startsWith('^')) {
|
|
80
|
+
const major = requiredVersion.substring(1).split('.')[0];
|
|
81
|
+
const actualMajor = actualVersion.split('.')[0];
|
|
82
|
+
return major === actualMajor;
|
|
83
|
+
}
|
|
84
|
+
return actualVersion === requiredVersion;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get preset config for a specific product
|
|
88
|
+
*/
|
|
89
|
+
export function getPresetConfigForProduct(preset, product) {
|
|
90
|
+
const fsProduct = toFsProduct(product);
|
|
91
|
+
return preset.config.products?.[fsProduct] || {};
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get preset metadata
|
|
95
|
+
*/
|
|
96
|
+
export function getPresetMetadata(preset) {
|
|
97
|
+
return {
|
|
98
|
+
name: preset.name,
|
|
99
|
+
version: preset.version,
|
|
100
|
+
path: preset.path,
|
|
101
|
+
products: Object.keys(preset.config.products || {}),
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=resolve-preset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-preset.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/preset/resolve-preset.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.spec.d.ts","sourceRoot":"","sources":["../../../../../kb-labs-core/packages/sys/src/repo/__tests__/repo.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { promises as fsp } from 'node:fs';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { findRepoRoot } from '../repo';
|
|
6
|
+
async function mkd(prefix = 'kb-core-sys-repo-') {
|
|
7
|
+
return await fsp.mkdtemp(path.join(os.tmpdir(), prefix));
|
|
8
|
+
}
|
|
9
|
+
describe('findRepoRoot', () => {
|
|
10
|
+
it('finds directory containing any marker (e.g., .git) when called from subdir', async () => {
|
|
11
|
+
const root = await mkd();
|
|
12
|
+
const sub = path.join(root, 'a/b/c');
|
|
13
|
+
await fsp.mkdir(sub, { recursive: true });
|
|
14
|
+
await fsp.mkdir(path.join(root, '.git'));
|
|
15
|
+
const found = await findRepoRoot(sub);
|
|
16
|
+
expect(found).toBe(root);
|
|
17
|
+
});
|
|
18
|
+
it('falls back to FS root if no marker is found up the tree', async () => {
|
|
19
|
+
const start = await mkd();
|
|
20
|
+
const found = await findRepoRoot(start);
|
|
21
|
+
// Implementation returns FS root when no markers are found
|
|
22
|
+
expect(found).toBe(path.parse(start).root);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=repo.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.spec.js","sourceRoot":"","sources":["../../../../../kb-labs-core/packages/sys/src/repo/__tests__/repo.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,SAAS,CAAA;AACzC,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEtC,KAAK,UAAU,GAAG,CAAC,MAAM,GAAG,mBAAmB;IAC7C,OAAO,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,IAAI,GAAG,MAAM,GAAG,EAAE,CAAA;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QACpC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACzC,MAAM,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAA;QAExC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAA;QACrC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,KAAK,GAAG,MAAM,GAAG,EAAE,CAAA;QACzB,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,CAAA;QACvC,2DAA2D;QAC3D,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/repo/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/repo/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/repo/repo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,wBAAsB,YAAY,CAAC,QAAQ,SAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAU5E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/core/sys/repo
|
|
3
|
+
* Repository root discovery. Pure infrastructure, no domain keys.
|
|
4
|
+
*/
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { promises as fsp } from "node:fs";
|
|
7
|
+
const markers = [".git", "pnpm-workspace.yaml", "package.json"];
|
|
8
|
+
export async function findRepoRoot(startDir = process.cwd()) {
|
|
9
|
+
let dir = path.resolve(startDir);
|
|
10
|
+
while (true) {
|
|
11
|
+
for (const m of markers) {
|
|
12
|
+
try {
|
|
13
|
+
await fsp.access(path.join(dir, m));
|
|
14
|
+
return dir;
|
|
15
|
+
}
|
|
16
|
+
catch { /* continue */ }
|
|
17
|
+
}
|
|
18
|
+
const parent = path.dirname(dir);
|
|
19
|
+
if (parent === dir) {
|
|
20
|
+
return dir;
|
|
21
|
+
} // FS root as fallback
|
|
22
|
+
dir = parent;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/repo/repo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC;AAE1C,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,cAAc,CAAC,CAAC;AAEhE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;IACvD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,OAAO,IAAI,EAAE,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC;gBAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBAAC,OAAO,GAAG,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAC,cAAc,CAAC,CAAC;QACrF,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YAAA,OAAO,GAAG,CAAC;QAAA,CAAC,CAAC,sBAAsB;QACxD,GAAG,GAAG,MAAM,CAAC;IACjB,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/runtime/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/core/config/runtime
|
|
3
|
+
* Infrastructure-only config pipeline (no domain keys).
|
|
4
|
+
* Provides: nearest config discovery, safe JSON read with diagnostics,
|
|
5
|
+
* deep merge that ignores `undefined`, and a generic resolver (defaults→file→env→cli).
|
|
6
|
+
*/
|
|
7
|
+
import type { Diagnostic, FindNearestConfigOpts, JsonReadResult, ProfilesConfig, KBConfig } from "../types";
|
|
8
|
+
/** Find nearest config file walking up from startDir until stopDir or FS root. */
|
|
9
|
+
export declare function findNearestConfig(opts: FindNearestConfigOpts): Promise<{
|
|
10
|
+
path: string | null;
|
|
11
|
+
tried: string[];
|
|
12
|
+
}>;
|
|
13
|
+
/** Read JSON with explicit diagnostics (no silent nulls). */
|
|
14
|
+
export declare function readJsonWithDiagnostics<T = unknown>(p: string): Promise<JsonReadResult<T>>;
|
|
15
|
+
/** Shallow pick of defined fields only. */
|
|
16
|
+
export declare function pickDefined<T extends Record<string, any>>(obj: T | undefined): Partial<T>;
|
|
17
|
+
/** Deep merge (objects/arrays), ignoring `undefined` on the overlay. */
|
|
18
|
+
export declare function mergeDefined<T>(base: T, over?: Partial<T>): T;
|
|
19
|
+
declare const SYSTEM_DEFAULTS: {
|
|
20
|
+
readonly profiles: {
|
|
21
|
+
readonly rootDir: ".kb/profiles";
|
|
22
|
+
readonly defaultName: "default";
|
|
23
|
+
readonly strict: true;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export interface ResolveConfigArgs<TConfig, _TEnvMap = unknown> {
|
|
27
|
+
defaults: TConfig;
|
|
28
|
+
fileConfig?: Partial<TConfig>;
|
|
29
|
+
envMapper?: (env: NodeJS.ProcessEnv) => Partial<TConfig> | undefined;
|
|
30
|
+
cliOverrides?: Partial<TConfig>;
|
|
31
|
+
validate?: (cfg: TConfig) => {
|
|
32
|
+
ok: boolean;
|
|
33
|
+
diagnostics?: Diagnostic[];
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Generic resolver: defaults → fileConfig → envMapper(process.env) → cliOverrides.
|
|
38
|
+
* No domain keys inside; mapping/validation provided by the product/shared layer.
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveConfig<TConfig>(args: ResolveConfigArgs<TConfig>): {
|
|
41
|
+
value: TConfig;
|
|
42
|
+
diagnostics: Diagnostic[];
|
|
43
|
+
};
|
|
44
|
+
export { SYSTEM_DEFAULTS };
|
|
45
|
+
export type { ProfilesConfig, KBConfig };
|
|
46
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/runtime/runtime.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,qBAAqB,EAAE,cAAc,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE5G,kFAAkF;AAClF,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsBtH;AAED,6DAA6D;AAC7D,wBAAsB,uBAAuB,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAehG;AAED,2CAA2C;AAC3C,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAOzF;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAqB7D;AAMD,QAAA,MAAM,eAAe;;;;;;CAEX,CAAC;AAEX,MAAM,WAAW,iBAAiB,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO;IAC1D,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IACrE,YAAY,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;CAC5E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,UAAU,EAAE,CAAA;CAAE,CAuBtH;AAED,OAAO,EAAE,eAAe,EAAE,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/core/config/runtime
|
|
3
|
+
* Infrastructure-only config pipeline (no domain keys).
|
|
4
|
+
* Provides: nearest config discovery, safe JSON read with diagnostics,
|
|
5
|
+
* deep merge that ignores `undefined`, and a generic resolver (defaults→file→env→cli).
|
|
6
|
+
*/
|
|
7
|
+
import { promises as fsp } from "node:fs";
|
|
8
|
+
import path from "node:path";
|
|
9
|
+
/** Find nearest config file walking up from startDir until stopDir or FS root. */
|
|
10
|
+
export async function findNearestConfig(opts) {
|
|
11
|
+
const start = path.resolve(opts.startDir ?? process.cwd());
|
|
12
|
+
const stop = opts.stopDir ? path.resolve(opts.stopDir) : null;
|
|
13
|
+
const tried = [];
|
|
14
|
+
let dir = start;
|
|
15
|
+
while (true) {
|
|
16
|
+
for (const name of opts.filenames) {
|
|
17
|
+
const candidate = path.join(dir, name);
|
|
18
|
+
tried.push(candidate);
|
|
19
|
+
try {
|
|
20
|
+
await fsp.access(candidate);
|
|
21
|
+
return { path: candidate, tried };
|
|
22
|
+
}
|
|
23
|
+
catch { /* continue */ }
|
|
24
|
+
}
|
|
25
|
+
const parent = path.dirname(dir);
|
|
26
|
+
if (parent === dir) {
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
if (stop && (dir === stop || parent === stop)) {
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
dir = parent;
|
|
33
|
+
}
|
|
34
|
+
return { path: null, tried };
|
|
35
|
+
}
|
|
36
|
+
/** Read JSON with explicit diagnostics (no silent nulls). */
|
|
37
|
+
export async function readJsonWithDiagnostics(p) {
|
|
38
|
+
const diagnostics = [];
|
|
39
|
+
try {
|
|
40
|
+
const raw = await fsp.readFile(p, "utf8");
|
|
41
|
+
try {
|
|
42
|
+
const data = JSON.parse(raw);
|
|
43
|
+
return { ok: true, data, diagnostics };
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
diagnostics.push({ level: "error", code: "JSON_PARSE_FAILED", message: `Failed to parse JSON: ${p}`, detail: String(e) });
|
|
47
|
+
return { ok: false, diagnostics };
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
diagnostics.push({ level: "error", code: "FILE_READ_FAILED", message: `Failed to read file: ${p}`, detail: String(e) });
|
|
52
|
+
return { ok: false, diagnostics };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/** Shallow pick of defined fields only. */
|
|
56
|
+
export function pickDefined(obj) {
|
|
57
|
+
if (!obj) {
|
|
58
|
+
return {};
|
|
59
|
+
}
|
|
60
|
+
const out = {};
|
|
61
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
62
|
+
if (v !== undefined) {
|
|
63
|
+
out[k] = v;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return out;
|
|
67
|
+
}
|
|
68
|
+
/** Deep merge (objects/arrays), ignoring `undefined` on the overlay. */
|
|
69
|
+
export function mergeDefined(base, over) {
|
|
70
|
+
if (!over) {
|
|
71
|
+
return base;
|
|
72
|
+
}
|
|
73
|
+
if (Array.isArray(base) && Array.isArray(over)) {
|
|
74
|
+
return [...base, ...over.filter(v => v !== undefined)];
|
|
75
|
+
}
|
|
76
|
+
if (isPlainObject(base) && isPlainObject(over)) {
|
|
77
|
+
const out = { ...base };
|
|
78
|
+
for (const [k, v] of Object.entries(over)) {
|
|
79
|
+
if (v === undefined) {
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (isPlainObject(base[k]) && isPlainObject(v)) {
|
|
83
|
+
out[k] = mergeDefined(base[k], v);
|
|
84
|
+
}
|
|
85
|
+
else if (Array.isArray(base[k]) && Array.isArray(v)) {
|
|
86
|
+
out[k] = mergeDefined(base[k], v);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
out[k] = v;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
// Different types → overlay wins if defined
|
|
95
|
+
return over ?? base;
|
|
96
|
+
}
|
|
97
|
+
function isPlainObject(v) {
|
|
98
|
+
return typeof v === "object" && v !== null && Object.getPrototypeOf(v) === Object.prototype;
|
|
99
|
+
}
|
|
100
|
+
const SYSTEM_DEFAULTS = {
|
|
101
|
+
profiles: { rootDir: '.kb/profiles', defaultName: 'default', strict: true }
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Generic resolver: defaults → fileConfig → envMapper(process.env) → cliOverrides.
|
|
105
|
+
* No domain keys inside; mapping/validation provided by the product/shared layer.
|
|
106
|
+
*/
|
|
107
|
+
export function resolveConfig(args) {
|
|
108
|
+
const diagnostics = [];
|
|
109
|
+
const envPart = args.envMapper?.(process.env) ?? {};
|
|
110
|
+
const merged = mergeDefined(mergeDefined(mergeDefined(mergeDefined(structuredClone(SYSTEM_DEFAULTS), structuredClone(args.defaults)), args.fileConfig), envPart), args.cliOverrides);
|
|
111
|
+
if (args.validate) {
|
|
112
|
+
const res = args.validate(merged);
|
|
113
|
+
if (!res.ok) {
|
|
114
|
+
diagnostics.push({ level: "error", code: "CONFIG_VALIDATION_FAILED", message: "Configuration did not pass validation." });
|
|
115
|
+
if (res.diagnostics) {
|
|
116
|
+
diagnostics.push(...res.diagnostics);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if (res.diagnostics?.length) {
|
|
120
|
+
diagnostics.push(...res.diagnostics);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return { value: merged, diagnostics };
|
|
124
|
+
}
|
|
125
|
+
export { SYSTEM_DEFAULTS };
|
|
126
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/runtime/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["../../../kb-labs-sdk/tsup.config.ts","../../../kb-labs-sdk/vitest.config.ts","../../../kb-labs-sdk/packages/sdk/tsup.config.ts","../../../kb-labs-sdk/packages/sdk/dist/index.d.ts","../../../kb-labs-sdk/packages/sdk/dist/testing/index.d.ts","../../../kb-labs-sdk/packages/sdk/src/index.ts","../../../kb-labs-sdk/packages/sdk/src/__tests__/exports.snapshot.test.ts","../../../kb-labs-sdk/packages/sdk/src/command/index.ts","../../../kb-labs-sdk/packages/sdk/src/manifest/index.ts","../../../kb-labs-sdk/packages/sdk/src/test/create-test-context.ts","../../../kb-labs-sdk/packages/sdk/src/test/index.ts","../../../kb-labs-sdk/packages/sdk/src/testing/index.ts","../../../kb-labs-sdk/packages/sdk/src/utils/index.ts","../../../kb-labs-sdk/eslint.config.js","../../../kb-labs-sdk/packages/sdk/eslint.config.js","../../../kb-labs-sdk/packages/sdk/dist/index.js","../../../kb-labs-sdk/packages/sdk/dist/testing/index.js","../../../kb-labs-sdk/packages/sdk/tsup.config.bundled_x0ijv4r35mr.mjs","../../../kb-labs-sdk/scripts/devkit-sync.mjs"],"errors":true,"version":"5.9.3"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":[],"fileInfos":[],"root":[],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"outDir":"./","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"errors":true,"version":"5.9.3"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/core/config/types/init
|
|
3
|
+
* Types for init operations
|
|
4
|
+
*/
|
|
5
|
+
import type { ProductId } from './types';
|
|
6
|
+
export interface InitWorkspaceOptions {
|
|
7
|
+
cwd: string;
|
|
8
|
+
format?: 'yaml' | 'json';
|
|
9
|
+
presetRef?: string | null;
|
|
10
|
+
profiles?: Record<string, string>;
|
|
11
|
+
products?: ProductId[];
|
|
12
|
+
dryRun?: boolean;
|
|
13
|
+
force?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface InitAction {
|
|
16
|
+
kind: 'write' | 'append' | 'update' | 'skip' | 'conflict';
|
|
17
|
+
path: string;
|
|
18
|
+
previewDiff?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface InitResult {
|
|
21
|
+
actions: InitAction[];
|
|
22
|
+
created: string[];
|
|
23
|
+
updated: string[];
|
|
24
|
+
skipped: string[];
|
|
25
|
+
warnings: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface UpsertLockfileOptions {
|
|
28
|
+
cwd: string;
|
|
29
|
+
presetRef?: string | null;
|
|
30
|
+
profileRef?: string | null;
|
|
31
|
+
policyBundle?: string | null;
|
|
32
|
+
dryRun?: boolean;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/types/init.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEzC,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/types/init.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/core/config/types/preset
|
|
3
|
+
* Preset-related types
|
|
4
|
+
*/
|
|
5
|
+
export interface PresetConfig {
|
|
6
|
+
products: Record<string, any>;
|
|
7
|
+
metadata?: {
|
|
8
|
+
name: string;
|
|
9
|
+
version: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export interface PresetResolutionOptions {
|
|
14
|
+
cwd: string;
|
|
15
|
+
presetRef: string;
|
|
16
|
+
offline?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface PresetResolutionResult {
|
|
19
|
+
preset: {
|
|
20
|
+
name: string;
|
|
21
|
+
version: string;
|
|
22
|
+
path: string;
|
|
23
|
+
config: PresetConfig;
|
|
24
|
+
};
|
|
25
|
+
resolvedAt: string;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=preset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/types/preset.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,YAAY,CAAC;KACtB,CAAC;IACF,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/types/preset.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/types/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/types/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.spec.d.ts","sourceRoot":"","sources":["../../../../../kb-labs-core/packages/config/src/utils/__tests__/env.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { toBool, toInt } from '../env';
|
|
3
|
+
describe('toBool', () => {
|
|
4
|
+
it('parses truthy values', () => {
|
|
5
|
+
for (const v of ['1', 'true', 'yes', 'on', ' TRUE ', 'Yes']) {
|
|
6
|
+
expect(toBool(v)).toBe(true);
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
it('parses falsy values', () => {
|
|
10
|
+
for (const v of ['0', 'false', 'no', 'off', ' False ']) {
|
|
11
|
+
expect(toBool(v)).toBe(false);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
it('returns undefined for unknown or undefined', () => {
|
|
15
|
+
expect(toBool('maybe')).toBeUndefined();
|
|
16
|
+
expect(toBool(undefined)).toBeUndefined();
|
|
17
|
+
expect(toBool('')).toBeUndefined();
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
describe('toInt', () => {
|
|
21
|
+
it('parses valid integers', () => {
|
|
22
|
+
expect(toInt('0')).toBe(0);
|
|
23
|
+
expect(toInt('42')).toBe(42);
|
|
24
|
+
expect(toInt(' 7 ')).toBe(7);
|
|
25
|
+
});
|
|
26
|
+
it('returns undefined for invalid numbers or undefined', () => {
|
|
27
|
+
expect(toInt('abc')).toBeUndefined();
|
|
28
|
+
expect(toInt('NaN')).toBeUndefined();
|
|
29
|
+
expect(toInt(undefined)).toBeUndefined();
|
|
30
|
+
expect(toInt('')).toBe(0); // Number('') === 0 → considered valid
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=env.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.spec.js","sourceRoot":"","sources":["../../../../../kb-labs-core/packages/config/src/utils/__tests__/env.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAEtC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAC,MAAM,EAAC,KAAK,EAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9B,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,EAAC,OAAO,EAAC,IAAI,EAAC,KAAK,EAAC,SAAS,CAAC,EAAE,CAAC;YACnD,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/B,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;QACzC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;IACpC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC1B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC5B,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;QACpC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;QACpC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;QACxC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAC,sCAAsC;IAClE,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/core/utils/env
|
|
3
|
+
* Small helpers to convert ENV strings to typed values.
|
|
4
|
+
*/
|
|
5
|
+
export declare function toBool(v: string | undefined): boolean | undefined;
|
|
6
|
+
export declare function toInt(v: string | undefined): number | undefined;
|
|
7
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/utils/env.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAMjE;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAI/D"}
|