@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.
Files changed (61) hide show
  1. package/dist/app.d.ts +228 -0
  2. package/dist/app.d.ts.map +1 -0
  3. package/dist/app.js +519 -0
  4. package/dist/app.js.map +1 -0
  5. package/dist/components.d.ts +28 -0
  6. package/dist/components.d.ts.map +1 -0
  7. package/dist/components.js +14 -0
  8. package/dist/components.js.map +1 -0
  9. package/dist/decorator.d.ts +54 -0
  10. package/dist/decorator.d.ts.map +1 -0
  11. package/dist/decorator.js +36 -0
  12. package/dist/decorator.js.map +1 -0
  13. package/dist/defaults-handles.d.ts +25 -0
  14. package/dist/defaults-handles.d.ts.map +1 -0
  15. package/dist/defaults-handles.js +25 -0
  16. package/dist/defaults-handles.js.map +1 -0
  17. package/dist/defaults.d.ts +10 -0
  18. package/dist/defaults.d.ts.map +1 -0
  19. package/dist/defaults.js +49 -0
  20. package/dist/defaults.js.map +1 -0
  21. package/dist/errors.d.ts +37 -0
  22. package/dist/errors.d.ts.map +1 -0
  23. package/dist/errors.js +53 -0
  24. package/dist/errors.js.map +1 -0
  25. package/dist/index.d.ts +17 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +12 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/kronos.d.ts +51 -0
  30. package/dist/kronos.d.ts.map +1 -0
  31. package/dist/kronos.js +74 -0
  32. package/dist/kronos.js.map +1 -0
  33. package/dist/lifecycle.d.ts +27 -0
  34. package/dist/lifecycle.d.ts.map +1 -0
  35. package/dist/lifecycle.js +7 -0
  36. package/dist/lifecycle.js.map +1 -0
  37. package/dist/resolved.d.ts +18 -0
  38. package/dist/resolved.d.ts.map +1 -0
  39. package/dist/resolved.js +43 -0
  40. package/dist/resolved.js.map +1 -0
  41. package/dist/slot-registry.d.ts +35 -0
  42. package/dist/slot-registry.d.ts.map +1 -0
  43. package/dist/slot-registry.js +50 -0
  44. package/dist/slot-registry.js.map +1 -0
  45. package/dist/warnings.d.ts +19 -0
  46. package/dist/warnings.d.ts.map +1 -0
  47. package/dist/warnings.js +14 -0
  48. package/dist/warnings.js.map +1 -0
  49. package/package.json +59 -0
  50. package/src/app.ts +795 -0
  51. package/src/components.ts +48 -0
  52. package/src/decorator.ts +88 -0
  53. package/src/defaults-handles.ts +29 -0
  54. package/src/defaults.ts +64 -0
  55. package/src/errors.ts +62 -0
  56. package/src/index.ts +38 -0
  57. package/src/kronos.ts +117 -0
  58. package/src/lifecycle.ts +33 -0
  59. package/src/resolved.ts +54 -0
  60. package/src/slot-registry.ts +89 -0
  61. 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"}
@@ -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
+ }