@typeonce/ritmo 0.6.0 → 0.7.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 (125) hide show
  1. package/README.md +2 -0
  2. package/dist/Brand.d.ts +9 -4
  3. package/dist/Brand.d.ts.map +1 -1
  4. package/dist/Brand.js +9 -4
  5. package/dist/Brand.js.map +1 -1
  6. package/dist/Clock.d.ts +186 -0
  7. package/dist/Clock.d.ts.map +1 -0
  8. package/dist/Clock.js +111 -0
  9. package/dist/Clock.js.map +1 -0
  10. package/dist/Command.d.ts +157 -33
  11. package/dist/Command.d.ts.map +1 -1
  12. package/dist/Command.js +49 -15
  13. package/dist/Command.js.map +1 -1
  14. package/dist/Debug.d.ts +104 -12
  15. package/dist/Debug.d.ts.map +1 -1
  16. package/dist/Debug.js.map +1 -1
  17. package/dist/Decode.d.ts +1 -1
  18. package/dist/Decode.js +1 -1
  19. package/dist/Descriptor.d.ts +31 -21
  20. package/dist/Descriptor.d.ts.map +1 -1
  21. package/dist/Descriptor.js +21 -12
  22. package/dist/Descriptor.js.map +1 -1
  23. package/dist/Entity.d.ts +14 -5
  24. package/dist/Entity.d.ts.map +1 -1
  25. package/dist/Entity.js +2 -2
  26. package/dist/Entity.js.map +1 -1
  27. package/dist/EntityScope.d.ts +6 -0
  28. package/dist/EntityScope.d.ts.map +1 -1
  29. package/dist/EntityScope.js +6 -0
  30. package/dist/EntityScope.js.map +1 -1
  31. package/dist/HostClock.d.ts +49 -0
  32. package/dist/HostClock.d.ts.map +1 -0
  33. package/dist/HostClock.js +46 -0
  34. package/dist/HostClock.js.map +1 -0
  35. package/dist/Inspector.d.ts +7 -1
  36. package/dist/Inspector.d.ts.map +1 -1
  37. package/dist/Inspector.js.map +1 -1
  38. package/dist/Machine.d.ts +12 -3
  39. package/dist/Machine.d.ts.map +1 -1
  40. package/dist/Machine.js +4 -1
  41. package/dist/Machine.js.map +1 -1
  42. package/dist/Query.d.ts +28 -24
  43. package/dist/Query.d.ts.map +1 -1
  44. package/dist/Query.js +0 -24
  45. package/dist/Query.js.map +1 -1
  46. package/dist/Runtime.d.ts +36 -16
  47. package/dist/Runtime.d.ts.map +1 -1
  48. package/dist/Runtime.js +230 -67
  49. package/dist/Runtime.js.map +1 -1
  50. package/dist/Schedule.d.ts +217 -10
  51. package/dist/Schedule.d.ts.map +1 -1
  52. package/dist/Schedule.js +5 -0
  53. package/dist/Schedule.js.map +1 -1
  54. package/dist/Schema.d.ts +61 -25
  55. package/dist/Schema.d.ts.map +1 -1
  56. package/dist/Schema.js +0 -8
  57. package/dist/Schema.js.map +1 -1
  58. package/dist/System.d.ts +149 -52
  59. package/dist/System.d.ts.map +1 -1
  60. package/dist/System.js +52 -6
  61. package/dist/System.js.map +1 -1
  62. package/dist/index.d.ts +8 -7
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +8 -7
  65. package/dist/index.js.map +1 -1
  66. package/dist/internal/cells.d.ts +3 -3
  67. package/dist/internal/cells.d.ts.map +1 -1
  68. package/dist/internal/cells.js +9 -11
  69. package/dist/internal/cells.js.map +1 -1
  70. package/dist/internal/debug.d.ts +6 -0
  71. package/dist/internal/debug.d.ts.map +1 -1
  72. package/dist/internal/debug.js +95 -1
  73. package/dist/internal/debug.js.map +1 -1
  74. package/dist/internal/game.d.ts.map +1 -1
  75. package/dist/internal/game.js +9 -2
  76. package/dist/internal/game.js.map +1 -1
  77. package/dist/internal/order.d.ts +10 -0
  78. package/dist/internal/order.d.ts.map +1 -0
  79. package/dist/internal/order.js +120 -0
  80. package/dist/internal/order.js.map +1 -0
  81. package/dist/internal/queries.js +2 -2
  82. package/dist/internal/queries.js.map +1 -1
  83. package/package.json +1 -1
  84. package/src/Brand.ts +9 -4
  85. package/src/Clock.ts +311 -0
  86. package/src/Command.ts +271 -73
  87. package/src/Debug.ts +111 -10
  88. package/src/Decode.ts +1 -1
  89. package/src/Descriptor.ts +37 -27
  90. package/src/Entity.ts +15 -5
  91. package/src/EntityScope.ts +6 -0
  92. package/src/HostClock.ts +64 -0
  93. package/src/Inspector.ts +7 -2
  94. package/src/Machine.ts +13 -3
  95. package/src/Query.ts +41 -33
  96. package/src/Runtime.ts +273 -91
  97. package/src/Schedule.ts +380 -13
  98. package/src/Schema.ts +70 -41
  99. package/src/System.ts +174 -88
  100. package/src/index.ts +8 -7
  101. package/src/internal/cells.ts +10 -12
  102. package/src/internal/debug.ts +104 -4
  103. package/src/internal/game.ts +11 -3
  104. package/src/internal/order.ts +140 -0
  105. package/src/internal/queries.ts +3 -3
  106. package/dist/Definition.d.ts +0 -99
  107. package/dist/Definition.d.ts.map +0 -1
  108. package/dist/Definition.js +0 -68
  109. package/dist/Definition.js.map +0 -1
  110. package/dist/Feature.d.ts +0 -106
  111. package/dist/Feature.d.ts.map +0 -1
  112. package/dist/Feature.js +0 -87
  113. package/dist/Feature.js.map +0 -1
  114. package/dist/Fx.d.ts +0 -128
  115. package/dist/Fx.d.ts.map +0 -1
  116. package/dist/Fx.js +0 -112
  117. package/dist/Fx.js.map +0 -1
  118. package/dist/internal/definition.d.ts +0 -17
  119. package/dist/internal/definition.d.ts.map +0 -1
  120. package/dist/internal/definition.js +0 -25
  121. package/dist/internal/definition.js.map +0 -1
  122. package/src/Definition.ts +0 -106
  123. package/src/Feature.ts +0 -241
  124. package/src/Fx.ts +0 -176
  125. package/src/internal/definition.ts +0 -56
