@typeonce/effect-machine-devtools 0.23.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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +3 -0
  3. package/README.md +81 -0
  4. package/dist/DevServer.d.ts +42 -0
  5. package/dist/DevServer.d.ts.map +1 -0
  6. package/dist/DevServer.js +28 -0
  7. package/dist/DevServer.js.map +1 -0
  8. package/dist/DevToolsProtocol.d.ts +954 -0
  9. package/dist/DevToolsProtocol.d.ts.map +1 -0
  10. package/dist/DevToolsProtocol.js +96 -0
  11. package/dist/DevToolsProtocol.js.map +1 -0
  12. package/dist/MachineDocument.d.ts +396 -0
  13. package/dist/MachineDocument.d.ts.map +1 -0
  14. package/dist/MachineDocument.js +172 -0
  15. package/dist/MachineDocument.js.map +1 -0
  16. package/dist/MachineRegistry.d.ts +349 -0
  17. package/dist/MachineRegistry.d.ts.map +1 -0
  18. package/dist/MachineRegistry.js +46 -0
  19. package/dist/MachineRegistry.js.map +1 -0
  20. package/dist/MachineSimulator.d.ts +169 -0
  21. package/dist/MachineSimulator.d.ts.map +1 -0
  22. package/dist/MachineSimulator.js +98 -0
  23. package/dist/MachineSimulator.js.map +1 -0
  24. package/dist/ProjectInspector.d.ts +116 -0
  25. package/dist/ProjectInspector.d.ts.map +1 -0
  26. package/dist/ProjectInspector.js +82 -0
  27. package/dist/ProjectInspector.js.map +1 -0
  28. package/dist/bin.d.ts +3 -0
  29. package/dist/bin.d.ts.map +1 -0
  30. package/dist/bin.js +23 -0
  31. package/dist/bin.js.map +1 -0
  32. package/dist/client/assets/index-BGOhE3Ng.css +1 -0
  33. package/dist/client/assets/index-DiqGhsGR.js +14 -0
  34. package/dist/client/index.html +14 -0
  35. package/dist/index.d.ts +18 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +18 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/internal/devServer.d.ts +9 -0
  40. package/dist/internal/devServer.d.ts.map +1 -0
  41. package/dist/internal/devServer.js +119 -0
  42. package/dist/internal/devServer.js.map +1 -0
  43. package/dist/internal/evaluationWorker.d.ts +3 -0
  44. package/dist/internal/evaluationWorker.d.ts.map +1 -0
  45. package/dist/internal/evaluationWorker.js +69 -0
  46. package/dist/internal/evaluationWorker.js.map +1 -0
  47. package/dist/internal/evaluationWorkerBootstrap.d.ts +2 -0
  48. package/dist/internal/evaluationWorkerBootstrap.d.ts.map +1 -0
  49. package/dist/internal/evaluationWorkerBootstrap.js +21 -0
  50. package/dist/internal/evaluationWorkerBootstrap.js.map +1 -0
  51. package/dist/internal/machineDocument.d.ts +4 -0
  52. package/dist/internal/machineDocument.d.ts.map +1 -0
  53. package/dist/internal/machineDocument.js +122 -0
  54. package/dist/internal/machineDocument.js.map +1 -0
  55. package/dist/internal/machineRegistry.d.ts +12 -0
  56. package/dist/internal/machineRegistry.d.ts.map +1 -0
  57. package/dist/internal/machineRegistry.js +97 -0
  58. package/dist/internal/machineRegistry.js.map +1 -0
  59. package/dist/internal/machineSimulator.d.ts +5 -0
  60. package/dist/internal/machineSimulator.d.ts.map +1 -0
  61. package/dist/internal/machineSimulator.js +156 -0
  62. package/dist/internal/machineSimulator.js.map +1 -0
  63. package/dist/internal/projectInspector.d.ts +11 -0
  64. package/dist/internal/projectInspector.d.ts.map +1 -0
  65. package/dist/internal/projectInspector.js +150 -0
  66. package/dist/internal/projectInspector.js.map +1 -0
  67. package/index.html +13 -0
  68. package/package.json +69 -0
  69. package/src/DevServer.ts +45 -0
  70. package/src/DevToolsProtocol.ts +146 -0
  71. package/src/MachineDocument.ts +264 -0
  72. package/src/MachineRegistry.ts +69 -0
  73. package/src/MachineSimulator.ts +154 -0
  74. package/src/ProjectInspector.ts +140 -0
  75. package/src/bin.ts +56 -0
  76. package/src/index.ts +20 -0
  77. package/src/internal/browser/example-machine.ts +134 -0
  78. package/src/internal/browser/machine-index.ts +81 -0
  79. package/src/internal/browser/main.ts +42 -0
  80. package/src/internal/browser/styles.css +817 -0
  81. package/src/internal/browser/text-tree.ts +214 -0
  82. package/src/internal/browser/visualizer-app.ts +659 -0
  83. package/src/internal/browser/visualizer-model.ts +173 -0
  84. package/src/internal/browser/visualizer.ts +31 -0
  85. package/src/internal/devServer.ts +171 -0
  86. package/src/internal/evaluationWorker.ts +138 -0
  87. package/src/internal/evaluationWorkerBootstrap.js +21 -0
  88. package/src/internal/machineDocument.ts +138 -0
  89. package/src/internal/machineRegistry.ts +128 -0
  90. package/src/internal/machineSimulator.ts +199 -0
  91. package/src/internal/projectInspector.ts +226 -0
