@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,90 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
|
|
2
|
+
import { configureLogger, configureFromEnv, addSink, getLogger, createRedactor, jsonSink, stdoutSink } from '..';
|
|
3
|
+
describe.sequential('configureFromEnv', () => {
|
|
4
|
+
const orig = { ...process.env };
|
|
5
|
+
afterEach(() => { process.env = { ...orig }; });
|
|
6
|
+
it('sets log level and category filter (array)', async () => {
|
|
7
|
+
process.env.LOG_LEVEL = 'debug';
|
|
8
|
+
process.env.LOG_CATEGORY_FILTER = 'a,b';
|
|
9
|
+
configureLogger({ sinks: [], clock: () => new Date('2020-01-01T00:00:00.000Z') });
|
|
10
|
+
configureFromEnv(process.env);
|
|
11
|
+
const records = [];
|
|
12
|
+
addSink({ handle: r => { records.push(r); } });
|
|
13
|
+
getLogger('a').debug('x');
|
|
14
|
+
getLogger('c').debug('y');
|
|
15
|
+
await new Promise(r => setTimeout(r, 0));
|
|
16
|
+
expect(records.length).toBe(1);
|
|
17
|
+
expect(records[0].level).toBe('debug');
|
|
18
|
+
expect(records[0].category).toBe('a');
|
|
19
|
+
});
|
|
20
|
+
it('supports regex category filter', async () => {
|
|
21
|
+
process.env.LOG_LEVEL = 'info';
|
|
22
|
+
process.env.LOG_CATEGORY_FILTER = '/^api:/';
|
|
23
|
+
configureLogger({ sinks: [], clock: () => new Date('2020-01-01T00:00:00.000Z') });
|
|
24
|
+
configureFromEnv(process.env);
|
|
25
|
+
const records = [];
|
|
26
|
+
addSink({ handle: r => { records.push(r); } });
|
|
27
|
+
getLogger('api:get').info('pass');
|
|
28
|
+
getLogger('db').info('skip');
|
|
29
|
+
await new Promise(r => setTimeout(r, 0));
|
|
30
|
+
expect(records.map(r => r.category)).toEqual(['api:get']);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe.sequential('redactor', () => {
|
|
34
|
+
beforeEach(() => {
|
|
35
|
+
configureLogger({ sinks: [], level: 'debug', categoryFilter: /.*/, clock: () => new Date('2020-01-01T00:00:00.000Z') });
|
|
36
|
+
});
|
|
37
|
+
it('applies redaction before fanout', async () => {
|
|
38
|
+
const redact = createRedactor({
|
|
39
|
+
keys: ['token'],
|
|
40
|
+
mask: '***',
|
|
41
|
+
});
|
|
42
|
+
const seen = [];
|
|
43
|
+
configureLogger({ redactor: (r) => redact(r), sinks: [{ handle: r => { seen.push(r); } }] });
|
|
44
|
+
getLogger('x').info('ok', { token: 'secret', keep: 1 });
|
|
45
|
+
await Promise.resolve();
|
|
46
|
+
await new Promise(r => setTimeout(r, 1));
|
|
47
|
+
expect(seen[0].meta).toEqual({ token: '***', keep: 1 });
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe.sequential('sinks', () => {
|
|
51
|
+
beforeEach(() => {
|
|
52
|
+
configureLogger({ sinks: [], level: 'debug', categoryFilter: /.*/, clock: () => new Date('2020-01-01T00:00:00.000Z') });
|
|
53
|
+
});
|
|
54
|
+
it('jsonSink writes stable JSON to stdout', async () => {
|
|
55
|
+
const spy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
|
|
56
|
+
addSink(jsonSink);
|
|
57
|
+
getLogger('cat').info('hello', { a: 1 });
|
|
58
|
+
await Promise.resolve();
|
|
59
|
+
await new Promise(r => setTimeout(r, 1));
|
|
60
|
+
expect(spy).toHaveBeenCalled();
|
|
61
|
+
const call = spy.mock.calls[0]?.[0];
|
|
62
|
+
const obj = JSON.parse(call.trim());
|
|
63
|
+
expect(obj).toEqual({ time: '2020-01-01T00:00:00.000Z', level: 'info', category: 'cat', msg: 'hello', meta: { a: 1 } });
|
|
64
|
+
spy.mockRestore();
|
|
65
|
+
});
|
|
66
|
+
it('stdoutSink routes based on level and formats line', async () => {
|
|
67
|
+
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
|
|
68
|
+
const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
69
|
+
const errSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
|
|
70
|
+
const dbgSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
|
|
71
|
+
configureLogger({ level: 'debug' });
|
|
72
|
+
addSink(stdoutSink);
|
|
73
|
+
const l = getLogger('svc');
|
|
74
|
+
l.debug('d');
|
|
75
|
+
l.info('i', { x: 1 });
|
|
76
|
+
l.warn('w');
|
|
77
|
+
l.error('e');
|
|
78
|
+
await Promise.resolve();
|
|
79
|
+
await new Promise(r => setTimeout(r, 1));
|
|
80
|
+
expect(dbgSpy).toHaveBeenCalled();
|
|
81
|
+
expect(logSpy).toHaveBeenCalledWith('[2020-01-01T00:00:00.000Z] INFO svc: i', { x: 1 });
|
|
82
|
+
expect(warnSpy).toHaveBeenCalled();
|
|
83
|
+
expect(errSpy).toHaveBeenCalled();
|
|
84
|
+
logSpy.mockRestore();
|
|
85
|
+
warnSpy.mockRestore();
|
|
86
|
+
errSpy.mockRestore();
|
|
87
|
+
dbgSpy.mockRestore();
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=sinks-and-env.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sinks-and-env.spec.js","sourceRoot":"","sources":["../../../../../kb-labs-core/packages/sys/src/logging/__tests__/sinks-and-env.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from "./types";
|
|
2
|
+
export { configureLogger, configureFromEnv, addSink, removeSink, setLogLevel, getLogger } from "./logger";
|
|
3
|
+
export { createRedactor } from "./redaction";
|
|
4
|
+
export { stdoutSink } from "./sinks/stdout";
|
|
5
|
+
export { jsonSink } from "./sinks/json";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/logging/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from "./types";
|
|
2
|
+
export { configureLogger, configureFromEnv, addSink, removeSink, setLogLevel, getLogger } from "./logger";
|
|
3
|
+
export { createRedactor } from "./redaction";
|
|
4
|
+
export { stdoutSink } from "./sinks/stdout";
|
|
5
|
+
export { jsonSink } from "./sinks/json";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/logging/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ConfigureOpts, LogLevel, LogSink, Logger } from "./types";
|
|
2
|
+
export declare function configureLogger(opts: ConfigureOpts): void;
|
|
3
|
+
export declare function addSink(sink: LogSink): void;
|
|
4
|
+
export declare function removeSink(sink: LogSink): void;
|
|
5
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
6
|
+
export declare function getLogger(category?: string): Logger;
|
|
7
|
+
/** Generic ENV bootstrap (no product-specific vars). */
|
|
8
|
+
export declare function configureFromEnv(env?: NodeJS.ProcessEnv): void;
|
|
9
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/logging/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAa,OAAO,EAAE,MAAM,EAAY,MAAM,SAAS,CAAC;AAU7F,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAMzD;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAsB;AAClE,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAA2C;AAC1F,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAyB;AAoD3E,wBAAgB,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wDAAwD;AACxD,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,IAAI,CAa3E"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const LEVEL_ORDER = { debug: 10, info: 20, warn: 30, error: 40 };
|
|
2
|
+
let globalLevel = "info";
|
|
3
|
+
let sinks = [];
|
|
4
|
+
let redactor = null;
|
|
5
|
+
let categoryFilter;
|
|
6
|
+
let clock = () => new Date();
|
|
7
|
+
export function configureLogger(opts) {
|
|
8
|
+
if (opts.level) {
|
|
9
|
+
globalLevel = opts.level;
|
|
10
|
+
}
|
|
11
|
+
if (opts.sinks) {
|
|
12
|
+
sinks = [...opts.sinks];
|
|
13
|
+
}
|
|
14
|
+
if (opts.redactor !== undefined) {
|
|
15
|
+
redactor = opts.redactor;
|
|
16
|
+
}
|
|
17
|
+
if (opts.categoryFilter !== undefined) {
|
|
18
|
+
categoryFilter = opts.categoryFilter;
|
|
19
|
+
}
|
|
20
|
+
if (opts.clock) {
|
|
21
|
+
clock = opts.clock;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function addSink(sink) { sinks.push(sink); }
|
|
25
|
+
export function removeSink(sink) { sinks = sinks.filter(s => s !== sink); }
|
|
26
|
+
export function setLogLevel(level) { globalLevel = level; }
|
|
27
|
+
function allowedCategory(cat) {
|
|
28
|
+
if (!categoryFilter) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
if (Array.isArray(categoryFilter)) {
|
|
32
|
+
return !cat ? false : categoryFilter.includes(cat);
|
|
33
|
+
}
|
|
34
|
+
return !!cat && categoryFilter.test(cat);
|
|
35
|
+
}
|
|
36
|
+
async function fanout(rec) {
|
|
37
|
+
const prepared = redactor ? redactor(rec) : rec;
|
|
38
|
+
for (const s of sinks) {
|
|
39
|
+
try {
|
|
40
|
+
await s.handle(prepared);
|
|
41
|
+
}
|
|
42
|
+
catch { /* never throw */ }
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function baseLogger(bindings) {
|
|
46
|
+
const boundCat = bindings?.category;
|
|
47
|
+
const boundMeta = bindings?.meta ?? {};
|
|
48
|
+
function emit(level, msg, meta) {
|
|
49
|
+
if (LEVEL_ORDER[level] < LEVEL_ORDER[globalLevel]) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (!allowedCategory(boundCat)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
let err;
|
|
56
|
+
let attach;
|
|
57
|
+
if (meta instanceof Error) {
|
|
58
|
+
err = { name: meta.name, message: meta.message, stack: meta.stack };
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
attach = meta;
|
|
62
|
+
}
|
|
63
|
+
const rec = {
|
|
64
|
+
time: clock().toISOString(),
|
|
65
|
+
level,
|
|
66
|
+
category: boundCat,
|
|
67
|
+
msg,
|
|
68
|
+
meta: Object.keys(boundMeta).length || attach ? { ...boundMeta, ...attach } : undefined,
|
|
69
|
+
err,
|
|
70
|
+
};
|
|
71
|
+
void fanout(rec);
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
debug: (m, m2) => emit("debug", m, m2),
|
|
75
|
+
info: (m, m2) => emit("info", m, m2),
|
|
76
|
+
warn: (m, m2) => emit("warn", m, m2),
|
|
77
|
+
error: (m, m2) => emit("error", m, m2),
|
|
78
|
+
child: (b) => baseLogger({ category: b.category ?? boundCat, meta: { ...boundMeta, ...(b.meta ?? {}) } }),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export function getLogger(category) {
|
|
82
|
+
return baseLogger({ category });
|
|
83
|
+
}
|
|
84
|
+
/** Generic ENV bootstrap (no product-specific vars). */
|
|
85
|
+
export function configureFromEnv(env = process.env) {
|
|
86
|
+
const lvl = (env.LOG_LEVEL ?? "").toLowerCase();
|
|
87
|
+
if (lvl === "debug" || lvl === "info" || lvl === "warn" || lvl === "error") {
|
|
88
|
+
setLogLevel(lvl);
|
|
89
|
+
}
|
|
90
|
+
const filter = env.LOG_CATEGORY_FILTER;
|
|
91
|
+
if (filter?.length) {
|
|
92
|
+
if (filter.startsWith("/") && filter.endsWith("/")) {
|
|
93
|
+
const re = new RegExp(filter.slice(1, -1));
|
|
94
|
+
configureLogger({ categoryFilter: re });
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
configureLogger({ categoryFilter: filter.split(",").map(s => s.trim()).filter(Boolean) });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/logging/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/logging/redaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnD,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,QAAQ,CAoBlF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Simple key-based redactor; masks values by key in meta recursively. */
|
|
2
|
+
export function createRedactor(opts) {
|
|
3
|
+
const keys = new Set((opts?.keys ?? ["token", "apiKey", "authorization"]).map(k => k.toLowerCase()));
|
|
4
|
+
const mask = opts?.mask ?? "****";
|
|
5
|
+
function redactValue(v, path = []) {
|
|
6
|
+
if (v && typeof v === "object" && !Array.isArray(v)) {
|
|
7
|
+
const out = {};
|
|
8
|
+
for (const [k, val] of Object.entries(v)) {
|
|
9
|
+
out[k] = keys.has(k.toLowerCase()) ? mask : redactValue(val, path.concat(k));
|
|
10
|
+
}
|
|
11
|
+
return out;
|
|
12
|
+
}
|
|
13
|
+
if (Array.isArray(v)) {
|
|
14
|
+
return v.map((x) => redactValue(x, path));
|
|
15
|
+
}
|
|
16
|
+
return v;
|
|
17
|
+
}
|
|
18
|
+
return (rec) => {
|
|
19
|
+
const meta = rec.meta ? redactValue(rec.meta) : undefined;
|
|
20
|
+
return meta ? { ...rec, meta } : rec;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/sys/src/logging/redaction.ts"],"names":[],"mappings":"AAEA,0EAA0E;AAC1E,MAAM,UAAU,cAAc,CAAC,IAAyC;IACpE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACrG,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC;IAElC,SAAS,WAAW,CAAC,CAAU,EAAE,OAAiB,EAAE;QAChD,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,MAAM,GAAG,GAA4B,EAAE,CAAC;YACxC,KAAK,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAQ,CAAC,EAAE,CAAC;gBAC9C,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,CAAC;YACD,OAAO,GAAG,CAAC;QACf,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YAAA,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAAA,CAAC;QAClE,OAAO,CAAC,CAAC;IACb,CAAC;IAED,OAAO,CAAC,GAAc,EAAE,EAAE;QACtB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAA6B,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACzC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../../../../kb-labs-core/packages/sys/src/logging/sinks/json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnD,qDAAqD;AACrD,eAAO,MAAM,QAAQ,EAAE,OAYtB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/** Deterministic JSON sink for CI/log collectors. */
|
|
2
|
+
export const jsonSink = {
|
|
3
|
+
handle(rec) {
|
|
4
|
+
// Ensure stable order: time, level, category, msg, err, meta
|
|
5
|
+
const payload = {};
|
|
6
|
+
payload.time = rec.time;
|
|
7
|
+
payload.level = rec.level;
|
|
8
|
+
if (rec.category) {
|
|
9
|
+
payload.category = rec.category;
|
|
10
|
+
}
|
|
11
|
+
if (rec.msg) {
|
|
12
|
+
payload.msg = rec.msg;
|
|
13
|
+
}
|
|
14
|
+
if (rec.err) {
|
|
15
|
+
payload.err = rec.err;
|
|
16
|
+
}
|
|
17
|
+
if (rec.meta) {
|
|
18
|
+
payload.meta = rec.meta;
|
|
19
|
+
}
|
|
20
|
+
process.stdout.write(JSON.stringify(payload) + "\n");
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json.js","sourceRoot":"","sources":["../../../../../kb-labs-core/packages/sys/src/logging/sinks/json.ts"],"names":[],"mappings":"AAEA,qDAAqD;AACrD,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC7B,MAAM,CAAC,GAAc;QACjB,6DAA6D;QAC7D,MAAM,OAAO,GAA4B,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACxB,OAAO,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QAC1B,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;YAAA,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAAA,CAAC;QACpD,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YAAA,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QAAA,CAAC;QACrC,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;YAAA,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QAAA,CAAC;QACrC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAAA,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QAAA,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACzD,CAAC;CACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdout.d.ts","sourceRoot":"","sources":["../../../../../kb-labs-core/packages/sys/src/logging/sinks/stdout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,OAAO,EAAE,MAAM,UAAU,CAAC;AAEnD,eAAO,MAAM,UAAU,EAAE,OAkBxB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const stdoutSink = {
|
|
2
|
+
handle(rec) {
|
|
3
|
+
const line = `[${rec.time}] ${rec.level.toUpperCase()}${rec.category ? ` ${rec.category}` : ""}: ${rec.msg ?? ""}`;
|
|
4
|
+
if (rec.level === "error") {
|
|
5
|
+
if (rec.err) {
|
|
6
|
+
console.error(line, rec.meta ?? {}, rec.err);
|
|
7
|
+
}
|
|
8
|
+
else {
|
|
9
|
+
console.error(line, rec.meta ?? {});
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
else if (rec.level === "warn") {
|
|
13
|
+
console.warn(line, rec.meta ?? {});
|
|
14
|
+
}
|
|
15
|
+
else if (rec.level === "info") {
|
|
16
|
+
console.log(line, rec.meta ?? {});
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
// debug
|
|
20
|
+
console.debug(line, rec.meta ?? {});
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=stdout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdout.js","sourceRoot":"","sources":["../../../../../kb-labs-core/packages/sys/src/logging/sinks/stdout.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAY;IAC/B,MAAM,CAAC,GAAc;QACjB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC;QACnH,IAAI,GAAG,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACxB,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;QACL,CAAC;aAAM,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,GAAG,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACJ,QAAQ;YACR,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;CACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../kb-labs-core/packages/sys/src/logging/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/logging/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export type LogLevel = "debug" | "info" | "warn" | "error";
|
|
2
|
+
export interface LogRecord {
|
|
3
|
+
time: string;
|
|
4
|
+
level: LogLevel;
|
|
5
|
+
category?: string;
|
|
6
|
+
msg?: string;
|
|
7
|
+
err?: {
|
|
8
|
+
name: string;
|
|
9
|
+
message: string;
|
|
10
|
+
stack?: string;
|
|
11
|
+
};
|
|
12
|
+
meta?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
export interface LogSink {
|
|
15
|
+
handle(rec: LogRecord): void | Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
export interface Redactor {
|
|
18
|
+
(rec: LogRecord): LogRecord;
|
|
19
|
+
}
|
|
20
|
+
export interface ConfigureOpts {
|
|
21
|
+
level?: LogLevel;
|
|
22
|
+
sinks?: LogSink[];
|
|
23
|
+
redactor?: Redactor | null;
|
|
24
|
+
categoryFilter?: string[] | RegExp;
|
|
25
|
+
clock?: () => Date;
|
|
26
|
+
}
|
|
27
|
+
export interface Logger {
|
|
28
|
+
debug(msg: string, meta?: Record<string, unknown>): void;
|
|
29
|
+
info(msg: string, meta?: Record<string, unknown>): void;
|
|
30
|
+
warn(msg: string, meta?: Record<string, unknown>): void;
|
|
31
|
+
error(msg: string, meta?: Record<string, unknown> | Error): void;
|
|
32
|
+
child(bindings: {
|
|
33
|
+
category?: string;
|
|
34
|
+
meta?: Record<string, unknown>;
|
|
35
|
+
}): Logger;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../kb-labs-core/packages/sys/src/logging/types/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,OAAO;IACpB,MAAM,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,QAAQ;IACrB,CAAC,GAAG,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC1B,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACnB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACxD,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACjE,KAAK,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,MAAM,CAAC;CAClF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../kb-labs-core/packages/sys/src/logging/types/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/core/config/merge/layered-merge
|
|
3
|
+
* Layered merge with trace for configuration layers
|
|
4
|
+
*/
|
|
5
|
+
import type { ConfigLayer, MergeTrace } from '../types';
|
|
6
|
+
export interface LayeredMergeResult {
|
|
7
|
+
merged: any;
|
|
8
|
+
trace: MergeTrace[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Merge configuration layers with detailed trace
|
|
12
|
+
* Arrays are overwritten (not merged)
|
|
13
|
+
* Objects are deeply merged
|
|
14
|
+
*/
|
|
15
|
+
export declare function layeredMergeWithTrace(layers: ConfigLayer[]): LayeredMergeResult;
|
|
16
|
+
//# sourceMappingURL=layered-merge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layered-merge.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/merge/layered-merge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAmE/E"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/core/config/merge/layered-merge
|
|
3
|
+
* Layered merge with trace for configuration layers
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Merge configuration layers with detailed trace
|
|
7
|
+
* Arrays are overwritten (not merged)
|
|
8
|
+
* Objects are deeply merged
|
|
9
|
+
*/
|
|
10
|
+
export function layeredMergeWithTrace(layers) {
|
|
11
|
+
const trace = [];
|
|
12
|
+
const isPlainObject = (v) => v && typeof v === 'object' && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;
|
|
13
|
+
const merge = (base, overlay, layer, path = []) => {
|
|
14
|
+
// Handle array overwrite
|
|
15
|
+
if (Array.isArray(base) && Array.isArray(overlay)) {
|
|
16
|
+
trace.push({
|
|
17
|
+
path: path.join('.'),
|
|
18
|
+
source: layer.source,
|
|
19
|
+
type: 'overwriteArray',
|
|
20
|
+
layer: layer.label,
|
|
21
|
+
profileKey: layer.source.includes('profile') ? extractProfileKey(layer.source) : undefined,
|
|
22
|
+
profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,
|
|
23
|
+
presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,
|
|
24
|
+
version: extractVersion(layer.source),
|
|
25
|
+
});
|
|
26
|
+
return overlay;
|
|
27
|
+
}
|
|
28
|
+
// Handle object merge
|
|
29
|
+
if (isPlainObject(base) && isPlainObject(overlay)) {
|
|
30
|
+
const result = { ...base };
|
|
31
|
+
for (const [key, value] of Object.entries(overlay)) {
|
|
32
|
+
if (key in base) {
|
|
33
|
+
result[key] = merge(base[key], value, layer, [...path, key]);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
trace.push({
|
|
37
|
+
path: [...path, key].join('.'),
|
|
38
|
+
source: layer.source,
|
|
39
|
+
type: 'set',
|
|
40
|
+
layer: layer.label,
|
|
41
|
+
profileKey: layer.source.includes('profile') ? extractProfileKey(layer.source) : undefined,
|
|
42
|
+
profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,
|
|
43
|
+
presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,
|
|
44
|
+
version: extractVersion(layer.source),
|
|
45
|
+
});
|
|
46
|
+
result[key] = value;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
51
|
+
// Different types or primitive values - overlay wins
|
|
52
|
+
trace.push({
|
|
53
|
+
path: path.join('.'),
|
|
54
|
+
source: layer.source,
|
|
55
|
+
type: 'set',
|
|
56
|
+
layer: layer.label,
|
|
57
|
+
profileKey: layer.source.includes('profile') ? extractProfileKey(layer.source) : undefined,
|
|
58
|
+
profileRef: layer.source.includes('profile') ? extractProfileRef(layer.source) : undefined,
|
|
59
|
+
presetRef: layer.source.includes('preset') ? extractPresetRef(layer.source) : undefined,
|
|
60
|
+
version: extractVersion(layer.source),
|
|
61
|
+
});
|
|
62
|
+
return overlay ?? base;
|
|
63
|
+
};
|
|
64
|
+
const merged = layers.reduce((acc, layer) => {
|
|
65
|
+
return merge(acc, layer.value, layer);
|
|
66
|
+
}, {});
|
|
67
|
+
return { merged, trace };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Extract profile key from source string
|
|
71
|
+
*/
|
|
72
|
+
function extractProfileKey(source) {
|
|
73
|
+
const match = source.match(/profile[^:]*:([^@]+)/);
|
|
74
|
+
return match?.[1];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Extract profile ref from source string
|
|
78
|
+
*/
|
|
79
|
+
function extractProfileRef(source) {
|
|
80
|
+
const match = source.match(/profile[^:]*:[^@]+@(.+)/);
|
|
81
|
+
return match?.[1];
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Extract preset ref from source string
|
|
85
|
+
*/
|
|
86
|
+
function extractPresetRef(source) {
|
|
87
|
+
const match = source.match(/preset[^:]*:@(.+)/);
|
|
88
|
+
return match?.[1];
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Extract version from source string
|
|
92
|
+
*/
|
|
93
|
+
function extractVersion(source) {
|
|
94
|
+
const match = source.match(/@([^:]+)/);
|
|
95
|
+
return match?.[1];
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=layered-merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layered-merge.js","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/merge/layered-merge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module @kb-labs/core/config/preset/resolve-preset
|
|
3
|
+
* Org preset resolution with offline-first npm package loading
|
|
4
|
+
*/
|
|
5
|
+
import type { ProductId } from '../types';
|
|
6
|
+
export interface PresetInfo {
|
|
7
|
+
name: string;
|
|
8
|
+
version: string;
|
|
9
|
+
path: string;
|
|
10
|
+
config: any;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Resolve org preset package (offline-first)
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolvePreset(presetRef: string, cwd: string): Promise<PresetInfo>;
|
|
16
|
+
/**
|
|
17
|
+
* Get preset config for a specific product
|
|
18
|
+
*/
|
|
19
|
+
export declare function getPresetConfigForProduct(preset: PresetInfo, product: ProductId): any;
|
|
20
|
+
/**
|
|
21
|
+
* Get preset metadata
|
|
22
|
+
*/
|
|
23
|
+
export declare function getPresetMetadata(preset: PresetInfo): {
|
|
24
|
+
name: string;
|
|
25
|
+
version: string;
|
|
26
|
+
path: string;
|
|
27
|
+
products: string[];
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=resolve-preset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-preset.d.ts","sourceRoot":"","sources":["../../../../kb-labs-core/packages/config/src/preset/resolve-preset.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,GAAG,CAAC;CACb;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,UAAU,CAAC,CAuBrB;AAkFD;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,SAAS,GACjB,GAAG,CAGL;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAOA"}
|