@ddd-ts/event-tree 0.0.0-eventviz.13 → 0.0.0-eventviz.15

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 (36) hide show
  1. package/dist/engine/config.d.ts +25 -0
  2. package/dist/engine/config.d.ts.map +1 -0
  3. package/dist/engine/config.mjs +28 -0
  4. package/dist/engine/defaults/_example.d.ts +2 -1
  5. package/dist/engine/defaults/_example.d.ts.map +1 -1
  6. package/dist/engine/defaults/command-handler.d.ts +2 -1
  7. package/dist/engine/defaults/command-handler.d.ts.map +1 -1
  8. package/dist/engine/defaults/command-handler.mjs +30 -29
  9. package/dist/engine/defaults/command.d.ts +2 -1
  10. package/dist/engine/defaults/command.d.ts.map +1 -1
  11. package/dist/engine/defaults/command.mjs +23 -22
  12. package/dist/engine/defaults/es-aggregate.d.ts +2 -1
  13. package/dist/engine/defaults/es-aggregate.d.ts.map +1 -1
  14. package/dist/engine/defaults/es-aggregate.mjs +72 -71
  15. package/dist/engine/defaults/event.d.ts +2 -1
  16. package/dist/engine/defaults/event.d.ts.map +1 -1
  17. package/dist/engine/defaults/event.mjs +29 -28
  18. package/dist/engine/defaults/index.d.ts +2 -7
  19. package/dist/engine/defaults/index.d.ts.map +1 -1
  20. package/dist/engine/defaults/index.mjs +19 -8
  21. package/dist/engine/defaults/projection.d.ts +2 -1
  22. package/dist/engine/defaults/projection.d.ts.map +1 -1
  23. package/dist/engine/defaults/projection.mjs +48 -47
  24. package/dist/engine/defaults/saga.d.ts +2 -1
  25. package/dist/engine/defaults/saga.d.ts.map +1 -1
  26. package/dist/engine/defaults/saga.mjs +67 -66
  27. package/dist/engine/defaults/scanner.d.ts +2 -1
  28. package/dist/engine/defaults/scanner.d.ts.map +1 -1
  29. package/dist/engine/defaults/scanner.mjs +24 -23
  30. package/dist/engine/engine.d.ts +1 -0
  31. package/dist/engine/engine.d.ts.map +1 -1
  32. package/dist/engine/engine.mjs +8 -3
  33. package/dist/index.mjs +3 -2
  34. package/dist/server/index.d.ts +2 -1
  35. package/dist/server/index.d.ts.map +1 -1
  36. package/package.json +3 -2
@@ -0,0 +1,25 @@
1
+ import { Engine } from "./engine";
2
+ export interface EventTreeConfig {
3
+ /**
4
+ * A fully custom engine. When provided, defaults are not applied and `setup`
5
+ * is ignored — the engine is used as-is.
6
+ */
7
+ engine?: Engine;
8
+ /**
9
+ * Hook to extend the default engine with extra parsers/scanners.
10
+ * Ignored when `engine` is provided.
11
+ */
12
+ setup?: (engine: Engine) => void | Promise<void>;
13
+ }
14
+ export declare function defineConfig(config: EventTreeConfig): EventTreeConfig;
15
+ /**
16
+ * Loads the user's event-tree config (if any) and returns an Engine.
17
+ *
18
+ * Looks for `.config/ddd-ts/event-tree.{ts,js,mjs,cjs,json,…}` relative to
19
+ * `cwd`. The `.config/ddd-ts/` folder is the shared home for all ddd-ts tool
20
+ * configs.
21
+ *
22
+ * If no config is found, the default engine is returned.
23
+ */
24
+ export declare function loadEngine(cwd?: string): Promise<Engine>;
25
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/engine/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvD,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAErE;AAED;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAc7E"}
@@ -0,0 +1,28 @@
1
+ import { createDefaultEngine } from "./engine.mjs";
2
+ import { loadConfig } from "c12";
3
+ //#region src/engine/config.ts
4
+ function defineConfig(config) {
5
+ return config;
6
+ }
7
+ /**
8
+ * Loads the user's event-tree config (if any) and returns an Engine.
9
+ *
10
+ * Looks for `.config/ddd-ts/event-tree.{ts,js,mjs,cjs,json,…}` relative to
11
+ * `cwd`. The `.config/ddd-ts/` folder is the shared home for all ddd-ts tool
12
+ * configs.
13
+ *
14
+ * If no config is found, the default engine is returned.
15
+ */
16
+ async function loadEngine(cwd = process.cwd()) {
17
+ const { config } = await loadConfig({
18
+ cwd,
19
+ configFile: ".config/ddd-ts/event-tree",
20
+ rcFile: false
21
+ });
22
+ if (config?.engine) return config.engine;
23
+ const engine = createDefaultEngine();
24
+ if (config?.setup) await config.setup(engine);
25
+ return engine;
26
+ }
27
+ //#endregion
28
+ export { defineConfig, loadEngine };
@@ -1,2 +1,3 @@
1
- export {};
1
+ import type { Engine } from "../engine";
2
+ export declare function applyExampleDefaults(engine: Engine): void;
2
3
  //# sourceMappingURL=_example.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"_example.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/_example.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"_example.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/_example.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,QAMlD"}
