@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.
- package/LICENSE +21 -0
- package/NOTICE +3 -0
- package/README.md +81 -0
- package/dist/DevServer.d.ts +42 -0
- package/dist/DevServer.d.ts.map +1 -0
- package/dist/DevServer.js +28 -0
- package/dist/DevServer.js.map +1 -0
- package/dist/DevToolsProtocol.d.ts +954 -0
- package/dist/DevToolsProtocol.d.ts.map +1 -0
- package/dist/DevToolsProtocol.js +96 -0
- package/dist/DevToolsProtocol.js.map +1 -0
- package/dist/MachineDocument.d.ts +396 -0
- package/dist/MachineDocument.d.ts.map +1 -0
- package/dist/MachineDocument.js +172 -0
- package/dist/MachineDocument.js.map +1 -0
- package/dist/MachineRegistry.d.ts +349 -0
- package/dist/MachineRegistry.d.ts.map +1 -0
- package/dist/MachineRegistry.js +46 -0
- package/dist/MachineRegistry.js.map +1 -0
- package/dist/MachineSimulator.d.ts +169 -0
- package/dist/MachineSimulator.d.ts.map +1 -0
- package/dist/MachineSimulator.js +98 -0
- package/dist/MachineSimulator.js.map +1 -0
- package/dist/ProjectInspector.d.ts +116 -0
- package/dist/ProjectInspector.d.ts.map +1 -0
- package/dist/ProjectInspector.js +82 -0
- package/dist/ProjectInspector.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +23 -0
- package/dist/bin.js.map +1 -0
- package/dist/client/assets/index-BGOhE3Ng.css +1 -0
- package/dist/client/assets/index-DiqGhsGR.js +14 -0
- package/dist/client/index.html +14 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/devServer.d.ts +9 -0
- package/dist/internal/devServer.d.ts.map +1 -0
- package/dist/internal/devServer.js +119 -0
- package/dist/internal/devServer.js.map +1 -0
- package/dist/internal/evaluationWorker.d.ts +3 -0
- package/dist/internal/evaluationWorker.d.ts.map +1 -0
- package/dist/internal/evaluationWorker.js +69 -0
- package/dist/internal/evaluationWorker.js.map +1 -0
- package/dist/internal/evaluationWorkerBootstrap.d.ts +2 -0
- package/dist/internal/evaluationWorkerBootstrap.d.ts.map +1 -0
- package/dist/internal/evaluationWorkerBootstrap.js +21 -0
- package/dist/internal/evaluationWorkerBootstrap.js.map +1 -0
- package/dist/internal/machineDocument.d.ts +4 -0
- package/dist/internal/machineDocument.d.ts.map +1 -0
- package/dist/internal/machineDocument.js +122 -0
- package/dist/internal/machineDocument.js.map +1 -0
- package/dist/internal/machineRegistry.d.ts +12 -0
- package/dist/internal/machineRegistry.d.ts.map +1 -0
- package/dist/internal/machineRegistry.js +97 -0
- package/dist/internal/machineRegistry.js.map +1 -0
- package/dist/internal/machineSimulator.d.ts +5 -0
- package/dist/internal/machineSimulator.d.ts.map +1 -0
- package/dist/internal/machineSimulator.js +156 -0
- package/dist/internal/machineSimulator.js.map +1 -0
- package/dist/internal/projectInspector.d.ts +11 -0
- package/dist/internal/projectInspector.d.ts.map +1 -0
- package/dist/internal/projectInspector.js +150 -0
- package/dist/internal/projectInspector.js.map +1 -0
- package/index.html +13 -0
- package/package.json +69 -0
- package/src/DevServer.ts +45 -0
- package/src/DevToolsProtocol.ts +146 -0
- package/src/MachineDocument.ts +264 -0
- package/src/MachineRegistry.ts +69 -0
- package/src/MachineSimulator.ts +154 -0
- package/src/ProjectInspector.ts +140 -0
- package/src/bin.ts +56 -0
- package/src/index.ts +20 -0
- package/src/internal/browser/example-machine.ts +134 -0
- package/src/internal/browser/machine-index.ts +81 -0
- package/src/internal/browser/main.ts +42 -0
- package/src/internal/browser/styles.css +817 -0
- package/src/internal/browser/text-tree.ts +214 -0
- package/src/internal/browser/visualizer-app.ts +659 -0
- package/src/internal/browser/visualizer-model.ts +173 -0
- package/src/internal/browser/visualizer.ts +31 -0
- package/src/internal/devServer.ts +171 -0
- package/src/internal/evaluationWorker.ts +138 -0
- package/src/internal/evaluationWorkerBootstrap.js +21 -0
- package/src/internal/machineDocument.ts +138 -0
- package/src/internal/machineRegistry.ts +128 -0
- package/src/internal/machineSimulator.ts +199 -0
- 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>
|