apcore-js 0.1.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/.claude/settings.local.json +11 -0
- package/.gitmessage +60 -0
- package/.pre-commit-config.yaml +28 -0
- package/CHANGELOG.md +47 -0
- package/CLAUDE.md +68 -0
- package/README.md +131 -0
- package/apcore-logo.svg +79 -0
- package/package.json +37 -0
- package/planning/acl-system/overview.md +54 -0
- package/planning/acl-system/plan.md +92 -0
- package/planning/acl-system/state.json +76 -0
- package/planning/acl-system/tasks/acl-core.md +226 -0
- package/planning/acl-system/tasks/acl-rule.md +92 -0
- package/planning/acl-system/tasks/conditional-rules.md +259 -0
- package/planning/acl-system/tasks/pattern-matching.md +152 -0
- package/planning/acl-system/tasks/yaml-loading.md +271 -0
- package/planning/core-executor/overview.md +53 -0
- package/planning/core-executor/plan.md +88 -0
- package/planning/core-executor/state.json +76 -0
- package/planning/core-executor/tasks/async-support.md +106 -0
- package/planning/core-executor/tasks/execution-pipeline.md +113 -0
- package/planning/core-executor/tasks/redaction.md +85 -0
- package/planning/core-executor/tasks/safety-checks.md +65 -0
- package/planning/core-executor/tasks/setup.md +75 -0
- package/planning/decorator-bindings/overview.md +62 -0
- package/planning/decorator-bindings/plan.md +104 -0
- package/planning/decorator-bindings/state.json +87 -0
- package/planning/decorator-bindings/tasks/binding-directory.md +79 -0
- package/planning/decorator-bindings/tasks/binding-loader.md +148 -0
- package/planning/decorator-bindings/tasks/explicit-schemas.md +85 -0
- package/planning/decorator-bindings/tasks/function-module.md +127 -0
- package/planning/decorator-bindings/tasks/module-factory.md +89 -0
- package/planning/decorator-bindings/tasks/schema-modes.md +142 -0
- package/planning/middleware-system/overview.md +48 -0
- package/planning/middleware-system/plan.md +102 -0
- package/planning/middleware-system/state.json +65 -0
- package/planning/middleware-system/tasks/adapters.md +170 -0
- package/planning/middleware-system/tasks/base.md +115 -0
- package/planning/middleware-system/tasks/logging-middleware.md +304 -0
- package/planning/middleware-system/tasks/manager.md +313 -0
- package/planning/observability/overview.md +53 -0
- package/planning/observability/plan.md +119 -0
- package/planning/observability/state.json +98 -0
- package/planning/observability/tasks/context-logger.md +201 -0
- package/planning/observability/tasks/exporters.md +121 -0
- package/planning/observability/tasks/metrics-collector.md +162 -0
- package/planning/observability/tasks/metrics-middleware.md +141 -0
- package/planning/observability/tasks/obs-logging-middleware.md +179 -0
- package/planning/observability/tasks/span-model.md +120 -0
- package/planning/observability/tasks/tracing-middleware.md +179 -0
- package/planning/overview.md +81 -0
- package/planning/registry-system/overview.md +57 -0
- package/planning/registry-system/plan.md +114 -0
- package/planning/registry-system/state.json +109 -0
- package/planning/registry-system/tasks/dependencies.md +157 -0
- package/planning/registry-system/tasks/entry-point.md +148 -0
- package/planning/registry-system/tasks/metadata.md +198 -0
- package/planning/registry-system/tasks/registry-core.md +323 -0
- package/planning/registry-system/tasks/scanner.md +172 -0
- package/planning/registry-system/tasks/schema-export.md +261 -0
- package/planning/registry-system/tasks/types.md +124 -0
- package/planning/registry-system/tasks/validation.md +177 -0
- package/planning/schema-system/overview.md +56 -0
- package/planning/schema-system/plan.md +121 -0
- package/planning/schema-system/state.json +98 -0
- package/planning/schema-system/tasks/exporter.md +153 -0
- package/planning/schema-system/tasks/loader.md +106 -0
- package/planning/schema-system/tasks/ref-resolver.md +133 -0
- package/planning/schema-system/tasks/strict-mode.md +140 -0
- package/planning/schema-system/tasks/typebox-generation.md +133 -0
- package/planning/schema-system/tasks/types-and-annotations.md +160 -0
- package/planning/schema-system/tasks/validator.md +149 -0
- package/src/acl.ts +188 -0
- package/src/bindings.ts +208 -0
- package/src/config.ts +24 -0
- package/src/context.ts +75 -0
- package/src/decorator.ts +110 -0
- package/src/errors.ts +369 -0
- package/src/executor.ts +348 -0
- package/src/index.ts +81 -0
- package/src/middleware/adapters.ts +54 -0
- package/src/middleware/base.ts +33 -0
- package/src/middleware/index.ts +6 -0
- package/src/middleware/logging.ts +103 -0
- package/src/middleware/manager.ts +105 -0
- package/src/module.ts +41 -0
- package/src/observability/context-logger.ts +201 -0
- package/src/observability/index.ts +4 -0
- package/src/observability/metrics.ts +212 -0
- package/src/observability/tracing.ts +187 -0
- package/src/registry/dependencies.ts +99 -0
- package/src/registry/entry-point.ts +64 -0
- package/src/registry/index.ts +8 -0
- package/src/registry/metadata.ts +111 -0
- package/src/registry/registry.ts +314 -0
- package/src/registry/scanner.ts +150 -0
- package/src/registry/schema-export.ts +177 -0
- package/src/registry/types.ts +32 -0
- package/src/registry/validation.ts +38 -0
- package/src/schema/annotations.ts +67 -0
- package/src/schema/exporter.ts +93 -0
- package/src/schema/index.ts +14 -0
- package/src/schema/loader.ts +270 -0
- package/src/schema/ref-resolver.ts +235 -0
- package/src/schema/strict.ts +128 -0
- package/src/schema/types.ts +73 -0
- package/src/schema/validator.ts +82 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/pattern.ts +30 -0
- package/tests/helpers.ts +30 -0
- package/tests/integration/test-acl-safety.test.ts +268 -0
- package/tests/integration/test-binding-executor.test.ts +194 -0
- package/tests/integration/test-e2e-flow.test.ts +117 -0
- package/tests/integration/test-error-propagation.test.ts +259 -0
- package/tests/integration/test-middleware-chain.test.ts +120 -0
- package/tests/integration/test-observability-integration.test.ts +438 -0
- package/tests/observability/test-context-logger.test.ts +123 -0
- package/tests/observability/test-metrics.test.ts +89 -0
- package/tests/observability/test-tracing.test.ts +131 -0
- package/tests/registry/test-dependencies.test.ts +70 -0
- package/tests/registry/test-entry-point.test.ts +133 -0
- package/tests/registry/test-metadata.test.ts +265 -0
- package/tests/registry/test-registry.test.ts +140 -0
- package/tests/registry/test-scanner.test.ts +257 -0
- package/tests/registry/test-schema-export.test.ts +224 -0
- package/tests/registry/test-validation.test.ts +75 -0
- package/tests/schema/test-loader.test.ts +97 -0
- package/tests/schema/test-ref-resolver.test.ts +105 -0
- package/tests/schema/test-strict.test.ts +139 -0
- package/tests/schema/test-validator.test.ts +64 -0
- package/tests/test-acl.test.ts +206 -0
- package/tests/test-bindings.test.ts +227 -0
- package/tests/test-config.test.ts +76 -0
- package/tests/test-context.test.ts +151 -0
- package/tests/test-decorator.test.ts +173 -0
- package/tests/test-errors.test.ts +204 -0
- package/tests/test-executor.test.ts +252 -0
- package/tests/test-middleware-manager.test.ts +185 -0
- package/tests/test-middleware.test.ts +86 -0
- package/tsconfig.build.json +8 -0
- package/tsconfig.json +20 -0
- package/vitest.config.ts +18 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { Middleware } from '../src/middleware/base.js';
|
|
3
|
+
import { BeforeMiddleware, AfterMiddleware } from '../src/middleware/adapters.js';
|
|
4
|
+
import { Context, createIdentity } from '../src/context.js';
|
|
5
|
+
|
|
6
|
+
function makeContext(): Context {
|
|
7
|
+
return Context.create(null, createIdentity('test-user'));
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
describe('Middleware base class', () => {
|
|
11
|
+
it('before() returns null by default', () => {
|
|
12
|
+
const mw = new Middleware();
|
|
13
|
+
const ctx = makeContext();
|
|
14
|
+
expect(mw.before('mod.a', { x: 1 }, ctx)).toBeNull();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('after() returns null by default', () => {
|
|
18
|
+
const mw = new Middleware();
|
|
19
|
+
const ctx = makeContext();
|
|
20
|
+
expect(mw.after('mod.a', { x: 1 }, { y: 2 }, ctx)).toBeNull();
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('onError() returns null by default', () => {
|
|
24
|
+
const mw = new Middleware();
|
|
25
|
+
const ctx = makeContext();
|
|
26
|
+
expect(mw.onError('mod.a', { x: 1 }, new Error('boom'), ctx)).toBeNull();
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
describe('BeforeMiddleware', () => {
|
|
31
|
+
it('wraps a callback and delegates to before()', () => {
|
|
32
|
+
const mw = new BeforeMiddleware((moduleId, inputs) => {
|
|
33
|
+
return { ...inputs, injected: moduleId };
|
|
34
|
+
});
|
|
35
|
+
const ctx = makeContext();
|
|
36
|
+
const result = mw.before('mod.x', { a: 1 }, ctx);
|
|
37
|
+
expect(result).toEqual({ a: 1, injected: 'mod.x' });
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('after() still returns null', () => {
|
|
41
|
+
const mw = new BeforeMiddleware(() => ({ replaced: true }));
|
|
42
|
+
const ctx = makeContext();
|
|
43
|
+
expect(mw.after('mod.x', {}, {}, ctx)).toBeNull();
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
it('onError() still returns null', () => {
|
|
47
|
+
const mw = new BeforeMiddleware(() => ({ replaced: true }));
|
|
48
|
+
const ctx = makeContext();
|
|
49
|
+
expect(mw.onError('mod.x', {}, new Error('fail'), ctx)).toBeNull();
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it('can return null from callback', () => {
|
|
53
|
+
const mw = new BeforeMiddleware(() => null);
|
|
54
|
+
const ctx = makeContext();
|
|
55
|
+
expect(mw.before('mod.x', { a: 1 }, ctx)).toBeNull();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
describe('AfterMiddleware', () => {
|
|
60
|
+
it('wraps a callback and delegates to after()', () => {
|
|
61
|
+
const mw = new AfterMiddleware((moduleId, _inputs, output) => {
|
|
62
|
+
return { ...output, processedBy: moduleId };
|
|
63
|
+
});
|
|
64
|
+
const ctx = makeContext();
|
|
65
|
+
const result = mw.after('mod.y', { a: 1 }, { out: 42 }, ctx);
|
|
66
|
+
expect(result).toEqual({ out: 42, processedBy: 'mod.y' });
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('before() still returns null', () => {
|
|
70
|
+
const mw = new AfterMiddleware(() => ({ replaced: true }));
|
|
71
|
+
const ctx = makeContext();
|
|
72
|
+
expect(mw.before('mod.y', {}, ctx)).toBeNull();
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('onError() still returns null', () => {
|
|
76
|
+
const mw = new AfterMiddleware(() => ({ replaced: true }));
|
|
77
|
+
const ctx = makeContext();
|
|
78
|
+
expect(mw.onError('mod.y', {}, new Error('fail'), ctx)).toBeNull();
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('can return null from callback', () => {
|
|
82
|
+
const mw = new AfterMiddleware(() => null);
|
|
83
|
+
const ctx = makeContext();
|
|
84
|
+
expect(mw.after('mod.y', {}, { out: 1 }, ctx)).toBeNull();
|
|
85
|
+
});
|
|
86
|
+
});
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"lib": ["ES2022"],
|
|
7
|
+
"strict": true,
|
|
8
|
+
"esModuleInterop": true,
|
|
9
|
+
"skipLibCheck": true,
|
|
10
|
+
"forceConsistentCasingInFileNames": true,
|
|
11
|
+
"declaration": true,
|
|
12
|
+
"declarationMap": true,
|
|
13
|
+
"sourceMap": true,
|
|
14
|
+
"outDir": "./dist",
|
|
15
|
+
"resolveJsonModule": true,
|
|
16
|
+
"isolatedModules": true
|
|
17
|
+
},
|
|
18
|
+
"include": ["src/**/*.ts", "tests/**/*.ts"],
|
|
19
|
+
"exclude": ["node_modules", "dist"]
|
|
20
|
+
}
|
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { defineConfig } from 'vitest/config';
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
test: {
|
|
5
|
+
globals: true,
|
|
6
|
+
coverage: {
|
|
7
|
+
provider: 'v8',
|
|
8
|
+
include: ['src/**/*.ts'],
|
|
9
|
+
exclude: ['src/**/index.ts'],
|
|
10
|
+
thresholds: {
|
|
11
|
+
lines: 90,
|
|
12
|
+
functions: 90,
|
|
13
|
+
branches: 90,
|
|
14
|
+
statements: 90,
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
});
|