@kronos-ts/app 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/dist/app.d.ts +228 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +519 -0
- package/dist/app.js.map +1 -0
- package/dist/components.d.ts +28 -0
- package/dist/components.d.ts.map +1 -0
- package/dist/components.js +14 -0
- package/dist/components.js.map +1 -0
- package/dist/decorator.d.ts +54 -0
- package/dist/decorator.d.ts.map +1 -0
- package/dist/decorator.js +36 -0
- package/dist/decorator.js.map +1 -0
- package/dist/defaults-handles.d.ts +25 -0
- package/dist/defaults-handles.d.ts.map +1 -0
- package/dist/defaults-handles.js +25 -0
- package/dist/defaults-handles.js.map +1 -0
- package/dist/defaults.d.ts +10 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +49 -0
- package/dist/defaults.js.map +1 -0
- package/dist/errors.d.ts +37 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +53 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/kronos.d.ts +51 -0
- package/dist/kronos.d.ts.map +1 -0
- package/dist/kronos.js +74 -0
- package/dist/kronos.js.map +1 -0
- package/dist/lifecycle.d.ts +27 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +7 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/resolved.d.ts +18 -0
- package/dist/resolved.d.ts.map +1 -0
- package/dist/resolved.js +43 -0
- package/dist/resolved.js.map +1 -0
- package/dist/slot-registry.d.ts +35 -0
- package/dist/slot-registry.d.ts.map +1 -0
- package/dist/slot-registry.js +50 -0
- package/dist/slot-registry.js.map +1 -0
- package/dist/warnings.d.ts +19 -0
- package/dist/warnings.d.ts.map +1 -0
- package/dist/warnings.js +14 -0
- package/dist/warnings.js.map +1 -0
- package/package.json +59 -0
- package/src/app.ts +795 -0
- package/src/components.ts +48 -0
- package/src/decorator.ts +88 -0
- package/src/defaults-handles.ts +29 -0
- package/src/defaults.ts +64 -0
- package/src/errors.ts +62 -0
- package/src/index.ts +38 -0
- package/src/kronos.ts +117 -0
- package/src/lifecycle.ts +33 -0
- package/src/resolved.ts +54 -0
- package/src/slot-registry.ts +89 -0
- package/src/warnings.ts +32 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalize a factory-or-instance argument into a SlotFactory.
|
|
3
|
+
* SLT-03: plain instances (non-function values) become `() => instance` internally.
|
|
4
|
+
*/
|
|
5
|
+
function normalizeFactory(factoryOrInstance) {
|
|
6
|
+
if (typeof factoryOrInstance === "function") {
|
|
7
|
+
return factoryOrInstance;
|
|
8
|
+
}
|
|
9
|
+
const instance = factoryOrInstance;
|
|
10
|
+
return () => instance;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* SlotRegistry — the storage backing the App's three verbs.
|
|
14
|
+
* setDefault: ifAbsent (no-op if occupied)
|
|
15
|
+
* set: warn on double-set
|
|
16
|
+
* forceSet: silent overwrite
|
|
17
|
+
* (DESIGN.md §6, REQUIREMENTS.md SLT-02.)
|
|
18
|
+
*/
|
|
19
|
+
export class SlotRegistry {
|
|
20
|
+
slots = new Map();
|
|
21
|
+
setDefault(slot, factoryOrInstance, meta) {
|
|
22
|
+
if (this.slots.has(slot))
|
|
23
|
+
return;
|
|
24
|
+
this.slots.set(slot, { factory: normalizeFactory(factoryOrInstance), meta });
|
|
25
|
+
}
|
|
26
|
+
set(slot, factoryOrInstance) {
|
|
27
|
+
const existing = this.slots.get(slot);
|
|
28
|
+
// Provenance check: setDefault always writes a `meta` key (even when its value
|
|
29
|
+
// is undefined for stateless defaults like serializer / unitOfWorkFactory / tagResolver);
|
|
30
|
+
// set / forceSet never write the key at all. So `"meta" in existing` identifies a prior
|
|
31
|
+
// setDefault — those overrides are the expected "extension overrides in-memory default" path
|
|
32
|
+
// and should NOT warn. Genuine collisions (two set/forceSet calls on the same slot) DO warn.
|
|
33
|
+
if (existing && !("meta" in existing)) {
|
|
34
|
+
console.warn(`[kronos] slot "${slot}" override: already set. Use forceSet() to suppress this warning.`);
|
|
35
|
+
}
|
|
36
|
+
this.slots.set(slot, { factory: normalizeFactory(factoryOrInstance) });
|
|
37
|
+
}
|
|
38
|
+
forceSet(slot, factoryOrInstance) {
|
|
39
|
+
this.slots.set(slot, { factory: normalizeFactory(factoryOrInstance) });
|
|
40
|
+
}
|
|
41
|
+
/** @internal — used by buildResolved and by Plan 02's warning emitter. */
|
|
42
|
+
getEntry(slot) {
|
|
43
|
+
return this.slots.get(slot);
|
|
44
|
+
}
|
|
45
|
+
/** @internal — used by Plan 02 to iterate registered slots for startup warnings. */
|
|
46
|
+
has(slot) {
|
|
47
|
+
return this.slots.has(slot);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=slot-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot-registry.js","sourceRoot":"","sources":["../src/slot-registry.ts"],"names":[],"mappings":"AAqBA;;;GAGG;AACH,SAAS,gBAAgB,CACvB,iBAAuD;IAEvD,IAAI,OAAO,iBAAiB,KAAK,UAAU,EAAE,CAAC;QAC5C,OAAO,iBAAmC,CAAA;IAC5C,CAAC;IACD,MAAM,QAAQ,GAAG,iBAAiB,CAAA;IAClC,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAA;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IACN,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAA;IAEvD,UAAU,CACR,IAAO,EACP,iBAAuD,EACvD,IAAe;QAEf,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAM;QAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,iBAAiB,CAA0B,EAAE,IAAI,EAAE,CAAC,CAAA;IACvG,CAAC;IAED,GAAG,CACD,IAAO,EACP,iBAAuD;QAEvD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACrC,+EAA+E;QAC/E,0FAA0F;QAC1F,wFAAwF;QACxF,6FAA6F;QAC7F,6FAA6F;QAC7F,IAAI,QAAQ,IAAI,CAAC,CAAC,MAAM,IAAI,QAAQ,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,IAAI,CACV,kBAAkB,IAAI,mEAAmE,CAC1F,CAAA;QACH,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,iBAAiB,CAA0B,EAAE,CAAC,CAAA;IACjG,CAAC;IAED,QAAQ,CACN,IAAO,EACP,iBAAuD;QAEvD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,iBAAiB,CAA0B,EAAE,CAAC,CAAA;IACjG,CAAC;IAED,0EAA0E;IAC1E,QAAQ,CAAqB,IAAO;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAA6B,CAAA;IACzD,CAAC;IAED,oFAAoF;IACpF,GAAG,CAAC,IAAc;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smallest viable logger interface (D-51) — just `warn(msg: string)`.
|
|
3
|
+
* Phase 5 only emits startup warnings for in-memory defaults; richer levels
|
|
4
|
+
* are intentionally NOT in scope.
|
|
5
|
+
*/
|
|
6
|
+
export interface WarningLogger {
|
|
7
|
+
warn(msg: string): void;
|
|
8
|
+
}
|
|
9
|
+
export interface WarningChannelOptions {
|
|
10
|
+
/** When true, suppress all warnings (kronos({ quiet: true })). */
|
|
11
|
+
quiet?: boolean;
|
|
12
|
+
/** When set, route warnings here instead of console.warn. `quiet` takes precedence over `logger`. */
|
|
13
|
+
logger?: WarningLogger;
|
|
14
|
+
}
|
|
15
|
+
export interface WarningChannel {
|
|
16
|
+
emit(msg: string): void;
|
|
17
|
+
}
|
|
18
|
+
export declare function createWarningChannel(options?: WarningChannelOptions): WarningChannel;
|
|
19
|
+
//# sourceMappingURL=warnings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warnings.d.ts","sourceRoot":"","sources":["../src/warnings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,qGAAqG;IACrG,MAAM,CAAC,EAAE,aAAa,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc,CAWxF"}
|
package/dist/warnings.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function createWarningChannel(options = {}) {
|
|
2
|
+
return {
|
|
3
|
+
emit(msg) {
|
|
4
|
+
if (options.quiet)
|
|
5
|
+
return;
|
|
6
|
+
if (options.logger) {
|
|
7
|
+
options.logger.warn(msg);
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
console.warn(msg);
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=warnings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"warnings.js","sourceRoot":"","sources":["../src/warnings.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,oBAAoB,CAAC,UAAiC,EAAE;IACtE,OAAO;QACL,IAAI,CAAC,GAAW;YACd,IAAI,OAAO,CAAC,KAAK;gBAAE,OAAM;YACzB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACxB,OAAM;YACR,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACnB,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@kronos-ts/app",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Application container for Kronos — the kronos() builder, lifecycle, and extensions.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"author": "Theo Emanuelsson",
|
|
8
|
+
"homepage": "https://github.com/KronosDB/kronos-ts/tree/main/packages/app#readme",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/KronosDB/kronos-ts.git",
|
|
12
|
+
"directory": "packages/app"
|
|
13
|
+
},
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/KronosDB/kronos-ts/issues"
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"kronos",
|
|
19
|
+
"event-sourcing",
|
|
20
|
+
"cqrs",
|
|
21
|
+
"dcb",
|
|
22
|
+
"typescript"
|
|
23
|
+
],
|
|
24
|
+
"sideEffects": false,
|
|
25
|
+
"main": "src/index.ts",
|
|
26
|
+
"types": "src/index.ts",
|
|
27
|
+
"exports": {
|
|
28
|
+
".": "./src/index.ts"
|
|
29
|
+
},
|
|
30
|
+
"files": [
|
|
31
|
+
"dist",
|
|
32
|
+
"src",
|
|
33
|
+
"!src/**/__tests__",
|
|
34
|
+
"!src/**/*.test.ts",
|
|
35
|
+
"!src/**/*.bench.ts"
|
|
36
|
+
],
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "tsc -p tsconfig.json",
|
|
39
|
+
"clean": "rm -rf dist *.tsbuildinfo"
|
|
40
|
+
},
|
|
41
|
+
"publishConfig": {
|
|
42
|
+
"access": "public",
|
|
43
|
+
"main": "./dist/index.js",
|
|
44
|
+
"types": "./dist/index.d.ts",
|
|
45
|
+
"exports": {
|
|
46
|
+
".": {
|
|
47
|
+
"types": "./dist/index.d.ts",
|
|
48
|
+
"default": "./dist/index.js"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@kronos-ts/common": "workspace:*",
|
|
54
|
+
"@kronos-ts/messaging": "workspace:*",
|
|
55
|
+
"@kronos-ts/eventsourcing": "workspace:*",
|
|
56
|
+
"@kronos-ts/modelling": "workspace:*",
|
|
57
|
+
"zod": "^4.3.6"
|
|
58
|
+
}
|
|
59
|
+
}
|