@typeonce/ritmo-devtools 0.6.0 → 0.8.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/README.md +105 -21
- package/dist/Determinism.d.ts +70 -0
- package/dist/Determinism.d.ts.map +1 -0
- package/dist/Determinism.js +137 -0
- package/dist/Determinism.js.map +1 -0
- package/dist/Format.d.ts +8 -1
- package/dist/Format.d.ts.map +1 -1
- package/dist/Format.js +47 -5
- package/dist/Format.js.map +1 -1
- package/dist/Invariant.d.ts +34 -12
- package/dist/Invariant.d.ts.map +1 -1
- package/dist/Invariant.js +6 -19
- package/dist/Invariant.js.map +1 -1
- package/dist/Lint.d.ts +60 -0
- package/dist/Lint.d.ts.map +1 -0
- package/dist/Lint.js +15 -0
- package/dist/Lint.js.map +1 -0
- package/dist/Monitor.d.ts +18 -4
- package/dist/Monitor.d.ts.map +1 -1
- package/dist/Monitor.js +32 -21
- package/dist/Monitor.js.map +1 -1
- package/dist/Replay.d.ts +271 -0
- package/dist/Replay.d.ts.map +1 -0
- package/dist/Replay.js +335 -0
- package/dist/Replay.js.map +1 -0
- package/dist/ReplayNodeSink.d.ts +11 -0
- package/dist/ReplayNodeSink.d.ts.map +1 -0
- package/dist/ReplayNodeSink.js +29 -0
- package/dist/ReplayNodeSink.js.map +1 -0
- package/dist/ReplayVitePlugin.d.ts +41 -0
- package/dist/ReplayVitePlugin.d.ts.map +1 -0
- package/dist/ReplayVitePlugin.js +41 -0
- package/dist/ReplayVitePlugin.js.map +1 -0
- package/dist/ReplayViteSink.d.ts +30 -0
- package/dist/ReplayViteSink.d.ts.map +1 -0
- package/dist/ReplayViteSink.js +9 -0
- package/dist/ReplayViteSink.js.map +1 -0
- package/dist/Session.d.ts +66 -14
- package/dist/Session.d.ts.map +1 -1
- package/dist/Session.js +93 -7
- package/dist/Session.js.map +1 -1
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +57 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/monitor.d.ts +4 -2
- package/dist/internal/monitor.d.ts.map +1 -1
- package/dist/internal/monitor.js +9 -3
- package/dist/internal/monitor.js.map +1 -1
- package/dist/internal/version.d.ts +7 -0
- package/dist/internal/version.d.ts.map +1 -0
- package/dist/internal/version.js +7 -0
- package/dist/internal/version.js.map +1 -0
- package/package.json +5 -2
- package/src/Determinism.ts +190 -0
- package/src/Format.ts +50 -4
- package/src/Invariant.ts +38 -12
- package/src/Lint.ts +72 -0
- package/src/Monitor.ts +49 -26
- package/src/Replay.ts +583 -0
- package/src/ReplayNodeSink.ts +38 -0
- package/src/ReplayVitePlugin.ts +74 -0
- package/src/ReplayViteSink.ts +33 -0
- package/src/Session.ts +154 -24
- package/src/cli.ts +55 -0
- package/src/index.ts +3 -0
- package/src/internal/monitor.ts +12 -5
- package/src/internal/version.ts +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/internal/monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,KAAK,KAAK,MAAM,uBAAuB,CAAA;AAKnD,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,gEAAgE;AAChE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,MAAM;IACrB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACnD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACvD,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAA;IACrC,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,kBAAkB,GAAG,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"monitor.d.ts","sourceRoot":"","sources":["../../src/internal/monitor.ts"],"names":[],"mappings":"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"}
|
package/dist/internal/monitor.js
CHANGED
|
@@ -22,15 +22,18 @@ export class Collector {
|
|
|
22
22
|
maxHistory;
|
|
23
23
|
maxLines;
|
|
24
24
|
population;
|
|
25
|
+
clock;
|
|
26
|
+
/** `now` reads the host clock (milliseconds); the collector times its own work with it. */
|
|
25
27
|
constructor(population, now, options = {}) {
|
|
26
28
|
this.population = population;
|
|
27
|
-
this.
|
|
29
|
+
this.clock = now;
|
|
30
|
+
this.windowStart = now();
|
|
28
31
|
this.maxHistory = options.history ?? 60;
|
|
29
32
|
this.maxLines = options.entityLines ?? 40;
|
|
30
33
|
}
|
|
31
34
|
/** Folds one trace event. Pass it to `debug.observe`. */
|
|
32
35
|
observe = (event) => {
|
|
33
|
-
const started =
|
|
36
|
+
const started = this.clock();
|
|
34
37
|
switch (event.type) {
|
|
35
38
|
case "system":
|
|
36
39
|
this.onSystem(event);
|
|
@@ -46,6 +49,9 @@ export class Collector {
|
|
|
46
49
|
case "deferred":
|
|
47
50
|
this.onDeferred(event);
|
|
48
51
|
break;
|
|
52
|
+
case "failure.ignored":
|
|
53
|
+
this.alert("ignored-failure", `ignored:${event.frame}`, Format.ignoredFailure(event), event.frame);
|
|
54
|
+
break;
|
|
49
55
|
case "schedule.end":
|
|
50
56
|
if (!event.schedule.includes(" > ")) {
|
|
51
57
|
const schedule = this.scheduleOf(event.schedule);
|
|
@@ -55,7 +61,7 @@ export class Collector {
|
|
|
55
61
|
}
|
|
56
62
|
break;
|
|
57
63
|
}
|
|
58
|
-
this.overhead +=
|
|
64
|
+
this.overhead += Math.max(0, this.clock() - started);
|
|
59
65
|
};
|
|
60
66
|
windowOf(system) {
|
|
61
67
|
let window = this.systems.get(system);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/internal/monitor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/internal/monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The package version, written into replay files. Kept equal to
|
|
3
|
+
* `package.json` by `scripts/sync-version.ts` (run by \`pnpm version-packages\`)
|
|
4
|
+
* and checked by a test.
|
|
5
|
+
*/
|
|
6
|
+
export declare const libraryVersion = "0.8.0";
|
|
7
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/internal/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,cAAc,UAAU,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/internal/version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typeonce/ritmo-devtools",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Headless debug sessions, trace history, text reports, and a live browser monitor for Ritmo runtimes",
|
|
5
5
|
"author": "Sandro Maglione",
|
|
6
6
|
"license": "MIT",
|
|
@@ -29,6 +29,9 @@
|
|
|
29
29
|
"README.md",
|
|
30
30
|
"LICENSE"
|
|
31
31
|
],
|
|
32
|
+
"bin": {
|
|
33
|
+
"ritmo-devtools": "./dist/cli.js"
|
|
34
|
+
},
|
|
32
35
|
"exports": {
|
|
33
36
|
"./package.json": "./package.json",
|
|
34
37
|
".": {
|
|
@@ -47,7 +50,7 @@
|
|
|
47
50
|
"provenance": true
|
|
48
51
|
},
|
|
49
52
|
"dependencies": {
|
|
50
|
-
"@typeonce/ritmo": "^0.
|
|
53
|
+
"@typeonce/ritmo": "^0.8.0"
|
|
51
54
|
},
|
|
52
55
|
"engines": {
|
|
53
56
|
"node": ">=20"
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runs the same headless simulation twice and reports its first differing
|
|
3
|
+
* value. Supply fresh runtimes and scripted input; services and host time
|
|
4
|
+
* are inputs, not world state. Transient components are included, so this
|
|
5
|
+
* works even when the schema cannot be snapshotted.
|
|
6
|
+
*
|
|
7
|
+
* A mismatch is rerun with tracing on the differing frame to name the first
|
|
8
|
+
* system or schedule marker after which the worlds differ. If that rerun
|
|
9
|
+
* does not reproduce it, `after` is undefined: the original mismatch still
|
|
10
|
+
* fails the check. This checks repeatability on the current JS engine, not
|
|
11
|
+
* equality between platforms or every possible input sequence.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const result = Determinism.check(({ hostClock }) => makeSimulation(hostClock), {
|
|
16
|
+
* schedule: "update", frames: 1800, hostClock: HostClock.test()
|
|
17
|
+
* })
|
|
18
|
+
* if (!result.ok) throw new Error(JSON.stringify(result))
|
|
19
|
+
* ```
|
|
20
|
+
* @module Determinism
|
|
21
|
+
* @docGroup devtools
|
|
22
|
+
*/
|
|
23
|
+
import type { Debug, HostClock } from "@typeonce/ritmo"
|
|
24
|
+
import type { Schema } from "@typeonce/ritmo/Schema"
|
|
25
|
+
import type { AnyScheduleOrder, ExecutableScheduleDefinition } from "@typeonce/ritmo/Schedule"
|
|
26
|
+
import type { Target as SessionTarget } from "./Session.ts"
|
|
27
|
+
|
|
28
|
+
/** A fresh debug runtime, already set up, and its runnable schedules. */
|
|
29
|
+
export interface Target<S extends Schema.Any, Root, Names extends string> {
|
|
30
|
+
readonly runtime: Pick<SessionTarget<S, Root>, "debug" | "tryTick">
|
|
31
|
+
readonly schedules: Readonly<Record<Names, ExecutableScheduleDefinition<S, any, Root, any, any, AnyScheduleOrder>>>
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Inputs supplied to each build, including diagnostic reruns. */
|
|
35
|
+
export interface Context {
|
|
36
|
+
readonly hostClock: HostClock.HostClock
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** Selects one schedule and a finite, whole number of frames to compare. */
|
|
40
|
+
export interface Options<Names extends string> extends Context {
|
|
41
|
+
readonly schedule: Names
|
|
42
|
+
readonly frames: number
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** A mismatch names the first value; execution errors remain explicit failures. */
|
|
46
|
+
export type CheckResult =
|
|
47
|
+
| { readonly ok: true; readonly frames: number }
|
|
48
|
+
| {
|
|
49
|
+
readonly ok: false
|
|
50
|
+
/** 0 means the initial worlds already differ. */
|
|
51
|
+
readonly frame: number
|
|
52
|
+
readonly reason: "difference"
|
|
53
|
+
readonly difference: string
|
|
54
|
+
readonly first: unknown
|
|
55
|
+
readonly second: unknown
|
|
56
|
+
readonly after: string | undefined
|
|
57
|
+
}
|
|
58
|
+
| {
|
|
59
|
+
readonly ok: false
|
|
60
|
+
readonly frame: number
|
|
61
|
+
readonly reason: "invalid-options" | "shared-runtime" | "failure" | "defect"
|
|
62
|
+
readonly run: "first" | "second"
|
|
63
|
+
readonly error: unknown
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
type Captured = { readonly kind: string; readonly value?: unknown; readonly entries?: ReadonlyArray<readonly [string, Captured]> }
|
|
67
|
+
type Difference = { readonly path: string; readonly first: unknown; readonly second: unknown }
|
|
68
|
+
type Trace = { readonly after: string; readonly state: Captured }
|
|
69
|
+
|
|
70
|
+
// Copy values immediately: dump values may be mutable and shared with the
|
|
71
|
+
// next tick. JSON would silently discard undefined, NaN, maps, and cycles.
|
|
72
|
+
const capture = (value: unknown, seen = new Map<object, number>()): Captured => {
|
|
73
|
+
if (typeof value !== "object" || value === null) return { kind: typeof value, value }
|
|
74
|
+
const previous = seen.get(value)
|
|
75
|
+
if (previous !== undefined) return { kind: "reference", value: previous }
|
|
76
|
+
seen.set(value, seen.size)
|
|
77
|
+
if (value instanceof Date) return { kind: "Date", value: value.getTime() }
|
|
78
|
+
if (value instanceof RegExp) return { kind: "RegExp", value: `${value.source}/${value.flags}/${value.lastIndex}` }
|
|
79
|
+
if (value instanceof Map) return { kind: "Map", entries: [...value].map(([key, entry], index) => [String(index), capture([key, entry], seen)]) }
|
|
80
|
+
if (value instanceof Set) return { kind: "Set", entries: [...value].map((entry, index) => [String(index), capture(entry, seen)]) }
|
|
81
|
+
if (value instanceof ArrayBuffer) return { kind: "ArrayBuffer", entries: [...new Uint8Array(value)].map((entry, index) => [String(index), capture(entry, seen)]) }
|
|
82
|
+
if (ArrayBuffer.isView(value)) return { kind: value.constructor.name, entries: [...new Uint8Array(value.buffer, value.byteOffset, value.byteLength)].map((entry, index) => [String(index), capture(entry, seen)]) }
|
|
83
|
+
if (value instanceof WeakMap || value instanceof WeakSet || value instanceof Promise) {
|
|
84
|
+
throw new Error(`Determinism cannot inspect ${value.constructor.name}; keep opaque host state in a service`)
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
kind: Array.isArray(value) ? "Array" : Object.getPrototypeOf(value)?.constructor?.name ?? "Object",
|
|
88
|
+
entries: Reflect.ownKeys(value).map((key) => [String(key), capture(Reflect.get(value, key), seen)])
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const difference = (first: Captured, second: Captured, path = "world"): Difference | undefined => {
|
|
93
|
+
if (first.kind !== second.kind || !Object.is(first.value, second.value)) return { path, first: first.value ?? first.kind, second: second.value ?? second.kind }
|
|
94
|
+
const a = first.entries ?? []
|
|
95
|
+
const b = second.entries ?? []
|
|
96
|
+
for (let index = 0; index < Math.max(a.length, b.length); index++) {
|
|
97
|
+
const left = a[index]
|
|
98
|
+
const right = b[index]
|
|
99
|
+
if (left === undefined || right === undefined || left[0] !== right[0]) return { path: `${path}.keys[${index}]`, first: left?.[0], second: right?.[0] }
|
|
100
|
+
const found = difference(left[1], right[1], `${path}[${JSON.stringify(left[0])}]`)
|
|
101
|
+
if (found !== undefined) return found
|
|
102
|
+
}
|
|
103
|
+
return undefined
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Checks a schedule with identical inputs on two independently built worlds.
|
|
108
|
+
* The factory must make a fresh runtime each time (also on diagnostic
|
|
109
|
+
* reruns); it must not read live keyboard, pointer, network, or wall time.
|
|
110
|
+
* Values are compared structurally, with Object.is for primitives (NaN
|
|
111
|
+
* equals NaN). Maps and sets include iteration order. Functions compare by
|
|
112
|
+
* identity; weak collections and promises fail explicitly as uninspectable.
|
|
113
|
+
*/
|
|
114
|
+
export const check = <S extends Schema.Any, Root, const Names extends string>(
|
|
115
|
+
make: (context: Context) => Target<S, Root, Names>,
|
|
116
|
+
options: Options<NoInfer<Names>>
|
|
117
|
+
): CheckResult => {
|
|
118
|
+
if (!Number.isSafeInteger(options.frames) || options.frames < 0) {
|
|
119
|
+
return { ok: false, frame: 0, reason: "invalid-options", run: "first", error: "frames must be a finite whole number, 0 or more" }
|
|
120
|
+
}
|
|
121
|
+
const context: Context = { hostClock: options.hostClock }
|
|
122
|
+
let run: "first" | "second" = "first"
|
|
123
|
+
let frame = 0
|
|
124
|
+
try {
|
|
125
|
+
const first = make(context)
|
|
126
|
+
run = "second"
|
|
127
|
+
const second = make(context)
|
|
128
|
+
if (first.runtime === second.runtime || first.runtime.debug === second.runtime.debug) {
|
|
129
|
+
return { ok: false, frame: 0, reason: "shared-runtime", run, error: "the factory must build a fresh runtime each time" }
|
|
130
|
+
}
|
|
131
|
+
const a = first.schedules[options.schedule]
|
|
132
|
+
const b = second.schedules[options.schedule]
|
|
133
|
+
if (a === undefined || b === undefined) return { ok: false, frame: 0, reason: "invalid-options", run, error: `unknown schedule ${options.schedule}` }
|
|
134
|
+
for (; frame <= options.frames; frame++) {
|
|
135
|
+
if (frame > 0) {
|
|
136
|
+
run = "first"
|
|
137
|
+
const result = first.runtime.tryTick(a)
|
|
138
|
+
if (!result.ok) return { ok: false, frame, reason: "failure", run, error: result.error }
|
|
139
|
+
}
|
|
140
|
+
run = "first"
|
|
141
|
+
const left = capture(first.runtime.debug.dump())
|
|
142
|
+
if (frame > 0) {
|
|
143
|
+
run = "second"
|
|
144
|
+
const result = second.runtime.tryTick(b)
|
|
145
|
+
if (!result.ok) return { ok: false, frame, reason: "failure", run, error: result.error }
|
|
146
|
+
}
|
|
147
|
+
run = "second"
|
|
148
|
+
const found = difference(left, capture(second.runtime.debug.dump()))
|
|
149
|
+
if (found !== undefined) {
|
|
150
|
+
const after = frame === 0 ? undefined : locate(make, context, options.schedule, frame)
|
|
151
|
+
return { ok: false, frame, reason: "difference", difference: found.path, first: found.first, second: found.second, after }
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return { ok: true, frames: options.frames }
|
|
155
|
+
} catch (error) {
|
|
156
|
+
return { ok: false, frame, reason: "defect", run, error }
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
const locate = <S extends Schema.Any, Root, Names extends string>(
|
|
161
|
+
make: (context: Context) => Target<S, Root, Names>, context: Context, schedule: Names, frame: number
|
|
162
|
+
): string | undefined => {
|
|
163
|
+
const stops: Array<() => void> = []
|
|
164
|
+
try {
|
|
165
|
+
const first = make(context)
|
|
166
|
+
const second = make(context)
|
|
167
|
+
const traces: [Array<Trace>, Array<Trace>] = [[], []]
|
|
168
|
+
for (let index = 1; index <= frame; index++) {
|
|
169
|
+
for (const [run, target] of [first, second].entries()) {
|
|
170
|
+
if (index === frame) stops.push(target.runtime.debug.observe((event: Debug.TraceEvent) => {
|
|
171
|
+
const after = event.type === "system" ? event.system : event.type === "deferred" ? "applyDeferred()" : event.type === "transition" ? "applyStateTransitions()" : undefined
|
|
172
|
+
if (after !== undefined) traces[run as 0 | 1].push({ after, state: capture(target.runtime.debug.dump()) })
|
|
173
|
+
}))
|
|
174
|
+
if (!target.runtime.tryTick(target.schedules[schedule]).ok) return undefined
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
for (let index = 0; index < Math.max(traces[0].length, traces[1].length); index++) {
|
|
178
|
+
const a = traces[0][index]
|
|
179
|
+
const b = traces[1][index]
|
|
180
|
+
if (a === undefined || b === undefined || a.after !== b.after) return a?.after ?? b?.after
|
|
181
|
+
if (difference(a.state, b.state) !== undefined) return a.after
|
|
182
|
+
}
|
|
183
|
+
return undefined
|
|
184
|
+
} catch {
|
|
185
|
+
// Diagnostic replay must not replace the original mismatch with a new error.
|
|
186
|
+
return undefined
|
|
187
|
+
} finally {
|
|
188
|
+
for (const stop of stops) stop()
|
|
189
|
+
}
|
|
190
|
+
}
|
package/src/Format.ts
CHANGED
|
@@ -88,6 +88,10 @@ export const value = (input: unknown, options: ValueOptions = {}): string => {
|
|
|
88
88
|
|
|
89
89
|
const list = (items: ReadonlyArray<string>): string => items.length === 0 ? "-" : items.join(", ")
|
|
90
90
|
|
|
91
|
+
/** One transition as `Machine from -> to`; a sub-state without a value prints `(inactive)`. */
|
|
92
|
+
export const transition = (event: Pick<Debug.TransitionEvent, "machine" | "from" | "to">): string =>
|
|
93
|
+
`${event.machine} ${event.from === undefined ? "(inactive)" : String(event.from)} -> ${event.to === undefined ? "(inactive)" : String(event.to)}`
|
|
94
|
+
|
|
91
95
|
/** One system's placements and declared access, indented under its name. */
|
|
92
96
|
export const system = (input: Debug.SystemDescription): string => {
|
|
93
97
|
const lines: Array<string> = [`${input.name} @ ${input.placements.join(", ")}`]
|
|
@@ -100,6 +104,10 @@ export const system = (input: Debug.SystemDescription): string => {
|
|
|
100
104
|
query.without.length > 0 ? `without ${query.without.join(", ")}` : undefined,
|
|
101
105
|
query.added.length > 0 ? `added ${query.added.join(", ")}` : undefined,
|
|
102
106
|
query.changed.length > 0 ? `changed ${query.changed.join(", ")}` : undefined,
|
|
107
|
+
...query.anyOf.map((members) => `any of (${[
|
|
108
|
+
...members.added.map((name) => `added ${name}`),
|
|
109
|
+
...members.changed.map((name) => `changed ${name}`)
|
|
110
|
+
].join(", ")})`),
|
|
103
111
|
query.relations.length > 0 ? query.relations.join(", ") : undefined
|
|
104
112
|
].filter((part) => part !== undefined)
|
|
105
113
|
lines.push(` query ${query.slot}: ${parts.join("; ")}`)
|
|
@@ -107,7 +115,8 @@ export const system = (input: Debug.SystemDescription): string => {
|
|
|
107
115
|
const add = (label: string, items: ReadonlyArray<string>) => {
|
|
108
116
|
if (items.length > 0) lines.push(` ${label}: ${items.join(", ")}`)
|
|
109
117
|
}
|
|
110
|
-
add("reads resources", input.resources.reads)
|
|
118
|
+
add("reads resources", input.resources.reads.filter((name) => !input.resources.changed.includes(name)))
|
|
119
|
+
add("reads resources when changed", input.resources.changed)
|
|
111
120
|
add("writes resources", input.resources.writes)
|
|
112
121
|
add("reads events", input.events.reads)
|
|
113
122
|
add("emits events", input.events.writes)
|
|
@@ -119,6 +128,13 @@ export const system = (input: Debug.SystemDescription): string => {
|
|
|
119
128
|
if (input.despawned) lines.push(" reads despawned")
|
|
120
129
|
add("reads relation failures", input.relationFailures)
|
|
121
130
|
add("services", input.services)
|
|
131
|
+
add("may spawn", input.commands.spawns)
|
|
132
|
+
add("may insert", input.commands.inserts)
|
|
133
|
+
add("may remove", input.commands.removes)
|
|
134
|
+
add("may despawn", input.commands.despawns)
|
|
135
|
+
add("may despawn scope", input.commands.despawnsScope)
|
|
136
|
+
add("may relate", input.commands.relates)
|
|
137
|
+
if (input.thisTick.length > 0) add("needs this tick", input.thisTick)
|
|
122
138
|
add("when", input.when)
|
|
123
139
|
add("pauses when", input.pauseWhen)
|
|
124
140
|
if (input.local) lines.push(" local state")
|
|
@@ -135,7 +151,10 @@ export const lintLines = (lints: ReadonlyArray<Debug.Lint>): Array<string> => [
|
|
|
135
151
|
export const description = (input: Debug.Description): string => {
|
|
136
152
|
const lines: Array<string> = []
|
|
137
153
|
lines.push("# Components")
|
|
138
|
-
for (const component of input.components)
|
|
154
|
+
for (const component of input.components) {
|
|
155
|
+
const notes = [component.storage, ...(component.immutable ? ["immutable"] : []), ...(component.requires.length > 0 ? [`requires ${component.requires.join(", ")}`] : [])]
|
|
156
|
+
lines.push(`${component.name} (${notes.join(", ")})`)
|
|
157
|
+
}
|
|
139
158
|
lines.push("", "# Resources")
|
|
140
159
|
for (const resource of input.resources) {
|
|
141
160
|
lines.push(`${resource.name} (${resource.storage}${resource.present ? "" : ", no value"})`)
|
|
@@ -155,7 +174,14 @@ export const description = (input: Debug.Description): string => {
|
|
|
155
174
|
if (input.machines.length > 0) {
|
|
156
175
|
lines.push("", "# Machines")
|
|
157
176
|
for (const machine of input.machines) {
|
|
158
|
-
|
|
177
|
+
const current = !machine.provided ? "(not provided)" : machine.current === undefined ? "(inactive)" : String(machine.current)
|
|
178
|
+
lines.push(`${machine.name} = ${current} [${machine.states.join(" | ")}]${machine.within === undefined ? "" : ` within ${machine.within}`}`)
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (input.scopes.length > 0) {
|
|
182
|
+
lines.push("", "# Scopes")
|
|
183
|
+
for (const scope of input.scopes) {
|
|
184
|
+
lines.push(`${scope.name}${scope.despawnOn.length > 0 ? ` (despawned on ${scope.despawnOn.join(", ")})` : ""}`)
|
|
159
185
|
}
|
|
160
186
|
}
|
|
161
187
|
if (input.services.length > 0) {
|
|
@@ -253,6 +279,8 @@ const effect = (input: Debug.Effect, options: ValueOptions): string => {
|
|
|
253
279
|
return `unrelate e${input.entity} ${input.relation}`
|
|
254
280
|
case "relationFailure":
|
|
255
281
|
return `relation failure e${input.entity} ${input.relation}: ${input.error}`
|
|
282
|
+
case "requirementViolated":
|
|
283
|
+
return `skipped ${input.command} e${input.entity}: ${input.component} requires ${input.missing}`
|
|
256
284
|
}
|
|
257
285
|
}
|
|
258
286
|
|
|
@@ -269,6 +297,22 @@ export type LineKind =
|
|
|
269
297
|
| "skip"
|
|
270
298
|
| "transition"
|
|
271
299
|
| "restore"
|
|
300
|
+
| "ignored"
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* The text for a failed tick result nobody read: who failed, with what, how
|
|
304
|
+
* many later systems did not run, and when it was found unread.
|
|
305
|
+
*/
|
|
306
|
+
export const ignoredFailure = (event: Debug.FailureIgnoredEvent, options: ValueOptions = {}): string => {
|
|
307
|
+
const who = event.system === undefined ? `${event.schedule} did not run` : `${event.system} failed`
|
|
308
|
+
// A system failure shows what the system returned; anything else (missing requirements) as it is.
|
|
309
|
+
const error = typeof event.error === "object" && event.error !== null && (event.error as { readonly kind?: unknown }).kind === "SystemFailure"
|
|
310
|
+
? (event.error as { readonly error: unknown }).error
|
|
311
|
+
: event.error
|
|
312
|
+
const later = `${event.skipped.length} later ${event.skipped.length === 1 ? "system" : "systems"} did not run`
|
|
313
|
+
const found = event.when === "next-tick" ? "not read before the next tick" : "not read before the session ended"
|
|
314
|
+
return `tick failure ignored: ${who} with ${value(error, options)}; ${later} (${found})`
|
|
315
|
+
}
|
|
272
316
|
|
|
273
317
|
/**
|
|
274
318
|
* Structural equality for plain data: primitives by `Object.is`, arrays and
|
|
@@ -354,6 +398,8 @@ export const lines = (event: Debug.TraceEvent, options: ValueOptions = {}): Read
|
|
|
354
398
|
return []
|
|
355
399
|
case "restore":
|
|
356
400
|
return [{ kind: "restore", frame: event.frame, schedule: "", system: undefined, entity: undefined, subject: undefined, noop: false, text: `restore ${event.ok ? "applied" : "rejected"}` }]
|
|
401
|
+
case "failure.ignored":
|
|
402
|
+
return [{ kind: "ignored", frame: event.frame, schedule: event.schedule, system: event.system, entity: undefined, subject: undefined, noop: false, text: ignoredFailure(event, options) }]
|
|
357
403
|
case "transition":
|
|
358
404
|
return [{
|
|
359
405
|
kind: "transition",
|
|
@@ -363,7 +409,7 @@ export const lines = (event: Debug.TraceEvent, options: ValueOptions = {}): Read
|
|
|
363
409
|
entity: undefined,
|
|
364
410
|
subject: event.machine,
|
|
365
411
|
noop: event.outcome === "unchanged",
|
|
366
|
-
text: `transition ${
|
|
412
|
+
text: `transition ${transition(event)} ${event.outcome}`
|
|
367
413
|
}]
|
|
368
414
|
case "system.skipped": {
|
|
369
415
|
const discarded = event.discarded.map((entry) => `${entry.count} ${entry.stream}`)
|
package/src/Invariant.ts
CHANGED
|
@@ -1,28 +1,54 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Named world checks evaluated after every frame of a session run.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* An invariant is a `Game.Inspector` whose projection returns a message
|
|
5
|
+
* describing the violation, or `undefined` when the invariant holds. The
|
|
6
|
+
* inspector declares its reads like a system and cannot write, so the check
|
|
7
|
+
* is typed and read-only, and `Session.make` rejects at compile time an
|
|
8
|
+
* invariant that reads a resource, service, or machine the runtime does not
|
|
9
|
+
* provide. The invariant is named after its inspector.
|
|
10
|
+
*
|
|
11
|
+
* Use `Invariant.fromInspector` for checks over the world during a session.
|
|
12
|
+
* Use `Game.Inspector` with `runtime.inspect(...)` directly for one-off reads
|
|
13
|
+
* in tests and scripts.
|
|
7
14
|
*
|
|
8
15
|
* @module Invariant
|
|
9
16
|
* @docGroup devtools
|
|
10
17
|
*
|
|
11
18
|
* @example
|
|
12
19
|
* ```ts
|
|
13
|
-
* const PlayerInsideWorld = Invariant.
|
|
14
|
-
*
|
|
15
|
-
*
|
|
20
|
+
* const PlayerInsideWorld = Invariant.fromInspector(Game.Inspector("player inside world", {
|
|
21
|
+
* queries: { players: Game.Query({ selection: { position: Game.Query.read(Position) }, with: [Player] }) }
|
|
22
|
+
* }, ({ queries }) => {
|
|
23
|
+
* for (const { data } of queries.players.each()) {
|
|
24
|
+
* const { x } = data.position.get()
|
|
25
|
+
* if (x < 0 || x > WORLD_WIDTH) return `player at x=${x}`
|
|
16
26
|
* }
|
|
17
27
|
* return undefined
|
|
18
|
-
* })
|
|
28
|
+
* }))
|
|
29
|
+
*
|
|
30
|
+
* const session = Session.make(runtime, { schedules: { update }, invariants: [PlayerInsideWorld] })
|
|
19
31
|
* ```
|
|
20
32
|
*/
|
|
33
|
+
import type * as Inspector from "@typeonce/ritmo/Inspector"
|
|
34
|
+
|
|
35
|
+
export namespace Invariant {
|
|
36
|
+
/** An inspector usable as an invariant: it returns a violation message or `undefined`. */
|
|
37
|
+
export type CheckInspector = Inspector.InspectorDefinition<any, string | undefined, any, any, any>
|
|
38
|
+
}
|
|
21
39
|
|
|
22
|
-
export interface Invariant {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
40
|
+
export interface Invariant<I extends Invariant.CheckInspector = Invariant.CheckInspector> {
|
|
41
|
+
/** The inspector's name, printed when the invariant is violated. */
|
|
42
|
+
readonly name: I["name"]
|
|
43
|
+
/** The read-only check: a violation message, or `undefined` when the invariant holds. */
|
|
44
|
+
readonly inspector: I
|
|
26
45
|
}
|
|
27
46
|
|
|
28
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Turns a `Game.Inspector` that returns `string | undefined` into an
|
|
49
|
+
* invariant for `Session.make({ invariants })`.
|
|
50
|
+
*/
|
|
51
|
+
export const fromInspector = <const I extends Invariant.CheckInspector>(inspector: I): Invariant<I> => ({
|
|
52
|
+
name: inspector.name,
|
|
53
|
+
inspector
|
|
54
|
+
})
|
package/src/Lint.ts
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The static lints of a game's schedules, as a tool: `describe()`'s lints over
|
|
3
|
+
* a headless runtime, each with its fix, and a verdict (warnings fail, info
|
|
4
|
+
* does not).
|
|
5
|
+
*
|
|
6
|
+
* Run it from a game's `check` script with the CLI:
|
|
7
|
+
*
|
|
8
|
+
* ```sh
|
|
9
|
+
* ritmo-devtools lint src/simulation.ts
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* The entry module exports `lintTarget`, a function that builds the game's
|
|
13
|
+
* headless runtime (made with `debug: { hostClock }`) and names its schedules: the
|
|
14
|
+
* ones ticked headless in `schedules`, and the ones that need a renderer or
|
|
15
|
+
* other host services in `describe` (described and linted, never run).
|
|
16
|
+
*
|
|
17
|
+
* Use `Session.make(...).describe()` instead to read the lints while
|
|
18
|
+
* debugging; this module is for the pass/fail check.
|
|
19
|
+
*
|
|
20
|
+
* @module Lint
|
|
21
|
+
* @docGroup devtools
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```ts
|
|
25
|
+
* // src/simulation.ts
|
|
26
|
+
* export const lintTarget = (): Lint.Target<typeof Game.schema, typeof Game.schema> => {
|
|
27
|
+
* const sim = createSimulation({ keyboard: Keyboard.scripted(bindings, []) })
|
|
28
|
+
* return { runtime: sim.runtime, schedules: { setup: sim.setup, update: sim.update }, describe: { render } }
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
import type * as Debug from "@typeonce/ritmo/Debug"
|
|
33
|
+
import type { AnyScheduleOrder, ExecutableScheduleDefinition } from "@typeonce/ritmo/Schedule"
|
|
34
|
+
import type { Schema } from "@typeonce/ritmo/Schema"
|
|
35
|
+
|
|
36
|
+
import * as Rendered from "./Rendered.ts"
|
|
37
|
+
|
|
38
|
+
type AnySchedule<S extends Schema.Any, Root> = ExecutableScheduleDefinition<S, any, Root, any, any, AnyScheduleOrder>
|
|
39
|
+
|
|
40
|
+
/** What `lintTarget` returns. */
|
|
41
|
+
export interface Target<S extends Schema.Any, Root> {
|
|
42
|
+
/** A runtime made with `debug: { hostClock }`. */
|
|
43
|
+
readonly runtime: { readonly debug: Debug.Handle<S, Root> }
|
|
44
|
+
/** The schedules the game ticks, by name. */
|
|
45
|
+
readonly schedules: Readonly<Record<string, AnySchedule<S, Root>>>
|
|
46
|
+
/** Schedules to describe without running (a render schedule needing a renderer). */
|
|
47
|
+
readonly describe?: Readonly<Record<string, AnySchedule<S, Root>>>
|
|
48
|
+
/** Events the host publishes with `runtime.send` (UI requests, network messages): written, for the lints. */
|
|
49
|
+
readonly hostEvents?: ReadonlyArray<Schema.EventDescriptor<S>>
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export interface Report {
|
|
53
|
+
readonly lints: ReadonlyArray<Debug.Lint>
|
|
54
|
+
readonly warnings: number
|
|
55
|
+
readonly infos: number
|
|
56
|
+
/** `true` when there is no warning-level lint. */
|
|
57
|
+
readonly ok: boolean
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Lints the target's schedules. */
|
|
61
|
+
export const run = <S extends Schema.Any, Root>(target: Target<S, Root>): Rendered.Rendered<Report> => {
|
|
62
|
+
target.runtime.debug.nameSchedules({ ...target.describe, ...target.schedules })
|
|
63
|
+
target.runtime.debug.declareHostEvents(target.hostEvents ?? [])
|
|
64
|
+
const lints = target.runtime.debug.describe().lints
|
|
65
|
+
const warnings = lints.filter((lint) => lint.severity === "warning").length
|
|
66
|
+
const report: Report = { lints, warnings, infos: lints.length - warnings, ok: warnings === 0 }
|
|
67
|
+
const lines = [
|
|
68
|
+
...lints.flatMap((lint) => [`${lint.severity} ${lint.code} ${lint.subject}: ${lint.message}`, ` fix: ${lint.fix}`]),
|
|
69
|
+
`${warnings} ${warnings === 1 ? "warning" : "warnings"}, ${report.infos} info${warnings > 0 ? " (warnings fail)" : ""}`
|
|
70
|
+
]
|
|
71
|
+
return Rendered.make(report, lines.join("\n"))
|
|
72
|
+
}
|