@@ -84,7 +84,7 @@ export const makeQueryEngine = (world) => {
84
84
  mode: "write",
85
85
  ordinal,
86
86
  constructor: DescriptorModule.constructorOf(access.descriptor),
87
- state: DescriptorModule.isState(access.descriptor) ? access.descriptor.name : undefined
87
+ entityState: DescriptorModule.isEntityState(access.descriptor) ? access.descriptor.name : undefined
88
88
  });
89
89
  }
90
90
  else {
@@ -196,7 +196,7 @@ export const makeQueryEngine = (world) => {
196
196
  case "read":
197
197
  return Cells.componentRead(record, plan.ordinal);
198
198
  case "write":
199
- return Cells.componentWrite(record, plan.ordinal, world, plan.constructor, plan.state);
199
+ return Cells.componentWrite(record, plan.ordinal, world, plan.constructor, plan.entityState);
200
200
  case "optional":
201
201
  return Cells.componentOptional(record, plan.ordinal);
202
202
  case "readRelation":
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/internal/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/internal/queries.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeonce/ritmo",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "The agent-first type safe ECS runtime",
5
5
  "author": "Sandro Maglione",
6
6
  "license": "MIT",
package/src/Brand.ts CHANGED
@@ -5,10 +5,15 @@
5
5
  * input without changing their runtime representation. Constructors built with
6
6
  * this module are always explicit and non-throwing.
7
7
  *
8
- * This matters in game code whenever one plain structural shape is too weak to
9
- * express a guarantee. Helpers like `Vector2`, `Size2`, `Scalar`, and `Aabb`
10
- * all build on this module so validated values can move through the ECS
11
- * without losing the fact that they were checked once already.
8
+ * This module is for packages that author validated value types, like
9
+ * `@typeonce/ritmo-math`: `Vector2`, `Size2`, `Scalar`, and `Aabb` all build
10
+ * on it so validated values can move through the ECS without losing the fact
11
+ * that they were checked once already.
12
+ *
13
+ * Game code does not brand values. It validates through descriptors: a
14
+ * descriptor owns its validator (`Descriptor.ConstructedComponent(Vector2)`,
15
+ * a `Decode` validator, or `Descriptor.fromStandardSchema(...)`), and raw
16
+ * input goes through it with `Game.Command.entryRaw(...)` or `setRaw(...)`.
12
17
  *
13
18
  * @example
14
19
  * ```ts
package/src/Clock.ts ADDED
@@ -0,0 +1,311 @@
1
+ /**
2
+ * Simulation time: a fixed step, a clock resource the schedule advances, and
3
+ * durations in whole steps.
4
+ *
5
+ * - `Clock.hz(60)` is the step (`dt = 1/60`). The host loop and the clock
6
+ * share it: `FixedLoop.start({ step, ... })`.
7
+ * - `Clock.resource(name, step)` is the resource holding the time
8
+ * (`{ step, hz, dt }`), and `Clock.start(step)` its first value.
9
+ * - `Clock.system(Game, { name, resource, hold })` advances it every tick:
10
+ * `step + 1` and `dt = 1/hz`, or `dt = 0` while a `hold` condition passes.
11
+ * - `Clock.duration(step, 0.5)` is a span in whole steps; `Clock.every(t, d)`
12
+ * is true on the step each period begins; `Clock.elapsed(t)` is exact.
13
+ *
14
+ * Time is counted in steps, never accumulated in floating point: elapsed
15
+ * seconds are `step / hz`.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const step = Clock.hz(60)
20
+ * const Time = Clock.resource("Game/Time", step)
21
+ * const Game = Schema.bind(Schema.fragment({ resources: { Time } }))
22
+ * const AdvanceTime = Clock.system(Game, { name: "Game/AdvanceTime", resource: Time, hold: [paused] })
23
+ * const runtime = Game.Runtime.make({ services, resources: { Time: Clock.start(step) } })
24
+ * ```
25
+ *
26
+ * @module Clock
27
+ * @docGroup runtime
28
+ */
29
+ import type { Descriptor } from "./Descriptor.ts"
30
+ import * as DescriptorModule from "./Descriptor.ts"
31
+ import type { Condition, ConditionNeeds, NotCondition, OrCondition } from "./Machine.ts"
32
+ import * as Result from "./Result.ts"
33
+ import type * as Schedule from "./Schedule.ts"
34
+ import type { Schema } from "./Schema.ts"
35
+ import type * as System from "./System.ts"
36
+
37
+ // ── The step ────────────────────────────────────────────────────────────
38
+
39
+ declare const stepBrand: unique symbol
40
+ declare const durationBrand: unique symbol
41
+ declare const resourceBrand: unique symbol
42
+ type IsUnion<T, Whole = T> = T extends Whole ? [Whole] extends [T] ? false : true : never
43
+
44
+ /** A fixed step: `hz` steps per second, `dt = 1 / hz` seconds each. */
45
+ export interface Step<Hz extends number = number> {
46
+ readonly [stepBrand]: Hz
47
+ readonly kind: "ClockStep"
48
+ readonly hz: Hz
49
+ readonly dt: number
50
+ }
51
+
52
+ type HzMessage = "Clock.hz needs a positive whole number of steps per second"
53
+
54
+ /** `N` when it is a literal positive whole number; otherwise the message naming what is wrong. */
55
+ export type ValidHz<N extends number> =
56
+ number extends N ? "Clock.hz needs a literal"
57
+ : true extends IsUnion<N> ? "Clock.hz needs one literal rate"
58
+ : `${N}` extends `-${string}` | `${string}.${string}` | `${string}e${string}` | "0" ? HzMessage
59
+ : AtLeast<Trimmed<Reversed<`${N}`>>, Reversed<"9007199254740992">> extends true ? HzMessage
60
+ : N
61
+
62
+ /**
63
+ * The step of `hz` steps per second. `hz` must be a positive whole literal
64
+ * (`Clock.hz(60)`); anything else is a compile error, and the same check
65
+ * runs at runtime (it throws, which only a cast can reach).
66
+ */
67
+ export const hz = <const N extends number>(hz: ValidHz<N>): Step<N> => {
68
+ const value = hz as number
69
+ if (!Number.isSafeInteger(value) || value <= 0) throw new Error(`Clock.hz needs a positive whole number of steps per second, got ${value}`)
70
+ return { kind: "ClockStep", hz: value as N, dt: 1 / value } as Step<N>
71
+ }
72
+
73
+ // ── The time value and its resource ─────────────────────────────────────
74
+
75
+ /** The clock: steps advanced since the start, the rate, and this tick's seconds. */
76
+ export interface Time<Hz extends number = number> {
77
+ /** Steps advanced since the start (held ticks do not count). */
78
+ readonly step: number
79
+ readonly hz: Hz
80
+ /** Seconds this tick: `1 / hz` when the clock advanced, 0 while held. */
81
+ readonly dt: number
82
+ }
83
+
84
+ /** A saved or provided clock value that does not fit this game's clock. */
85
+ export interface InvalidTime {
86
+ readonly _tag: "InvalidTime"
87
+ readonly message: string
88
+ }
89
+
90
+ /** The first value of a clock: step 0, nothing elapsed yet. */
91
+ export const start = <Hz extends number>(step: Step<Hz>): Time<Hz> => ({ step: 0, hz: step.hz, dt: 0 })
92
+
93
+ const timeOf = <Hz extends number>(step: Step<Hz>, raw: unknown): Result.Result<Time<Hz>, InvalidTime> => {
94
+ if (typeof raw !== "object" || raw === null) return Result.failure({ _tag: "InvalidTime", message: "a clock value is an object { step, hz, dt }" })
95
+ const value = raw as { readonly step?: unknown; readonly hz?: unknown; readonly dt?: unknown }
96
+ if (value.hz !== step.hz) {
97
+ return Result.failure({
98
+ _tag: "InvalidTime",
99
+ message: typeof value.hz === "number" ? `saved at ${value.hz} Hz, this game runs at ${step.hz} Hz` : `hz must be ${step.hz}`
100
+ })
101
+ }
102
+ if (typeof value.step !== "number" || !Number.isSafeInteger(value.step) || value.step < 0) {
103
+ return Result.failure({ _tag: "InvalidTime", message: "step must be a whole number of steps, 0 or more" })
104
+ }
105
+ if (value.dt !== 0 && value.dt !== step.dt) return Result.failure({ _tag: "InvalidTime", message: `dt must be 0 or 1/${step.hz}` })
106
+ return Result.success({ step: value.step, hz: step.hz, dt: value.dt })
107
+ }
108
+
109
+ /** The descriptor `Clock.resource` returns: a validated resource holding `Time<Hz>`. */
110
+ export type ClockResource<Name extends string, Hz extends number> =
111
+ DescriptorModule.DecodableDescriptor<"resource", Name, Time<Hz>, Time<Hz>, InvalidTime> & { readonly [resourceBrand]: Hz }
112
+
113
+ /**
114
+ * A resource holding a clock that runs at `step`. Its validator rejects a
115
+ * value of another rate, so restoring a save made at another step length
116
+ * fails (`InvalidResource` naming it: "saved at 60 Hz, this game runs at
117
+ * 120 Hz"). A game may hold several clocks under different names.
118
+ *
119
+ * It is a validated resource, so a runtime given its value
120
+ * (`resources: { Time: Clock.start(step) }`) is made as a `Result`, like any
121
+ * runtime given validated resources.
122
+ */
123
+ export const resource = <const Name extends string, Hz extends number>(name: Name, step: Step<Hz>): ClockResource<Name, Hz> =>
124
+ DescriptorModule.ConstructedResource({
125
+ result: (raw: Time<Hz>) => timeOf(step, raw),
126
+ decode: (raw: unknown) => timeOf(step, raw)
127
+ })(name) as unknown as ClockResource<Name, Hz>
128
+
129
+ /** Seconds of simulation time since the start: `step / hz`, exact (no accumulated floats). */
130
+ export const elapsed = (time: Time): number => time.step / time.hz
131
+
132
+ // ── The system ──────────────────────────────────────────────────────────
133
+
134
+ type ClockAccess<R, When extends ReadonlyArray<Condition>> = {
135
+ readonly resources: { readonly clock: System.ResourceWrite<R & Descriptor<"resource", string, any>> }
136
+ readonly when: When
137
+ }
138
+
139
+ type ClockSystem<S extends Schema.Any, Root, R, Name extends string, When extends ReadonlyArray<Condition>> =
140
+ Schema.BoundSystem<S, Root, System.SystemSpec<S, ClockAccess<R, When>, Root>, never, Name, System.SystemAccessNeeds<ClockAccess<R, When>>>
141
+
142
+ type HeldWhen<Hold extends ReadonlyArray<Condition>> = readonly [OrCondition<Hold, ConditionNeeds<Hold[number]>>]
143
+ type RunsWhen<Hold extends ReadonlyArray<Condition>> =
144
+ readonly [NotCondition<OrCondition<Hold, ConditionNeeds<Hold[number]>>, ConditionNeeds<Hold[number]>>]
145
+
146
+ /** What `Clock.system` builds: the clock's two writers, in order. */
147
+ export type ClockSchedule<S extends Schema.Any, Root, R, Name extends string, Hold extends ReadonlyArray<Condition>> =
148
+ Schedule.AnonymousScheduleBuildFor<S, readonly [
149
+ ClockSystem<S, Root, R, `${Name}/Hold`, HeldWhen<Hold>>,
150
+ ClockSystem<S, Root, R, Name, RunsWhen<Hold>>
151
+ ], Root>
152
+
153
+ /**
154
+ * Advances a clock resource every tick: while any `hold` condition passes
155
+ * (a pause, a menu), time stands still (`dt = 0`, `every` false); otherwise
156
+ * `step + 1` and `dt = 1 / hz`. A plugin: list it in the schedule like any
157
+ * system, before every system that reads the time this tick.
158
+ *
159
+ * It is two systems: `<name>/Hold` sets `dt` to 0 while held, and `<name>`
160
+ * advances otherwise. Gating one system with `when` instead would leave the
161
+ * last advancing tick's `dt` (and `every`) in place for the whole pause.
162
+ */
163
+ export const system = <
164
+ S extends Schema.Any,
165
+ Root,
166
+ const Name extends string,
167
+ R extends Schema.ResourceDescriptor<S> & ClockResource<any, any>,
168
+ const Hold extends ReadonlyArray<Condition<Root>> = readonly []
169
+ >(
170
+ Game: Schema.Game<S, Root>,
171
+ options: { readonly name: Name; readonly resource: R; readonly hold?: Hold }
172
+ ): ClockSchedule<S, Root, R, Name, Hold> => {
173
+ // Internally the descriptors are erased; the result type above carries the exact access.
174
+ const Sys = Game.System as unknown as (name: string, spec: object, run: (context: { readonly resources: { readonly clock: { update: (f: (time: Time) => Time) => void } } }) => void) => unknown
175
+ const Build = Game.Schedule as unknown as (...entries: ReadonlyArray<unknown>) => unknown
176
+ const held = Game.Condition.or(...(options.hold ?? []))
177
+ const write = { clock: Game.System.writeResource(options.resource) }
178
+ const Hold = Sys(`${options.name}/Hold`, { resources: write, when: [held] }, ({ resources }) => {
179
+ resources.clock.update((time) => time.dt === 0 ? time : { step: time.step, hz: time.hz, dt: 0 })
180
+ })
181
+ const Advance = Sys(options.name, { resources: write, when: [Game.Condition.not(held)] }, ({ resources }) => {
182
+ resources.clock.update((time) => ({ step: time.step + 1, hz: time.hz, dt: 1 / time.hz }))
183
+ })
184
+ return Build(Hold, Advance) as ClockSchedule<S, Root, R, Name, Hold>
185
+ }
186
+
187
+ // ── Durations ───────────────────────────────────────────────────────────
188
+
189
+ /** A span of simulation time in whole steps of one clock rate. */
190
+ export interface Duration<Hz extends number = number> {
191
+ readonly [durationBrand]: Hz
192
+ readonly kind: "ClockDuration"
193
+ readonly steps: number
194
+ readonly hz: Hz
195
+ }
196
+
197
+ /** Why `durationRaw` refused a number of seconds. */
198
+ export interface InvalidDuration {
199
+ readonly _tag: "InvalidDuration"
200
+ readonly seconds: number
201
+ readonly message: string
202
+ }
203
+
204
+ // Type-level decimal arithmetic for literal seconds: digits as reversed tuples.
205
+ type Digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
206
+ type Units<D extends Digit> = {
207
+ "0": []; "1": [0]; "2": [0, 0]; "3": [0, 0, 0]; "4": [0, 0, 0, 0]; "5": [0, 0, 0, 0, 0]
208
+ "6": [0, 0, 0, 0, 0, 0]; "7": [0, 0, 0, 0, 0, 0, 0]; "8": [0, 0, 0, 0, 0, 0, 0, 0]; "9": [0, 0, 0, 0, 0, 0, 0, 0, 0]
209
+ }[D]
210
+ type Reversed<S extends string, Out extends Array<Digit> = []> =
211
+ S extends `${infer Head extends Digit}${infer Tail}` ? Reversed<Tail, [Head, ...Out]> : Out
212
+ type SumDigit<A extends Digit, B extends Digit, Carry extends 0 | 1> =
213
+ `${[...Units<A>, ...Units<B>, ...(Carry extends 1 ? [0] : [])]["length"] & number}` extends infer Sum extends string
214
+ ? Sum extends `1${infer Low extends Digit}` ? [Low, 1] : Sum extends Digit ? [Sum, 0] : never
215
+ : never
216
+ type Add<A extends Array<Digit>, B extends Array<Digit>, Carry extends 0 | 1 = 0, Out extends Array<Digit> = []> =
217
+ [A, B] extends [[], []] ? Carry extends 1 ? [...Out, "1"] : Out
218
+ : SumDigit<A extends [infer X extends Digit, ...Array<Digit>] ? X : "0", B extends [infer Y extends Digit, ...Array<Digit>] ? Y : "0", Carry> extends [infer D extends Digit, infer C extends 0 | 1]
219
+ ? Add<A extends [Digit, ...infer RA extends Array<Digit>] ? RA : [], B extends [Digit, ...infer RB extends Array<Digit>] ? RB : [], C, [...Out, D]>
220
+ : never
221
+ type Times<A extends Array<Digit>, Count extends Array<0>, Out extends Array<Digit> = []> =
222
+ Count extends [0, ...infer Rest extends Array<0>]
223
+ ? Add<Out, A> extends infer Sum extends Array<Digit> ? Times<A, Rest, Sum> : never
224
+ : Out
225
+ type Multiply<A extends Array<Digit>, B extends Array<Digit>, Shift extends Array<Digit> = [], Out extends Array<Digit> = []> =
226
+ B extends [infer D extends Digit, ...infer Rest extends Array<Digit>]
227
+ ? Times<A, Units<D>> extends infer Partial extends Array<Digit>
228
+ ? Add<Out, [...Shift, ...Partial]> extends infer Sum extends Array<Digit>
229
+ ? Multiply<A, Rest, ["0", ...Shift], Sum>
230
+ : never
231
+ : never
232
+ : Out
233
+ type Trimmed<A extends Array<Digit>> = A extends [...infer Rest extends Array<Digit>, "0"] ? Trimmed<Rest> : A
234
+ /** Whether reversed `A` >= reversed `B` (both trimmed of leading zeros). */
235
+ type AtLeast<A extends Array<Digit>, B extends Array<Digit>> =
236
+ A["length"] extends B["length"] ? MostSignificantAtLeast<A, B> : LongerThan<A, B>
237
+ /** Whether `A` has more elements than `B`. */
238
+ type LongerThan<A extends Array<unknown>, B extends Array<unknown>> =
239
+ B extends [unknown, ...infer RB] ? A extends [unknown, ...infer RA] ? LongerThan<RA, RB> : false : A extends [] ? false : true
240
+ /** Equal lengths: compare from the most significant digit (the end of a reversed tuple). */
241
+ type MostSignificantAtLeast<A extends Array<Digit>, B extends Array<Digit>> =
242
+ [A, B] extends [[...infer RA extends Array<Digit>, infer X extends Digit], [...infer RB extends Array<Digit>, infer Y extends Digit]]
243
+ ? X extends Y ? MostSignificantAtLeast<RA, RB> : LongerThan<Units<X>, Units<Y>>
244
+ : true
245
+ type ZerosAfterOne<Fraction extends string, Out extends Array<Digit> = []> =
246
+ Fraction extends `${Digit}${infer Rest}` ? ZerosAfterOne<Rest, ["0", ...Out]> : [...Out, "1"]
247
+
248
+ /** Whether `0.Fraction` seconds at `Hz` steps per second is at least one step: `Fraction * Hz >= 10^digits`. */
249
+ type FractionReachesStep<Fraction extends string, Hz extends number> =
250
+ AtLeast<Trimmed<Multiply<Reversed<Fraction>, Reversed<`${Hz}`>>>, ZerosAfterOne<Fraction>>
251
+
252
+ type MantissaDigits<S extends string> = S extends `${infer Whole}.${infer Fraction}` ? `${Whole}${Fraction}` : S
253
+ type ScientificFraction<Mantissa extends string, Exponent extends string, Count extends Array<0> = [0], Zeros extends string = ""> =
254
+ `${Count["length"]}` extends Exponent ? `${Zeros}${MantissaDigits<Mantissa>}`
255
+ : ScientificFraction<Mantissa, Exponent, [...Count, 0], `${Zeros}0`>
256
+
257
+ /** `Seconds` when it is a literal, non-negative, and at least one step at `Hz`; otherwise the message. */
258
+ export type ValidDuration<Hz extends number, Seconds extends number> =
259
+ number extends Seconds ? "Clock.duration needs a literal number of seconds: use Clock.durationRaw for data"
260
+ : true extends IsUnion<Seconds> ? "Clock.duration needs one literal duration: use Clock.durationRaw for data"
261
+ : number extends Hz ? "Clock.duration needs a step built with Clock.hz(literal)"
262
+ : `${Seconds}` extends `-${string}` ? "Clock.duration needs a non-negative number of seconds"
263
+ : `${Seconds}` extends "0" ? `${Seconds}s is shorter than one step (1/${Hz}s)`
264
+ : `${Seconds}` extends `${string}e+${string}` ? "a duration must fit in a safe whole number of steps"
265
+ : `${Seconds}` extends `${infer Mantissa}e-${infer Exponent}`
266
+ ? FractionReachesStep<ScientificFraction<Mantissa, Exponent>, Hz> extends true ? Seconds : `${Seconds}s is shorter than one step (1/${Hz}s)`
267
+ : `${Seconds}` extends `0.${infer Fraction}`
268
+ ? FractionReachesStep<Fraction, Hz> extends true ? Seconds : `${Seconds}s is shorter than one step (1/${Hz}s)`
269
+ : Seconds
270
+
271
+ const stepsOf = (hz: number, seconds: number): Result.Result<number, InvalidDuration> => {
272
+ if (!Number.isFinite(seconds) || seconds < 0) {
273
+ return Result.failure({ _tag: "InvalidDuration", seconds, message: "a duration needs a finite, non-negative number of seconds" })
274
+ }
275
+ // Exact check first (at least one whole step), then round to the nearest whole step, half up.
276
+ if (seconds * hz < 1 - 1e-9) {
277
+ return Result.failure({ _tag: "InvalidDuration", seconds, message: `${seconds}s is shorter than one step (1/${hz}s)` })
278
+ }
279
+ const steps = Math.max(1, Math.round(seconds * hz))
280
+ if (!Number.isSafeInteger(steps)) return Result.failure({ _tag: "InvalidDuration", seconds, message: "a duration must fit in a safe whole number of steps" })
281
+ return Result.success(steps)
282
+ }
283
+
284
+ /**
285
+ * A literal number of seconds as whole steps of `step`: at least one step,
286
+ * rounded to the nearest whole step (half up), so `Clock.duration(Clock.hz(60), 0.025)`
287
+ * is 2 steps (1.5 rounds up). Shorter than one step is a compile error
288
+ * ("0.001s is shorter than one step (1/60s)"). For seconds read from data,
289
+ * use `durationRaw`.
290
+ */
291
+ export const duration = <Hz extends number, const Seconds extends number>(step: Step<Hz>, seconds: ValidDuration<Hz, Seconds>): Duration<Hz> => {
292
+ const steps = stepsOf(step.hz, seconds as number)
293
+ if (!steps.ok) throw new Error(steps.error.message)
294
+ return { kind: "ClockDuration", steps: steps.value, hz: step.hz } as Duration<Hz>
295
+ }
296
+
297
+ /** Seconds from data as whole steps of `step`, the same rules as `duration`, as a `Result`. */
298
+ export const durationRaw = <Hz extends number>(step: Step<Hz>, seconds: number): Result.Result<Duration<Hz>, InvalidDuration> => {
299
+ const steps = stepsOf(step.hz, seconds)
300
+ return steps.ok ? Result.success({ kind: "ClockDuration", steps: steps.value, hz: step.hz } as Duration<Hz>) : steps
301
+ }
302
+
303
+ /** The whole steps a duration spans. */
304
+ export const steps = (duration: Duration): number => duration.steps
305
+
306
+ /**
307
+ * Whether a period of `duration` begins on this tick: the clock advanced
308
+ * (not held) to a step that is a multiple of the period. False while held.
309
+ */
310
+ export const every = <Hz extends number>(time: Time<Hz>, duration: Duration<NoInfer<Hz>>): boolean =>
311
+ time.dt > 0 && time.step % duration.steps === 0