@@ -1,2 +1,3 @@
1
- export {};
1
+ import type { Engine } from "../engine";
2
+ export declare function applyCommandHandlerDefaults(engine: Engine): void;
2
3
  //# sourceMappingURL=command-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command-handler.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/command-handler.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"command-handler.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/command-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGxC,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,QA4BzD"}
@@ -1,34 +1,35 @@
1
- import { engine } from "../engine.mjs";
2
1
  import { identifierName, superGenericIdentifier, walkSubtree } from "./_utils.mjs";
3
2
  //#region src/engine/defaults/command-handler.ts
4
- engine.on((node, parent, ctx, file) => {
5
- if (node.type !== "ClassDeclaration") return;
6
- if (!node.id) return;
7
- const sup = node.superClass;
8
- if (sup?.type !== "Identifier" || sup.name !== "CommandHandler") return;
9
- const command = superGenericIdentifier(node);
10
- if (!command) return;
11
- const seen = /* @__PURE__ */ new Set();
12
- walkSubtree(node.body, (n) => {
13
- if (n.type !== "NewExpression") return;
14
- const event = identifierName(n.callee);
15
- if (!event || seen.has(event)) return;
16
- seen.add(event);
17
- engine.saveEdge({
18
- from: {
19
- type: "command",
20
- name: command
21
- },
22
- to: {
23
- type: "event",
24
- name: event
25
- },
26
- source: {
27
- file,
28
- start: n.start
29
- }
3
+ function applyCommandHandlerDefaults(engine) {
4
+ engine.on((node, parent, ctx, file) => {
5
+ if (node.type !== "ClassDeclaration") return;
6
+ if (!node.id) return;
7
+ const sup = node.superClass;
8
+ if (sup?.type !== "Identifier" || sup.name !== "CommandHandler") return;
9
+ const command = superGenericIdentifier(node);
10
+ if (!command) return;
11
+ const seen = /* @__PURE__ */ new Set();
12
+ walkSubtree(node.body, (n) => {
13
+ if (n.type !== "NewExpression") return;
14
+ const event = identifierName(n.callee);
15
+ if (!event || seen.has(event)) return;
16
+ seen.add(event);
17
+ engine.saveEdge({
18
+ from: {
19
+ type: "command",
20
+ name: command
21
+ },
22
+ to: {
23
+ type: "event",
24
+ name: event
25
+ },
26
+ source: {
27
+ file,
28
+ start: n.start
29
+ }
30
+ });
30
31
  });
31
32
  });
32
- });
33
+ }
33
34
  //#endregion
34
- export {};
35
+ export { applyCommandHandlerDefaults };
@@ -1,2 +1,3 @@
1
- export {};
1
+ import type { Engine } from "../engine";
2
+ export declare function applyCommandDefaults(engine: Engine): void;
2
3
  //# sourceMappingURL=command.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/command.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAIxC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,QAyBlD"}
@@ -1,27 +1,28 @@
1
- import { engine } from "../engine.mjs";
2
1
  //#region src/engine/defaults/command.ts
3
2
  const COMMAND_BASES = new Set(["$Command", "Command"]);
4
- engine.on((node, parent, ctx, file) => {
5
- if (node.type !== "ClassDeclaration") return;
6
- if (!node.id) return;
7
- const sup = node.superClass;
8
- if (!sup) return;
9
- let base = null;
10
- if (sup.type === "Identifier") {
11
- if (COMMAND_BASES.has(sup.name)) base = sup.name;
12
- } else if (sup.type === "CallExpression") {
13
- if (sup.callee?.type === "Identifier" && COMMAND_BASES.has(sup.callee.name)) base = sup.callee.name;
14
- }
15
- if (!base) return;
16
- engine.saveNode({
17
- type: "command",
18
- name: node.id.name,
19
- meta: { base },
20
- source: {
21
- file,
22
- start: node.start
3
+ function applyCommandDefaults(engine) {
4
+ engine.on((node, parent, ctx, file) => {
5
+ if (node.type !== "ClassDeclaration") return;
6
+ if (!node.id) return;
7
+ const sup = node.superClass;
8
+ if (!sup) return;
9
+ let base = null;
10
+ if (sup.type === "Identifier") {
11
+ if (COMMAND_BASES.has(sup.name)) base = sup.name;
12
+ } else if (sup.type === "CallExpression") {
13
+ if (sup.callee?.type === "Identifier" && COMMAND_BASES.has(sup.callee.name)) base = sup.callee.name;
23
14
  }
15
+ if (!base) return;
16
+ engine.saveNode({
17
+ type: "command",
18
+ name: node.id.name,
19
+ meta: { base },
20
+ source: {
21
+ file,
22
+ start: node.start
23
+ }
24
+ });
24
25
  });
25
- });
26
+ }
26
27
  //#endregion
27
- export {};
28
+ export { applyCommandDefaults };
@@ -1,2 +1,3 @@
1
- export {};
1
+ import type { Engine } from "../engine";
2
+ export declare function applyEsAggregateDefaults(engine: Engine): void;
2
3
  //# sourceMappingURL=es-aggregate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"es-aggregate.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/es-aggregate.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"es-aggregate.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/es-aggregate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAUxC,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,QAwDtD"}
@@ -1,4 +1,3 @@
1
- import { engine } from "../engine.mjs";
2
1
  import { classMethods, methodEffects, methodName, reactorEvents } from "./_utils.mjs";
3
2
  //#region src/engine/defaults/es-aggregate.ts
4
3
  const REACTOR_DECORATORS = new Set([
@@ -6,75 +5,77 @@ const REACTOR_DECORATORS = new Set([
6
5
  "on",
7
6
  "On"
8
7
  ]);
9
- engine.on((node, parent, ctx, file) => {
10
- if (node.type !== "ClassDeclaration") return;
11
- if (!node.id) return;
12
- const sup = node.superClass;
13
- if (!sup) return;
14
- if (sup.type === "Identifier") {
15
- if (sup.name !== "EsAggregate") return;
16
- } else if (sup.type === "CallExpression") {
17
- if (sup.callee?.type !== "Identifier" || sup.callee.name !== "EsAggregate") return;
18
- } else return;
19
- const className = node.id.name;
20
- for (const method of classMethods(node)) {
21
- const name = methodName(method);
22
- if (!name) continue;
23
- const events = reactorEvents(method.decorators, REACTOR_DECORATORS);
24
- if (!events.length) continue;
25
- const handlerName = `${className}.${name}`;
26
- engine.saveNode({
27
- type: "aggregate",
28
- name: handlerName,
29
- source: {
30
- file,
31
- start: method.start
32
- }
33
- });
34
- for (const event of events) engine.saveEdge({
35
- from: {
36
- type: "event",
37
- name: event
38
- },
39
- to: {
8
+ function applyEsAggregateDefaults(engine) {
9
+ engine.on((node, parent, ctx, file) => {
10
+ if (node.type !== "ClassDeclaration") return;
11
+ if (!node.id) return;
12
+ const sup = node.superClass;
13
+ if (!sup) return;
14
+ if (sup.type === "Identifier") {
15
+ if (sup.name !== "EsAggregate") return;
16
+ } else if (sup.type === "CallExpression") {
17
+ if (sup.callee?.type !== "Identifier" || sup.callee.name !== "EsAggregate") return;
18
+ } else return;
19
+ const className = node.id.name;
20
+ for (const method of classMethods(node)) {
21
+ const name = methodName(method);
22
+ if (!name) continue;
23
+ const events = reactorEvents(method.decorators, REACTOR_DECORATORS);
24
+ if (!events.length) continue;
25
+ const handlerName = `${className}.${name}`;
26
+ engine.saveNode({
40
27
  type: "aggregate",
41
- name: handlerName
42
- },
43
- source: {
44
- file,
45
- start: method.start
46
- }
47
- });
48
- const effects = methodEffects(method);
49
- for (const command of effects.sends) engine.saveEdge({
50
- from: {
51
- type: "aggregate",
52
- name: handlerName
53
- },
54
- to: {
55
- type: "command",
56
- name: command
57
- },
58
- source: {
59
- file,
60
- start: method.start
61
- }
62
- });
63
- for (const event of effects.emits) engine.saveEdge({
64
- from: {
65
- type: "aggregate",
66
- name: handlerName
67
- },
68
- to: {
69
- type: "event",
70
- name: event
71
- },
72
- source: {
73
- file,
74
- start: method.start
75
- }
76
- });
77
- }
78
- });
28
+ name: handlerName,
29
+ source: {
30
+ file,
31
+ start: method.start
32
+ }
33
+ });
34
+ for (const event of events) engine.saveEdge({
35
+ from: {
36
+ type: "event",
37
+ name: event
38
+ },
39
+ to: {
40
+ type: "aggregate",
41
+ name: handlerName
42
+ },
43
+ source: {
44
+ file,
45
+ start: method.start
46
+ }
47
+ });
48
+ const effects = methodEffects(method);
49
+ for (const command of effects.sends) engine.saveEdge({
50
+ from: {
51
+ type: "aggregate",
52
+ name: handlerName
53
+ },
54
+ to: {
55
+ type: "command",
56
+ name: command
57
+ },
58
+ source: {
59
+ file,
60
+ start: method.start
61
+ }
62
+ });
63
+ for (const event of effects.emits) engine.saveEdge({
64
+ from: {
65
+ type: "aggregate",
66
+ name: handlerName
67
+ },
68
+ to: {
69
+ type: "event",
70
+ name: event
71
+ },
72
+ source: {
73
+ file,
74
+ start: method.start
75
+ }
76
+ });
77
+ }
78
+ });
79
+ }
79
80
  //#endregion
80
- export {};
81
+ export { applyEsAggregateDefaults };
@@ -1,2 +1,3 @@
1
- export {};
1
+ import type { Engine } from "../engine";
2
+ export declare function applyEventDefaults(engine: Engine): void;
2
3
  //# sourceMappingURL=event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/event.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/event.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAKxC,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,QAkChD"}
@@ -1,4 +1,3 @@
1
- import { engine } from "../engine.mjs";
2
1
  import { readStringLiteral } from "./_utils.mjs";
3
2
  //#region src/engine/defaults/event.ts
4
3
  const EVENT_BASES = new Set([
@@ -6,42 +5,44 @@ const EVENT_BASES = new Set([
6
5
  "OldEvent",
7
6
  "Event"
8
7
  ]);
9
- engine.on((node, parent, ctx, file) => {
10
- if (node.type !== "ClassDeclaration") return;
11
- if (!node.id) return;
12
- const sup = node.superClass;
13
- if (!sup) return;
14
- if (sup.type === "Identifier") {
15
- if (!EVENT_BASES.has(sup.name)) return;
8
+ function applyEventDefaults(engine) {
9
+ engine.on((node, parent, ctx, file) => {
10
+ if (node.type !== "ClassDeclaration") return;
11
+ if (!node.id) return;
12
+ const sup = node.superClass;
13
+ if (!sup) return;
14
+ if (sup.type === "Identifier") {
15
+ if (!EVENT_BASES.has(sup.name)) return;
16
+ engine.saveNode({
17
+ type: "event",
18
+ name: node.id.name,
19
+ meta: {
20
+ alias: node.id.name,
21
+ base: sup.name
22
+ },
23
+ source: {
24
+ file,
25
+ start: node.start
26
+ }
27
+ });
28
+ return;
29
+ }
30
+ if (sup.type !== "CallExpression") return;
31
+ if (sup.callee?.type !== "Identifier") return;
32
+ if (!EVENT_BASES.has(sup.callee.name)) return;
16
33
  engine.saveNode({
17
34
  type: "event",
18
35
  name: node.id.name,
19
36
  meta: {
20
- alias: node.id.name,
21
- base: sup.name
37
+ alias: readStringLiteral(sup.arguments?.[0]) ?? node.id.name,
38
+ base: sup.callee.name
22
39
  },
23
40
  source: {
24
41
  file,
25
42
  start: node.start
26
43
  }
27
44
  });
28
- return;
29
- }
30
- if (sup.type !== "CallExpression") return;
31
- if (sup.callee?.type !== "Identifier") return;
32
- if (!EVENT_BASES.has(sup.callee.name)) return;
33
- engine.saveNode({
34
- type: "event",
35
- name: node.id.name,
36
- meta: {
37
- alias: readStringLiteral(sup.arguments?.[0]) ?? node.id.name,
38
- base: sup.callee.name
39
- },
40
- source: {
41
- file,
42
- start: node.start
43
- }
44
45
  });
45
- });
46
+ }
46
47
  //#endregion
47
- export {};
48
+ export { applyEventDefaults };
@@ -1,8 +1,3 @@
1
- import "./event";
2
- import "./command";
3
- import "./saga";
4
- import "./es-aggregate";
5
- import "./projection";
6
- import "./command-handler";
7
- import "./scanner";
1
+ import type { Engine } from "../engine";
2
+ export declare function applyDefaults(engine: Engine): void;
8
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,CAAC;AACjB,OAAO,WAAW,CAAC;AACnB,OAAO,QAAQ,CAAC;AAChB,OAAO,gBAAgB,CAAC;AACxB,OAAO,cAAc,CAAC;AACtB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AASxC,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,QAQ3C"}
@@ -1,8 +1,19 @@
1
- import "./event.mjs";
2
- import "./command.mjs";
3
- import "./saga.mjs";
4
- import "./es-aggregate.mjs";
5
- import "./projection.mjs";
6
- import "./command-handler.mjs";
7
- import "./scanner.mjs";
8
- export {};
1
+ import { applyCommandDefaults } from "./command.mjs";
2
+ import { applyCommandHandlerDefaults } from "./command-handler.mjs";
3
+ import { applyEsAggregateDefaults } from "./es-aggregate.mjs";
4
+ import { applyEventDefaults } from "./event.mjs";
5
+ import { applyProjectionDefaults } from "./projection.mjs";
6
+ import { applySagaDefaults } from "./saga.mjs";
7
+ import { applyScannerDefaults } from "./scanner.mjs";
8
+ //#region src/engine/defaults/index.ts
9
+ function applyDefaults(engine) {
10
+ applyEventDefaults(engine);
11
+ applyCommandDefaults(engine);
12
+ applySagaDefaults(engine);
13
+ applyEsAggregateDefaults(engine);
14
+ applyProjectionDefaults(engine);
15
+ applyCommandHandlerDefaults(engine);
16
+ applyScannerDefaults(engine);
17
+ }
18
+ //#endregion
19
+ export { applyDefaults };
@@ -1,2 +1,3 @@
1
- export {};
1
+ import type { Engine } from "../engine";
2
+ export declare function applyProjectionDefaults(engine: Engine): void;
2
3
  //# sourceMappingURL=projection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/projection.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAYxC,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,QA8CrD"}
@@ -1,4 +1,3 @@
1
- import { engine } from "../engine.mjs";
2
1
  import { classMethods, memberPath, methodName, reactorEvents, readStringLiteral } from "./_utils.mjs";
3
2
  //#region src/engine/defaults/projection.ts
4
3
  const REACTOR_DECORATORS = new Set([
@@ -7,51 +6,53 @@ const REACTOR_DECORATORS = new Set([
7
6
  "On"
8
7
  ]);
9
8
  const PROJECTION_CALLEES = new Set(["Projection", "Projection.from"]);
10
- engine.on((node, parent, ctx, file) => {
11
- if (node.type !== "ClassDeclaration") return;
12
- if (!node.id) return;
13
- const sup = node.superClass;
14
- if (!sup) return;
15
- let alias = null;
16
- if (sup.type === "Identifier") {
17
- if (sup.name !== "Projection") return;
18
- } else if (sup.type === "CallExpression") {
19
- const callee = memberPath(sup.callee);
20
- if (!callee || !PROJECTION_CALLEES.has(callee)) return;
21
- alias = readStringLiteral(sup.arguments?.[0]);
22
- } else return;
23
- const className = node.id.name;
24
- const projectionAlias = alias ?? className;
25
- for (const method of classMethods(node)) {
26
- const name = methodName(method);
27
- if (!name) continue;
28
- const events = reactorEvents(method.decorators, REACTOR_DECORATORS);
29
- if (!events.length) continue;
30
- const handlerName = `${className}.${name}`;
31
- engine.saveNode({
32
- type: "projection",
33
- name: handlerName,
34
- meta: { alias: `${projectionAlias}.${name}` },
35
- source: {
36
- file,
37
- start: method.start
38
- }
39
- });
40
- for (const event of events) engine.saveEdge({
41
- from: {
42
- type: "event",
43
- name: event
44
- },
45
- to: {
9
+ function applyProjectionDefaults(engine) {
10
+ engine.on((node, parent, ctx, file) => {
11
+ if (node.type !== "ClassDeclaration") return;
12
+ if (!node.id) return;
13
+ const sup = node.superClass;
14
+ if (!sup) return;
15
+ let alias = null;
16
+ if (sup.type === "Identifier") {
17
+ if (sup.name !== "Projection") return;
18
+ } else if (sup.type === "CallExpression") {
19
+ const callee = memberPath(sup.callee);
20
+ if (!callee || !PROJECTION_CALLEES.has(callee)) return;
21
+ alias = readStringLiteral(sup.arguments?.[0]);
22
+ } else return;
23
+ const className = node.id.name;
24
+ const projectionAlias = alias ?? className;
25
+ for (const method of classMethods(node)) {
26
+ const name = methodName(method);
27
+ if (!name) continue;
28
+ const events = reactorEvents(method.decorators, REACTOR_DECORATORS);
29
+ if (!events.length) continue;
30
+ const handlerName = `${className}.${name}`;
31
+ engine.saveNode({
46
32
  type: "projection",
47
- name: handlerName
48
- },
49
- source: {
50
- file,
51
- start: method.start
52
- }
53
- });
54
- }
55
- });
33
+ name: handlerName,
34
+ meta: { alias: `${projectionAlias}.${name}` },
35
+ source: {
36
+ file,
37
+ start: method.start
38
+ }
39
+ });
40
+ for (const event of events) engine.saveEdge({
41
+ from: {
42
+ type: "event",
43
+ name: event
44
+ },
45
+ to: {
46
+ type: "projection",
47
+ name: handlerName
48
+ },
49
+ source: {
50
+ file,
51
+ start: method.start
52
+ }
53
+ });
54
+ }
55
+ });
56
+ }
56
57
  //#endregion
57
- export {};
58
+ export { applyProjectionDefaults };
@@ -1,2 +1,3 @@
1
- export {};
1
+ import type { Engine } from "../engine";
2
+ export declare function applySagaDefaults(engine: Engine): void;
2
3
  //# sourceMappingURL=saga.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"saga.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/saga.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"saga.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/saga.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAUxC,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,QAiD/C"}
@@ -1,4 +1,3 @@
1
- import { engine } from "../engine.mjs";
2
1
  import { classMethods, methodEffects, methodName, reactorEvents } from "./_utils.mjs";
3
2
  //#region src/engine/defaults/saga.ts
4
3
  const REACTOR_DECORATORS = new Set([
@@ -6,70 +5,72 @@ const REACTOR_DECORATORS = new Set([
6
5
  "on",
7
6
  "On"
8
7
  ]);
9
- engine.on((node, parent, ctx, file) => {
10
- if (node.type !== "ClassDeclaration") return;
11
- if (!node.id) return;
12
- const sup = node.superClass;
13
- if (sup?.type !== "Identifier" || sup.name !== "Saga") return;
14
- const className = node.id.name;
15
- for (const method of classMethods(node)) {
16
- const name = methodName(method);
17
- if (!name) continue;
18
- const events = reactorEvents(method.decorators, REACTOR_DECORATORS);
19
- if (!events.length) continue;
20
- const handlerName = `${className}.${name}`;
21
- engine.saveNode({
22
- type: "saga",
23
- name: handlerName,
24
- source: {
25
- file,
26
- start: method.start
27
- }
28
- });
29
- for (const event of events) engine.saveEdge({
30
- from: {
31
- type: "event",
32
- name: event
33
- },
34
- to: {
8
+ function applySagaDefaults(engine) {
9
+ engine.on((node, parent, ctx, file) => {
10
+ if (node.type !== "ClassDeclaration") return;
11
+ if (!node.id) return;
12
+ const sup = node.superClass;
13
+ if (sup?.type !== "Identifier" || sup.name !== "Saga") return;
14
+ const className = node.id.name;
15
+ for (const method of classMethods(node)) {
16
+ const name = methodName(method);
17
+ if (!name) continue;
18
+ const events = reactorEvents(method.decorators, REACTOR_DECORATORS);
19
+ if (!events.length) continue;
20
+ const handlerName = `${className}.${name}`;
21
+ engine.saveNode({
35
22
  type: "saga",
36
- name: handlerName
37
- },
38
- source: {
39
- file,
40
- start: method.start
41
- }
42
- });
43
- const effects = methodEffects(method);
44
- for (const command of effects.sends) engine.saveEdge({
45
- from: {
46
- type: "saga",
47
- name: handlerName
48
- },
49
- to: {
50
- type: "command",
51
- name: command
52
- },
53
- source: {
54
- file,
55
- start: method.start
56
- }
57
- });
58
- for (const event of effects.emits) engine.saveEdge({
59
- from: {
60
- type: "saga",
61
- name: handlerName
62
- },
63
- to: {
64
- type: "event",
65
- name: event
66
- },
67
- source: {
68
- file,
69
- start: method.start
70
- }
71
- });
72
- }
73
- });
23
+ name: handlerName,
24
+ source: {
25
+ file,
26
+ start: method.start
27
+ }
28
+ });
29
+ for (const event of events) engine.saveEdge({
30
+ from: {
31
+ type: "event",
32
+ name: event
33
+ },
34
+ to: {
35
+ type: "saga",
36
+ name: handlerName
37
+ },
38
+ source: {
39
+ file,
40
+ start: method.start
41
+ }
42
+ });
43
+ const effects = methodEffects(method);
44
+ for (const command of effects.sends) engine.saveEdge({
45
+ from: {
46
+ type: "saga",
47
+ name: handlerName
48
+ },
49
+ to: {
50
+ type: "command",
51
+ name: command
52
+ },
53
+ source: {
54
+ file,
55
+ start: method.start
56
+ }
57
+ });
58
+ for (const event of effects.emits) engine.saveEdge({
59
+ from: {
60
+ type: "saga",
61
+ name: handlerName
62
+ },
63
+ to: {
64
+ type: "event",
65
+ name: event
66
+ },
67
+ source: {
68
+ file,
69
+ start: method.start
70
+ }
71
+ });
72
+ }
73
+ });
74
+ }
74
75
  //#endregion
75
- export {};
76
+ export { applySagaDefaults };
@@ -1,2 +1,3 @@
1
- export {};
1
+ import type { Engine } from "../engine";
2
+ export declare function applyScannerDefaults(engine: Engine): void;
2
3
  //# sourceMappingURL=scanner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/scanner.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../../src/engine/defaults/scanner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAExC,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,QAyBlD"}
@@ -1,27 +1,28 @@
1
- import { engine } from "../engine.mjs";
2
1
  import fs from "node:fs";
3
2
  import { join } from "node:path";
4
3
  //#region src/engine/defaults/scanner.ts
5
- engine.scan(function* (root = process.cwd()) {
6
- yield* fs.globSync("**/*.ts", {
7
- cwd: root,
8
- exclude: [
9
- "**/node_modules/**",
10
- "**/dist/**",
11
- "**/build/**",
12
- "**/.git/**",
13
- "**/.turbo/**",
14
- "**/coverage/**",
15
- "**/.next/**",
16
- "**/.cache/**",
17
- "**/.vite/**",
18
- "**/*.d.ts",
19
- "**/*.spec.ts",
20
- "**/*.test.ts",
21
- "**/*.typecheck.spec.ts"
22
- ],
23
- withFileTypes: false
24
- }).map((p) => join(root, p));
25
- });
4
+ function applyScannerDefaults(engine) {
5
+ engine.scan(function* (root = process.cwd()) {
6
+ yield* fs.globSync("**/*.ts", {
7
+ cwd: root,
8
+ exclude: [
9
+ "**/node_modules/**",
10
+ "**/dist/**",
11
+ "**/build/**",
12
+ "**/.git/**",
13
+ "**/.turbo/**",
14
+ "**/coverage/**",
15
+ "**/.next/**",
16
+ "**/.cache/**",
17
+ "**/.vite/**",
18
+ "**/*.d.ts",
19
+ "**/*.spec.ts",
20
+ "**/*.test.ts",
21
+ "**/*.typecheck.spec.ts"
22
+ ],
23
+ withFileTypes: false
24
+ }).map((p) => join(root, p));
25
+ });
26
+ }
26
27
  //#endregion
27
- export {};
28
+ export { applyScannerDefaults };
@@ -29,6 +29,7 @@ export declare class Engine {
29
29
  reset(): void;
30
30
  run(root?: string): void;
31
31
  }
32
+ export declare function createDefaultEngine(): Engine;
32
33
  export declare const engine: Engine;
33
34
  export {};
34
35
  //# sourceMappingURL=engine.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine/engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAEpC,KAAK,SAAS,GAAG,CACf,GAAG,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAChD,UAAU,CAAC,WAAW,CAAC,CAAC;AAE7B,qBAAa,MAAM;IACjB,OAAO,CAAC,UAAU,CAAmB;IAErC,EAAE,CAAC,MAAM,EAAE,SAAS;IAKpB,OAAO,CAAC,WAAW,CAIjB;IACF,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC;IAKpD,OAAO,CAAC,KAAK,CAAc;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI;IAGnB,QAAQ,IAAI,SAAS,IAAI,EAAE;IAI3B,OAAO,CAAC,KAAK,CAAc;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI;IAGnB,QAAQ,IAAI,SAAS,IAAI,EAAE;IAI3B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,YAAY;IAiCpB,KAAK;IAKL,GAAG,CAAC,IAAI,GAAE,MAAsB;CAqBjC;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/engine/engine.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAGpC,KAAK,SAAS,GAAG,CACf,GAAG,IAAI,EAAE,CAAC,GAAG,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAChD,UAAU,CAAC,WAAW,CAAC,CAAC;AAE7B,qBAAa,MAAM;IACjB,OAAO,CAAC,UAAU,CAAmB;IAErC,EAAE,CAAC,MAAM,EAAE,SAAS;IAKpB,OAAO,CAAC,WAAW,CAIjB;IACF,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC;IAKpD,OAAO,CAAC,KAAK,CAAc;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI;IAGnB,QAAQ,IAAI,SAAS,IAAI,EAAE;IAI3B,OAAO,CAAC,KAAK,CAAc;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI;IAGnB,QAAQ,IAAI,SAAS,IAAI,EAAE;IAI3B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,YAAY;IAiCpB,KAAK;IAKL,GAAG,CAAC,IAAI,GAAE,MAAsB;CAqBjC;AAED,wBAAgB,mBAAmB,IAAI,MAAM,CAI5C;AAED,eAAO,MAAM,MAAM,QAAwB,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { applyDefaults } from "./defaults/index.mjs";
1
2
  import fs from "node:fs";
2
3
  import { parseAndWalk } from "oxc-walker";
3
4
  //#region src/engine/engine.ts
@@ -80,7 +81,11 @@ var Engine = class {
80
81
  this.resolveEdges();
81
82
  }
82
83
  };
83
- const engine = new Engine();
84
- import("./defaults/index.mjs");
84
+ function createDefaultEngine() {
85
+ const engine = new Engine();
86
+ applyDefaults(engine);
87
+ return engine;
88
+ }
89
+ const engine = createDefaultEngine();
85
90
  //#endregion
86
- export { Engine, engine };
91
+ export { Engine, createDefaultEngine, engine };
package/dist/index.mjs CHANGED
@@ -1,2 +1,3 @@
1
- import { Engine, engine } from "./engine/engine.mjs";
2
- export { Engine, engine };
1
+ import { Engine, createDefaultEngine, engine } from "./engine/engine.mjs";
2
+ import { defineConfig, loadEngine } from "./engine/config.mjs";
3
+ export { Engine, createDefaultEngine, defineConfig, engine, loadEngine };
@@ -1,4 +1,5 @@
1
- export { engine, Engine } from "../engine/engine";
1
+ export { engine, Engine, createDefaultEngine } from "../engine/engine";
2
+ export { defineConfig, loadEngine, type EventTreeConfig } from "../engine/config";
2
3
  export type { Node } from "../node";
3
4
  export type { Edge } from "../edge";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,YAAY,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAClF,YAAY,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,YAAY,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ddd-ts/event-tree",
3
- "version": "0.0.0-eventviz.13",
3
+ "version": "0.0.0-eventviz.15",
4
4
  "types": "dist/server/index.d.ts",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -10,11 +10,12 @@
10
10
  "dist"
11
11
  ],
12
12
  "dependencies": {
13
+ "c12": "^3.3.0",
13
14
  "oxc-parser": "^0.128.0",
14
15
  "oxc-walker": "^1.0.0"
15
16
  },
16
17
  "devDependencies": {
17
- "@ddd-ts/tools": "0.0.0-eventviz.13",
18
+ "@ddd-ts/tools": "0.0.0-eventviz.15",
18
19
  "@types/node": "^22.14.1"
19
20
  },
20
21
  "exports": {