@@ -0,0 +1,122 @@
1
+ import { Machine } from "@typeonce/effect-machine";
2
+ const enabled = Machine.enabled;
3
+ const selection = (value) => ({
4
+ path: value.path ?? null,
5
+ kind: value.kind,
6
+ scope: value.scope ?? null
7
+ });
8
+ const trigger = (value) => {
9
+ switch (value.type) {
10
+ case "event":
11
+ return { type: "event", event: String(value.event) };
12
+ case "always":
13
+ return { type: "always" };
14
+ case "done":
15
+ return { type: "done" };
16
+ case "choice":
17
+ return { type: "choice" };
18
+ case "invoke":
19
+ return { type: "invoke", id: value.id, outcome: value.outcome };
20
+ }
21
+ };
22
+ const activity = (value, id) => {
23
+ const common = { id, source: value.source, lifecycleId: value.id };
24
+ switch (value.type) {
25
+ case "process":
26
+ return { ...common, type: "process" };
27
+ case "effect":
28
+ return { ...common, type: "effect", outcomes: { ...value.outcomes } };
29
+ case "timer":
30
+ return { ...common, type: "timer", duration: value.duration };
31
+ case "stream":
32
+ return { ...common, type: "stream" };
33
+ case "machine":
34
+ return { ...common, type: "machine", child: { ...value.child } };
35
+ }
36
+ };
37
+ const appendReference = (index, owner, id) => {
38
+ const references = index.get(owner) ?? [];
39
+ references.push(id);
40
+ index.set(owner, references);
41
+ };
42
+ export const make = (machine, options = {}) => {
43
+ const nodes = Machine.stateNodes(machine);
44
+ const transitionIds = new Map();
45
+ const activityIds = new Map();
46
+ const transitionOffsets = new Map();
47
+ const activityOffsets = new Map();
48
+ const childPaths = new Map();
49
+ for (const node of nodes) {
50
+ const parent = node.parent ?? null;
51
+ const siblings = childPaths.get(parent) ?? [];
52
+ siblings.push(node.path);
53
+ childPaths.set(parent, siblings);
54
+ }
55
+ const transitions = Machine.transitionDefinitions(machine).map((definition) => {
56
+ const offset = transitionOffsets.get(definition.source) ?? 0;
57
+ transitionOffsets.set(definition.source, offset + 1);
58
+ const id = `${definition.source}:transition:${offset}`;
59
+ appendReference(transitionIds, definition.source, id);
60
+ return {
61
+ id,
62
+ source: definition.source,
63
+ trigger: trigger(definition.trigger),
64
+ reenter: definition.reenter,
65
+ acceptance: definition.acceptance,
66
+ branches: definition.branches.map((branch, branchIndex) => {
67
+ const common = {
68
+ id: `${id}:branch:${branchIndex}`,
69
+ target: branch.target ?? null,
70
+ selection: selection(branch.selection),
71
+ updates: [...branch.updates]
72
+ };
73
+ return branch.type === "direct"
74
+ ? { ...common, type: "direct" }
75
+ : { ...common, type: "branch", key: branch.key, title: branch.title };
76
+ })
77
+ };
78
+ });
79
+ const activities = Machine.activityDefinitions(machine).map((definition) => {
80
+ const offset = activityOffsets.get(definition.source) ?? 0;
81
+ activityOffsets.set(definition.source, offset + 1);
82
+ const id = `${definition.source}:activity:${offset}`;
83
+ appendReference(activityIds, definition.source, id);
84
+ return activity(definition, id);
85
+ });
86
+ const initial = Machine.initialDefinition(machine);
87
+ return {
88
+ schemaVersion: 1,
89
+ revision: options.revision ?? 0,
90
+ source: options.source ?? null,
91
+ machineId: machine.id ?? "Machine",
92
+ initial: {
93
+ target: initial.target,
94
+ selection: selection(initial.selection)
95
+ },
96
+ roots: [...childPaths.get(null) ?? []],
97
+ states: nodes.map((node) => ({
98
+ path: node.path,
99
+ key: node.key,
100
+ order: node.order,
101
+ title: node.annotations?.title ?? null,
102
+ description: node.annotations?.description ?? null,
103
+ documentation: node.annotations?.documentation ?? null,
104
+ type: node.type,
105
+ history: node.history ?? null,
106
+ parent: node.parent ?? null,
107
+ children: [...childPaths.get(node.path) ?? []],
108
+ initial: node.initial ?? null,
109
+ transitionIds: [...transitionIds.get(node.path) ?? []],
110
+ activityIds: [...activityIds.get(node.path) ?? []]
111
+ })),
112
+ transitions,
113
+ activities,
114
+ snapshot: options.snapshot === undefined
115
+ ? null
116
+ : {
117
+ activePaths: Machine.configuration(machine, options.snapshot).map((node) => node.path),
118
+ candidateEvents: enabled(machine, options.snapshot).map(String)
119
+ }
120
+ };
121
+ };
122
+ //# sourceMappingURL=machineDocument.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machineDocument.js","sourceRoot":"","sources":["../../src/internal/machineDocument.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import * as Layer from "effect/Layer";
2
+ import * as DevToolsProtocol from "../DevToolsProtocol.js";
3
+ import type * as MachineRegistry from "../MachineRegistry.js";
4
+ import * as ProjectInspector from "../ProjectInspector.js";
5
+ interface PublicApi {
6
+ readonly MachineRegistry: typeof MachineRegistry.MachineRegistry;
7
+ readonly RegistryError: typeof MachineRegistry.RegistryError;
8
+ }
9
+ export declare const reconcile: (previous: ReadonlyArray<DevToolsProtocol.MachineResult>, next: ReadonlyArray<DevToolsProtocol.MachineResult>) => ReadonlyArray<DevToolsProtocol.MachineResult>;
10
+ export declare const layer: (api: PublicApi, options: MachineRegistry.Options) => Layer.Layer<MachineRegistry.MachineRegistry, MachineRegistry.RegistryError, ProjectInspector.ProjectInspector>;
11
+ export {};
12
+ //# sourceMappingURL=machineRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machineRegistry.d.ts","sourceRoot":"","sources":["../../src/internal/machineRegistry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAErC,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,KAAK,eAAe,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,gBAAgB,MAAM,wBAAwB,CAAA;AAE1D,UAAU,SAAS;IACjB,QAAQ,CAAC,eAAe,EAAE,OAAO,eAAe,CAAC,eAAe,CAAA;IAChE,QAAQ,CAAC,aAAa,EAAE,OAAO,eAAe,CAAC,aAAa,CAAA;CAC7D;AAYD,eAAO,MAAM,SAAS,GACpB,UAAU,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,EACvD,MAAM,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAClD,aAAa,CAAC,gBAAgB,CAAC,aAAa,CAqC9C,CAAA;AA6DD,eAAO,MAAM,KAAK,GAChB,KAAK,SAAS,EACd,SAAS,eAAe,CAAC,OAAO,KAC/B,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,eAAe,EAAE,eAAe,CAAC,aAAa,EAAE,gBAAgB,CAAC,gBAAgB,CACzD,CAAA"}
@@ -0,0 +1,97 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Layer from "effect/Layer";
3
+ import * as SubscriptionRef from "effect/SubscriptionRef";
4
+ import * as DevToolsProtocol from "../DevToolsProtocol.js";
5
+ import * as ProjectInspector from "../ProjectInspector.js";
6
+ const staleDiagnostic = (failed) => ({
7
+ severity: "warning",
8
+ code: "stale-document",
9
+ message: "Showing the last valid machine document while this module is incomplete.",
10
+ location: failed.source === null
11
+ ? null
12
+ : { file: failed.source.file, line: null, column: null },
13
+ statePath: null
14
+ });
15
+ export const reconcile = (previous, next) => {
16
+ const validPrevious = previous.filter((result) => result._tag === "Ready" || result._tag === "Partial");
17
+ const previousByKey = new Map(validPrevious.map((result) => [result.key, result]));
18
+ const previousByFile = new Map();
19
+ for (const result of validPrevious) {
20
+ const file = result.document.source?.file;
21
+ if (file === undefined)
22
+ continue;
23
+ const matches = previousByFile.get(file);
24
+ if (matches === undefined)
25
+ previousByFile.set(file, [result]);
26
+ else
27
+ matches.push(result);
28
+ }
29
+ const emitted = new Set(next.filter((result) => result._tag !== "Failed").map((result) => result.key));
30
+ return next.flatMap((result) => {
31
+ if (result._tag !== "Failed")
32
+ return [result];
33
+ const moduleFailure = result.diagnostics.some((diagnostic) => diagnostic.code === "module-load-failed" || diagnostic.code === "machine-export-not-found");
34
+ const exact = previousByKey.get(result.key);
35
+ const candidates = moduleFailure || exact === undefined
36
+ ? previousByFile.get(result.source.file) ?? []
37
+ : [exact];
38
+ const retained = candidates.filter((candidate) => !emitted.has(candidate.key));
39
+ if (retained.length === 0)
40
+ return [result];
41
+ for (const candidate of retained)
42
+ emitted.add(candidate.key);
43
+ return retained.map((candidate) => ({
44
+ _tag: "Partial",
45
+ protocolVersion: DevToolsProtocol.protocolVersion,
46
+ key: candidate.key,
47
+ document: candidate.document,
48
+ diagnostics: [staleDiagnostic(result), ...result.diagnostics]
49
+ }));
50
+ });
51
+ };
52
+ const retainedCandidates = (results) => {
53
+ const exportsByFile = new Map();
54
+ for (const result of results) {
55
+ if (result._tag !== "Ready" && result._tag !== "Partial")
56
+ continue;
57
+ const source = result.document.source;
58
+ if (source === null)
59
+ continue;
60
+ const exportNames = exportsByFile.get(source.file) ?? new Set();
61
+ if (source.exportName !== null)
62
+ exportNames.add(source.exportName);
63
+ exportsByFile.set(source.file, exportNames);
64
+ }
65
+ return [...exportsByFile].map(([file, exportNames]) => ({
66
+ file,
67
+ exportNames: [...exportNames].sort()
68
+ }));
69
+ };
70
+ const make = (api, options) => Effect.gen(function* () {
71
+ const inspector = yield* ProjectInspector.ProjectInspector;
72
+ const state = yield* SubscriptionRef.make({
73
+ protocolVersion: DevToolsProtocol.protocolVersion,
74
+ revision: 0,
75
+ results: []
76
+ });
77
+ const refresh = SubscriptionRef.get(state).pipe(Effect.flatMap((current) => inspector.inspect({
78
+ ...options,
79
+ revision: current.revision + 1,
80
+ retainedCandidates: retainedCandidates(current.results)
81
+ }).pipe(Effect.map((results) => ({
82
+ protocolVersion: DevToolsProtocol.protocolVersion,
83
+ revision: current.revision + 1,
84
+ results: reconcile(current.results, results)
85
+ })))), Effect.tap((next) => SubscriptionRef.set(state, next)), Effect.mapError((cause) => new api.RegistryError({
86
+ message: `Could not inspect Effect Machine definitions under ${options.root}`,
87
+ cause
88
+ })));
89
+ yield* refresh;
90
+ return api.MachineRegistry.of({
91
+ get: SubscriptionRef.get(state),
92
+ changes: SubscriptionRef.changes(state),
93
+ refresh
94
+ });
95
+ });
96
+ export const layer = (api, options) => Layer.effect(api.MachineRegistry, make(api, options));
97
+ //# sourceMappingURL=machineRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machineRegistry.js","sourceRoot":"","sources":["../../src/internal/machineRegistry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type * as MachineDocument from "../MachineDocument.js";
2
+ import type * as MachineSimulator from "../MachineSimulator.js";
3
+ export declare const start: (document: MachineDocument.MachineDocument) => MachineSimulator.Session;
4
+ export declare const send: (session: MachineSimulator.Session, event: string) => MachineSimulator.StepResult;
5
+ //# sourceMappingURL=machineSimulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machineSimulator.d.ts","sourceRoot":"","sources":["../../src/internal/machineSimulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,eAAe,MAAM,uBAAuB,CAAA;AAC7D,OAAO,KAAK,KAAK,gBAAgB,MAAM,wBAAwB,CAAA;AAkF/D,eAAO,MAAM,KAAK,GAAI,UAAU,eAAe,CAAC,eAAe,KAAG,gBAAgB,CAAC,OAWlF,CAAA;AAsED,eAAO,MAAM,IAAI,GAAI,SAAS,gBAAgB,CAAC,OAAO,EAAE,OAAO,MAAM,KAAG,gBAAgB,CAAC,UAkCxF,CAAA"}
@@ -0,0 +1,156 @@
1
+ const makeModel = (document) => ({
2
+ states: new Map(document.states.map((state) => [state.path, state])),
3
+ order: new Map(document.states.map((state) => [state.path, state.order]))
4
+ });
5
+ const ordered = (model, paths) => [...new Set(paths)].sort((left, right) => (model.order.get(left) ?? 0) - (model.order.get(right) ?? 0));
6
+ const enter = (model, path, active) => {
7
+ const state = model.states.get(path);
8
+ if (state === undefined)
9
+ return;
10
+ active.add(path);
11
+ if (state.type === "parallel") {
12
+ state.children.forEach((child) => enter(model, child, active));
13
+ }
14
+ else if (state.type === "compound" && state.initial !== null) {
15
+ enter(model, state.initial, active);
16
+ }
17
+ };
18
+ const ancestors = (model, path) => {
19
+ const result = [];
20
+ let current = model.states.get(path);
21
+ while (current !== undefined) {
22
+ result.unshift(current.path);
23
+ current = current.parent === null ? undefined : model.states.get(current.parent);
24
+ }
25
+ return result;
26
+ };
27
+ const leastCommonAncestor = (model, left, right) => {
28
+ const leftAncestors = ancestors(model, left);
29
+ const rightAncestors = ancestors(model, right);
30
+ let result = null;
31
+ const length = Math.min(leftAncestors.length, rightAncestors.length);
32
+ for (let index = 0; index < length; index++) {
33
+ if (leftAncestors[index] !== rightAncestors[index])
34
+ break;
35
+ result = leftAncestors[index] ?? null;
36
+ }
37
+ return result;
38
+ };
39
+ const isDescendant = (model, path, ancestor) => path !== ancestor && ancestors(model, path).includes(ancestor);
40
+ const candidateEvents = (document, activePaths) => {
41
+ const active = new Set(activePaths);
42
+ return [
43
+ ...new Set(document.transitions.flatMap((transition) => transition.trigger.type === "event" && active.has(transition.source) ? [transition.trigger.event] : []))
44
+ ].sort();
45
+ };
46
+ const snapshot = (document, model, step, activePaths) => {
47
+ const active = ordered(model, activePaths);
48
+ return {
49
+ step,
50
+ activePaths: active,
51
+ candidateEvents: candidateEvents(document, active)
52
+ };
53
+ };
54
+ export const start = (document) => {
55
+ const model = makeModel(document);
56
+ const active = new Set();
57
+ if (document.snapshot === null) {
58
+ const targetAncestors = ancestors(model, document.initial.target);
59
+ targetAncestors.forEach((path) => active.add(path));
60
+ enter(model, document.initial.target, active);
61
+ }
62
+ else {
63
+ document.snapshot.activePaths.forEach((path) => active.add(path));
64
+ }
65
+ return { document, snapshot: snapshot(document, model, 0, active) };
66
+ };
67
+ const indeterminate = (session, event, transitions, reason) => ({
68
+ _tag: "Indeterminate",
69
+ event,
70
+ transitionIds: transitions.map((transition) => transition.id),
71
+ session: session.snapshot,
72
+ reason
73
+ });
74
+ const notesFor = (document, transition, nextActive) => {
75
+ const notes = new Set(["runtime-effects-skipped"]);
76
+ if (transition.reenter)
77
+ notes.add("reentry-lifecycles-skipped");
78
+ if (transition.branches.some((branch) => branch.updates.length > 0))
79
+ notes.add("state-updates-skipped");
80
+ const active = new Set(nextActive);
81
+ if (document.transitions.some((candidate) => active.has(candidate.source) &&
82
+ (candidate.trigger.type === "always" || candidate.trigger.type === "choice" || candidate.trigger.type === "done"))) {
83
+ notes.add("automatic-transitions-skipped");
84
+ }
85
+ return [...notes];
86
+ };
87
+ const nextConfiguration = (session, transition, target) => {
88
+ const document = session.document;
89
+ const model = makeModel(document);
90
+ if (target === null) {
91
+ return {
92
+ document,
93
+ snapshot: snapshot(document, model, session.snapshot.step + 1, session.snapshot.activePaths)
94
+ };
95
+ }
96
+ if (!model.states.has(target))
97
+ return undefined;
98
+ const naturalBoundary = leastCommonAncestor(model, transition.source, target);
99
+ const sourceParent = model.states.get(transition.source)?.parent ?? null;
100
+ const boundary = transition.reenter
101
+ ? sourceParent === null || naturalBoundary === null
102
+ ? null
103
+ : ancestors(model, naturalBoundary).length <= ancestors(model, sourceParent).length
104
+ ? naturalBoundary
105
+ : sourceParent
106
+ : naturalBoundary;
107
+ const active = new Set(session.snapshot.activePaths);
108
+ for (const path of active) {
109
+ if (boundary === null || isDescendant(model, path, boundary))
110
+ active.delete(path);
111
+ }
112
+ ancestors(model, target).forEach((path) => {
113
+ if (boundary === null || path === boundary || isDescendant(model, path, boundary))
114
+ active.add(path);
115
+ });
116
+ enter(model, target, active);
117
+ return { document, snapshot: snapshot(document, model, session.snapshot.step + 1, active) };
118
+ };
119
+ export const send = (session, event) => {
120
+ const active = new Set(session.snapshot.activePaths);
121
+ const transitions = session.document.transitions.filter((transition) => transition.trigger.type === "event" && transition.trigger.event === event && active.has(transition.source));
122
+ if (transitions.length === 0) {
123
+ return {
124
+ _tag: "Blocked",
125
+ event,
126
+ transitionIds: [],
127
+ session: session.snapshot,
128
+ reason: "event-not-enabled"
129
+ };
130
+ }
131
+ if (transitions.length > 1)
132
+ return indeterminate(session, event, transitions, "multiple-transitions");
133
+ const transition = transitions[0];
134
+ if (transition.acceptance === "declinable") {
135
+ return indeterminate(session, event, transitions, "declinable-transition");
136
+ }
137
+ if (transition.branches.length !== 1 || transition.branches[0]?.type === "branch") {
138
+ return indeterminate(session, event, transitions, "conditional-branches");
139
+ }
140
+ const branch = transition.branches[0];
141
+ if (branch.selection.kind === "history")
142
+ return indeterminate(session, event, transitions, "history-target");
143
+ if (branch.selection.kind === "choice")
144
+ return indeterminate(session, event, transitions, "choice-target");
145
+ const next = nextConfiguration(session, transition, branch.target);
146
+ if (next === undefined)
147
+ return indeterminate(session, event, transitions, "missing-target");
148
+ return {
149
+ _tag: "Applied",
150
+ event,
151
+ transitionIds: [transition.id],
152
+ session: next.snapshot,
153
+ notes: notesFor(session.document, transition, next.snapshot.activePaths)
154
+ };
155
+ };
156
+ //# sourceMappingURL=machineSimulator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"machineSimulator.js","sourceRoot":"","sources":["../../src/internal/machineSimulator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import * as Layer from "effect/Layer";
2
+ import type * as ProjectInspector from "../ProjectInspector.js";
3
+ export declare const parseCandidate: (file: string, source: string) => ProjectInspector.Candidate | undefined;
4
+ interface PublicApi {
5
+ readonly ProjectInspector: typeof ProjectInspector.ProjectInspector;
6
+ readonly DiscoveryError: typeof ProjectInspector.DiscoveryError;
7
+ readonly EvaluationError: typeof ProjectInspector.EvaluationError;
8
+ }
9
+ export declare const layer: (api: PublicApi) => Layer.Layer<ProjectInspector.ProjectInspector>;
10
+ export {};
11
+ //# sourceMappingURL=projectInspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectInspector.d.ts","sourceRoot":"","sources":["../../src/internal/projectInspector.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAOrC,OAAO,KAAK,KAAK,gBAAgB,MAAM,wBAAwB,CAAA;AAwD/D,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,gBAAgB,CAAC,SAAS,GAAG,SAyB1F,CAAA;AAaD,UAAU,SAAS;IACjB,QAAQ,CAAC,gBAAgB,EAAE,OAAO,gBAAgB,CAAC,gBAAgB,CAAA;IACnE,QAAQ,CAAC,cAAc,EAAE,OAAO,gBAAgB,CAAC,cAAc,CAAA;IAC/D,QAAQ,CAAC,eAAe,EAAE,OAAO,gBAAgB,CAAC,eAAe,CAAA;CAClE;AAgHD,eAAO,MAAM,KAAK,GAAI,KAAK,SAAS,KAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CACF,CAAA"}
@@ -0,0 +1,150 @@
1
+ import * as NodeFileSystem from "@effect/platform-node/NodeFileSystem";
2
+ import * as NodePath from "@effect/platform-node/NodePath";
3
+ import * as NodeWorker from "@effect/platform-node/NodeWorker";
4
+ import * as Deferred from "effect/Deferred";
5
+ import * as Effect from "effect/Effect";
6
+ import * as Fiber from "effect/Fiber";
7
+ import * as FileSystem from "effect/FileSystem";
8
+ import * as Layer from "effect/Layer";
9
+ import * as Path from "effect/Path";
10
+ import * as Schema from "effect/Schema";
11
+ import * as Worker from "effect/unstable/workers/Worker";
12
+ import { Worker as NodeWorkerThread } from "node:worker_threads";
13
+ import ts from "typescript";
14
+ import * as DevToolsProtocol from "../DevToolsProtocol.js";
15
+ const defaultInclude = "**/src/**/*.{ts,tsx,mts,cts,js,jsx,mjs,cjs}";
16
+ const defaultExclude = [
17
+ "**/node_modules/**",
18
+ "**/.git/**",
19
+ "**/dist/**",
20
+ "**/build/**",
21
+ "**/coverage/**",
22
+ "**/.data/**",
23
+ "**/references/**",
24
+ "**/*.d.ts"
25
+ ];
26
+ const scriptKind = (file) => {
27
+ if (file.endsWith(".tsx"))
28
+ return ts.ScriptKind.TSX;
29
+ if (file.endsWith(".jsx"))
30
+ return ts.ScriptKind.JSX;
31
+ if (file.endsWith(".js") || file.endsWith(".mjs") || file.endsWith(".cjs"))
32
+ return ts.ScriptKind.JS;
33
+ return ts.ScriptKind.TS;
34
+ };
35
+ const hasExportModifier = (node) => ts.canHaveModifiers(node) &&
36
+ ts.getModifiers(node)?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword) === true;
37
+ const containsHandleCall = (node) => {
38
+ let found = false;
39
+ const visit = (current) => {
40
+ if (found)
41
+ return;
42
+ if (ts.isCallExpression(current) &&
43
+ ((ts.isPropertyAccessExpression(current.expression) && current.expression.name.text === "handle") ||
44
+ (ts.isElementAccessExpression(current.expression) &&
45
+ ts.isStringLiteral(current.expression.argumentExpression) &&
46
+ current.expression.argumentExpression.text === "handle"))) {
47
+ found = true;
48
+ return;
49
+ }
50
+ ts.forEachChild(current, visit);
51
+ };
52
+ visit(node);
53
+ return found;
54
+ };
55
+ export const parseCandidate = (file, source) => {
56
+ const sourceFile = ts.createSourceFile(file, source, ts.ScriptTarget.Latest, true, scriptKind(file));
57
+ if (!containsHandleCall(sourceFile))
58
+ return undefined;
59
+ const exportNames = new Set();
60
+ for (const statement of sourceFile.statements) {
61
+ if (ts.isExportAssignment(statement) && containsHandleCall(statement.expression)) {
62
+ exportNames.add("default");
63
+ continue;
64
+ }
65
+ if (ts.isVariableStatement(statement) && hasExportModifier(statement)) {
66
+ for (const declaration of statement.declarationList.declarations) {
67
+ if (ts.isIdentifier(declaration.name) && declaration.initializer && containsHandleCall(declaration.initializer)) {
68
+ exportNames.add(declaration.name.text);
69
+ }
70
+ }
71
+ }
72
+ }
73
+ return {
74
+ file,
75
+ exportNames: [...exportNames].sort()
76
+ };
77
+ };
78
+ const hasSyntacticErrors = (file, source) => ts.transpileModule(source, {
79
+ fileName: file,
80
+ reportDiagnostics: true,
81
+ compilerOptions: {
82
+ allowJs: true,
83
+ jsx: ts.JsxEmit.Preserve,
84
+ target: ts.ScriptTarget.Latest
85
+ }
86
+ }).diagnostics?.some((diagnostic) => diagnostic.category === ts.DiagnosticCategory.Error) === true;
87
+ const makeDiscovery = (api) => Effect.gen(function* () {
88
+ const fs = yield* FileSystem.FileSystem;
89
+ const path = yield* Path.Path;
90
+ return (options) => Effect.gen(function* () {
91
+ const root = path.resolve(options.root);
92
+ const retainedByFile = new Map((options.retainedCandidates ?? []).map((candidate) => [candidate.file, candidate]));
93
+ const files = yield* fs.glob(options.include ?? defaultInclude, {
94
+ root,
95
+ exclude: [...defaultExclude, ...(options.exclude ?? [])]
96
+ });
97
+ const candidates = yield* Effect.forEach(files.sort(), (file) => fs.readFileString(path.join(root, file)).pipe(Effect.map((source) => {
98
+ const candidate = parseCandidate(file, source);
99
+ if (candidate !== undefined)
100
+ return candidate;
101
+ const retained = retainedByFile.get(file);
102
+ return retained !== undefined && hasSyntacticErrors(file, source) ? retained : undefined;
103
+ })), { concurrency: "unbounded" });
104
+ return candidates.filter((candidate) => candidate !== undefined);
105
+ }).pipe(Effect.mapError((cause) => new api.DiscoveryError({
106
+ message: `Could not discover Effect Machine definitions under ${options.root}`,
107
+ cause
108
+ })));
109
+ });
110
+ const workerBootstrap = new URL("./evaluationWorkerBootstrap.js", import.meta.url);
111
+ const workerRuntime = new URL(import.meta.url.endsWith(".ts") ? "./evaluationWorker.ts" : "./evaluationWorker.js", import.meta.url);
112
+ const WorkerLayer = NodeWorker.layer(() => new NodeWorkerThread(workerBootstrap, {
113
+ execArgv: [],
114
+ workerData: {
115
+ runtimeModuleUrl: workerRuntime.href
116
+ }
117
+ }));
118
+ const evaluate = (api, candidates, options) => {
119
+ if (candidates.length === 0)
120
+ return Effect.succeed([]);
121
+ const request = {
122
+ root: options.root,
123
+ revision: options.revision ?? 0,
124
+ candidates
125
+ };
126
+ return Effect.scoped(Effect.gen(function* () {
127
+ const platform = yield* Worker.WorkerPlatform;
128
+ const worker = yield* platform.spawn(0);
129
+ const response = yield* Deferred.make();
130
+ const runner = yield* Effect.forkScoped(worker.run((message) => Deferred.succeed(response, message)));
131
+ yield* worker.send(request);
132
+ const message = yield* Effect.raceFirst(Deferred.await(response), Fiber.join(runner));
133
+ return yield* Effect.forEach(message.results, (result) => Schema.decodeUnknownEffect(DevToolsProtocol.MachineResult)(result));
134
+ })).pipe(Effect.provide(WorkerLayer), Effect.mapError((cause) => new api.EvaluationError({
135
+ message: "The isolated machine evaluator failed",
136
+ cause
137
+ })));
138
+ };
139
+ const make = (api) => Effect.gen(function* () {
140
+ const discover = yield* makeDiscovery(api);
141
+ const inspect = (options) => Effect.flatMap(discover(options), (candidates) => evaluate(api, candidates, options));
142
+ return api.ProjectInspector.of({
143
+ discover,
144
+ evaluate: (candidates, options) => evaluate(api, candidates, options),
145
+ inspect
146
+ });
147
+ });
148
+ const PlatformLayer = Layer.merge(NodeFileSystem.layer, NodePath.layer);
149
+ export const layer = (api) => Layer.effect(api.ProjectInspector, make(api)).pipe(Layer.provide(PlatformLayer));
150
+ //# sourceMappingURL=projectInspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projectInspector.js","sourceRoot":"","sources":["../../src/internal/projectInspector.ts"],"names":[],"mappings":"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"}
package/index.html ADDED
@@ -0,0 +1,13 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <meta name="description" content="Interactive text visualization for Effect Machine" />
7
+ <title>Effect Machine · Text visualizer</title>
8
+ </head>
9
+ <body>
10
+ <div id="app"></div>
11
+ <script type="module" src="/src/internal/browser/main.ts"></script>
12
+ </body>
13
+ </html>