@wasm-gaming/engine-specs 0.3.0 → 0.3.2

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.
@@ -21,6 +21,9 @@ export interface EngineAssets {
21
21
  export interface EngineStorage {
22
22
  [key: string]: unknown;
23
23
  }
24
+ export interface EngineEvents {
25
+ [key: string]: unknown;
26
+ }
24
27
  /**
25
28
  * Members are `object`, not the four interfaces above, on purpose: a named
26
29
  * `interface MyEngineConfig { … }` has no implicit index signature, so
@@ -33,12 +36,114 @@ export interface EnginePayloads {
33
36
  options: object;
34
37
  assets: object;
35
38
  storage: object;
39
+ /**
40
+ * The events this engine emits **beyond** {@link CoreEvents}, which every engine
41
+ * emits and no engine declares. Optional, unlike the four above: an engine with
42
+ * nothing of its own to announce omits it.
43
+ */
44
+ events?: object;
36
45
  }
37
46
  export interface DefaultPayloads extends EnginePayloads {
38
47
  config: EngineConfig;
39
48
  options: EngineOptions;
40
49
  assets: EngineAssets;
41
50
  storage: EngineStorage;
51
+ events: EngineEvents;
52
+ }
53
+ /**
54
+ * What every engine emits, whatever else it adds. Unioned in by {@link EventsOf}
55
+ * rather than declared in the payload bundle, so an engine can neither forget these
56
+ * nor redefine them away.
57
+ *
58
+ * There is no `ready`: it announced that the engine was up but no session was open,
59
+ * which was what the removed `boot()` meant.
60
+ */
61
+ export interface CoreEvents<P extends EnginePayloads = DefaultPayloads> {
62
+ /** The options the session opened with. A `restart()` emits it too. */
63
+ start: Partial<P['options']>;
64
+ /**
65
+ * Emitted **and** rejected. Both, always: a host that does not `await` the chain is
66
+ * not left blind, and a host that does is not forced to subscribe.
67
+ */
68
+ error: Error;
69
+ /** The engine went away — `destroy()` has settled. Fires once, with no detail. */
70
+ exit: void;
71
+ /** Who asked, so a host can tell its own pause from a visibility change. */
72
+ pause: {
73
+ owner: string;
74
+ };
75
+ resume: {
76
+ owner: string;
77
+ };
78
+ }
79
+ /**
80
+ * What a listener receives. The payload travels under `detail`, as `CustomEvent`
81
+ * does it, rather than being the argument itself: an event can then grow a field
82
+ * without changing every listener signature, one listener can serve several types by
83
+ * reading `type`, and — the reason that actually decided it — an engine living in a
84
+ * worker has to put its type on the wire anyway, so `{ type, detail }` is the shape
85
+ * that survives `postMessage` instead of being re-wrapped on arrival.
86
+ *
87
+ * **This is not a DOM event.** Two members, and deliberately no more: it does not
88
+ * bubble, it cannot be cancelled, there is no `target` and no `preventDefault()`.
89
+ * Half-implementing a familiar interface is worse than offering a different one, so
90
+ * the shape stops where its guarantees do.
91
+ *
92
+ * Frozen when emitted, because the same object is handed to every listener in turn —
93
+ * otherwise the first could rewrite what the second reads.
94
+ */
95
+ export interface EngineEvent<K = PropertyKey, Detail = unknown> {
96
+ readonly type: K;
97
+ readonly detail: Detail;
98
+ }
99
+ /** What `on` takes for one event of `E`. */
100
+ export type EngineListener<E, K extends keyof E> = (event: EngineEvent<K, E[K]>) => void;
101
+ /**
102
+ * Every event the engine emits: the core set, plus whatever it declared.
103
+ *
104
+ * `NonNullable` is what makes `events` optional: with the member absent, `P['events']`
105
+ * is `object | undefined`, and a bare `object` contributes no keys to the
106
+ * intersection. It also covers an engine that writes `events?:` in its own payload
107
+ * interface.
108
+ */
109
+ export type EventsOf<P extends EnginePayloads> = CoreEvents<P> & NonNullable<P['events']>;
110
+ /** A map of listeners, which is how {@link EngineInit.on} carries them. */
111
+ export type EventListeners<E> = {
112
+ [K in keyof E]?: EngineListener<E, K>;
113
+ };
114
+ /**
115
+ * The listener bookkeeping, shipped rather than described — the one piece of runtime
116
+ * code in this package.
117
+ *
118
+ * It is a **convenience, not a requirement**: the contract stays structural, so an
119
+ * engine that already owns an emitter satisfies {@link EngineSurface} without this.
120
+ * What it saves is the part everyone gets subtly wrong — iterating a copy, so a
121
+ * listener that unsubscribes mid-emit does not corrupt the loop; de-duplicating a
122
+ * listener registered twice; and keeping one throwing listener from silencing the
123
+ * rest.
124
+ *
125
+ * Hold it **privately** and hand the same instance to every carrier. That is what
126
+ * makes `sdk.on(…)` and `play.on(…)` one channel rather than two, lets a host
127
+ * subscribe before the engine exists, and keeps `emit` out of the public API — a host
128
+ * must not be able to forge an engine event.
129
+ */
130
+ export declare class EventEmitter<E> {
131
+ #private;
132
+ /** @param listeners Registered immediately — what `EngineInit.on` carries. */
133
+ constructor(listeners?: EventListeners<E>);
134
+ /** Registering the same listener twice registers it once, as `EventTarget` does. */
135
+ on<K extends keyof E>(type: K, listener: EngineListener<E, K>): this;
136
+ /**
137
+ * The listener is required, as in `EventTarget`. A convenience `off(type)` dropping
138
+ * every listener for a type is a footgun on a page where two components subscribed
139
+ * independently: one unsubscribing would silence the other.
140
+ */
141
+ off<K extends keyof E>(type: K, listener: EngineListener<E, K>): this;
142
+ /**
143
+ * Takes the **detail**, and wraps it. The rest tuple is what lets an event with no
144
+ * detail be emitted as `emit('exit')` while still checking the ones that have one.
145
+ */
146
+ emit<K extends keyof E>(type: K, ...[detail]: E[K] extends void ? [] : [detail: E[K]]): void;
42
147
  }
43
148
  export interface EngineInit<P extends EnginePayloads = DefaultPayloads> {
44
149
  config?: Partial<P['config']>;
@@ -50,6 +155,12 @@ export interface EngineInit<P extends EnginePayloads = DefaultPayloads> {
50
155
  * cumulative state, a mount target is a single value that replaces.
51
156
  */
52
157
  mount?: HTMLElement;
158
+ /**
159
+ * The same subscription as {@link EngineSurface.on}, as a map — the one shape the
160
+ * chain cannot express, because an object literal has nothing to chain onto.
161
+ * `new Sdk({ on: { error } })` and `new Sdk().on('error', error)` are the same call.
162
+ */
163
+ on?: EventListeners<EventsOf<P>>;
53
164
  }
54
165
  export interface EngineSurface<TSelf, P extends EnginePayloads = DefaultPayloads> {
55
166
  config(): Promise<PropertiesDefinition<P['config']>>;
@@ -61,6 +172,21 @@ export interface EngineSurface<TSelf, P extends EnginePayloads = DefaultPayloads
61
172
  storage(): Promise<PropertiesDefinition<P['storage']>>;
62
173
  storage(patch: Partial<P['storage']>): TSelf;
63
174
  mount(target: HTMLElement): TSelf;
175
+ /**
176
+ * Subscribe. Like `mount`, and unlike the four payloads, this has no getter form:
177
+ * there is no `on()` that hands back a listener list.
178
+ *
179
+ * **Synchronous on every carrier, `PromisePlay` included.** The chain is what the
180
+ * return value continues, never what the registration waits for — otherwise
181
+ * `sdk.start().on('error', report)` would bind after the session opened and miss an
182
+ * error thrown while it was opening, which is the error a host most wants.
183
+ *
184
+ * The factory and the engine it opens share one channel, so subscribing before
185
+ * `start()` is the normal way to do it, not a special case.
186
+ */
187
+ on<K extends keyof EventsOf<P>>(type: K, listener: EngineListener<EventsOf<P>, K>): TSelf;
188
+ /** Takes the listener, not just the type — see {@link EventEmitter.off}. */
189
+ off<K extends keyof EventsOf<P>>(type: K, listener: EngineListener<EventsOf<P>, K>): TSelf;
64
190
  }
65
191
  export interface EnginePlay<P extends EnginePayloads = DefaultPayloads> extends EngineSurface<PromisePlay<P>, P> {
66
192
  restart(options?: Partial<P['options']>): PromisePlay<P>;
@@ -79,7 +205,14 @@ export interface PromisePlay<P extends EnginePayloads = DefaultPayloads> extends
79
205
  destroy(): Promise<void>;
80
206
  }
81
207
  export interface EngineSDK<P extends EnginePayloads = DefaultPayloads> extends EngineSurface<EngineSDK<P>, P> {
82
- boot(init?: EngineInit<P>): PromisePlay<P>;
208
+ /**
209
+ * Bring the engine up and open a session — the only way in.
210
+ *
211
+ * A factory governs at most one live engine, so calling it again on a live one
212
+ * reopens the session rather than building a second engine; that is exactly
213
+ * {@link EnginePlay.restart}. Whatever an engine has to do before a session can
214
+ * exist is its own business, done here.
215
+ */
83
216
  start(options?: Partial<P['options']>): PromisePlay<P>;
84
217
  }
85
218
  /**
@@ -96,4 +229,132 @@ export interface EngineSDKConstructor<P extends EnginePayloads = DefaultPayloads
96
229
  readonly description?: string;
97
230
  new (init?: EngineInit<P>): EngineSDK<P>;
98
231
  }
232
+ /**
233
+ * A descriptor with its `value` removed: what an engine *declares*, since the value
234
+ * is state and changes.
235
+ *
236
+ * `default` is declared here and nowhere else. {@link EnginePlayBase} seeds its
237
+ * starting state from it, which is what collapses the two sources of truth every
238
+ * hand-written engine had — an initial `{ region: 'us' }` field alongside a
239
+ * `default: 'us'` in the descriptor, with nothing to catch them drifting apart.
240
+ */
241
+ export type PropertySpec<Value> = Omit<PropertyDefinition<Value>, 'value'>;
242
+ /** `-?` as in {@link PropertiesDefinition}: an engine cannot forget to describe a key. */
243
+ export type PropertiesSpec<T> = {
244
+ [K in keyof T]-?: PropertySpec<T[K]>;
245
+ };
246
+ /** Everything an engine has to say about its four payloads. */
247
+ export interface EngineSpec<P extends EnginePayloads = DefaultPayloads> {
248
+ config: PropertiesSpec<P['config']>;
249
+ options: PropertiesSpec<P['options']>;
250
+ assets: PropertiesSpec<P['assets']>;
251
+ storage: PropertiesSpec<P['storage']>;
252
+ }
253
+ /** The four payload names, which are also the four getter/setter pairs. */
254
+ export type PayloadKind = 'config' | 'options' | 'assets' | 'storage';
255
+ /**
256
+ * Wrap a promise of a live engine in the chainable surface.
257
+ *
258
+ * Exported because it is the single most duplicated function in an engine, and an
259
+ * engine that does not extend {@link EnginePlayBase} still needs exactly this.
260
+ *
261
+ * `on` and `off` do **not** go through the chain: they reach the channel now, so a
262
+ * listener is live before the promise settles. Routing them through it would bind
263
+ * after the session opened and lose whatever was emitted while it was opening.
264
+ */
265
+ export declare function hydratePlay<P extends EnginePayloads = DefaultPayloads>(inner: Promise<EnginePlay<P>>, events: EventEmitter<EventsOf<P>>): PromisePlay<P>;
266
+ /**
267
+ * The live engine, with everything the contract prescribes already written: state,
268
+ * the cumulative merge, the descriptors, the chainable promise, and the channel.
269
+ *
270
+ * A subclass supplies what only it can know — {@link EnginePlayBase.open} and
271
+ * {@link EnginePlayBase.close}, optionally {@link EnginePlayBase.mounted} and
272
+ * {@link EnginePlayBase.patched} — and its properties as an {@link EngineSpec}.
273
+ *
274
+ * The spec arrives as a **constructor argument**, not an abstract field, and that is
275
+ * not a style choice: a subclass field initialiser runs *after* `super()`, so a
276
+ * `protected abstract spec` would still be `undefined` while this constructor seeded
277
+ * state from it. Passing it up makes the ordering trap impossible rather than merely
278
+ * avoided.
279
+ */
280
+ export declare abstract class EnginePlayBase<P extends EnginePayloads = DefaultPayloads> implements EnginePlay<P> {
281
+ #private;
282
+ /**
283
+ * @param events The factory's channel. Omitted only when a play is built on its
284
+ * own; the factory always passes its own, which is what makes `sdk.on(…)` and
285
+ * `play.on(…)` one channel rather than two.
286
+ */
287
+ constructor(spec: EngineSpec<P>, init?: EngineInit<P>, events?: EventEmitter<EventsOf<P>>);
288
+ /**
289
+ * Open or reopen a session with the options as they now stand. Called by
290
+ * `restart()`, which merges the patch, emits `start` once this resolves, and turns
291
+ * a throw into both a rejection and an `error` event.
292
+ */
293
+ protected abstract open(options: P['options']): void | Promise<void>;
294
+ /** Stop and release. `exit` is emitted once this resolves. */
295
+ protected abstract close(): void | Promise<void>;
296
+ /** The element is already recorded when this runs. */
297
+ protected mounted(target: HTMLElement): void | Promise<void>;
298
+ /** A payload changed on a running engine — apply what is `live`, ignore the rest. */
299
+ protected patched(kind: PayloadKind, patch: object): void | Promise<void>;
300
+ /**
301
+ * Emit one of this engine's own events.
302
+ *
303
+ * `protected`, so a typed host cannot forge an engine event — but be exact about
304
+ * what that buys: TypeScript erases `protected`, so this is a compile-time guard,
305
+ * not a capability boundary. Plain JavaScript can still reach it. Only the `#`
306
+ * fields below — the channel and the state — are unreachable at runtime.
307
+ */
308
+ protected emit<K extends keyof EventsOf<P>>(type: K, ...detail: EventsOf<P>[K] extends void ? [] : [detail: EventsOf<P>[K]]): void;
309
+ /** Where the picture is, for a subclass that needs the element after `mounted()`. */
310
+ protected get target(): HTMLElement | undefined;
311
+ config(): Promise<PropertiesDefinition<P['config']>>;
312
+ config(patch: Partial<P['config']>): PromisePlay<P>;
313
+ options(): Promise<PropertiesDefinition<P['options']>>;
314
+ options(patch: Partial<P['options']>): PromisePlay<P>;
315
+ assets(): Promise<PropertiesDefinition<P['assets']>>;
316
+ assets(patch: Partial<P['assets']>): PromisePlay<P>;
317
+ storage(): Promise<PropertiesDefinition<P['storage']>>;
318
+ storage(patch: Partial<P['storage']>): PromisePlay<P>;
319
+ mount(target: HTMLElement): PromisePlay<P>;
320
+ on<K extends keyof EventsOf<P>>(type: K, listener: EngineListener<EventsOf<P>, K>): PromisePlay<P>;
321
+ off<K extends keyof EventsOf<P>>(type: K, listener: EngineListener<EventsOf<P>, K>): PromisePlay<P>;
322
+ restart(options?: Partial<P['options']>): PromisePlay<P>;
323
+ destroy(): Promise<void>;
324
+ }
325
+ /**
326
+ * The factory, with everything the contract prescribes already written: the
327
+ * cumulative init, the synchronous chain, the channel that outlives every session,
328
+ * and one live engine per factory.
329
+ *
330
+ * A subclass supplies its static identity and {@link EngineSDKBase.createPlay}.
331
+ */
332
+ export declare abstract class EngineSDKBase<P extends EnginePayloads = DefaultPayloads> implements EngineSDK<P> {
333
+ #private;
334
+ /**
335
+ * Created before any engine exists and handed to every carrier downstream. That is
336
+ * what lets a host subscribe to an error thrown while the first session opens.
337
+ */
338
+ protected readonly events: EventEmitter<EventsOf<P>>;
339
+ constructor(init?: EngineInit<P>);
340
+ /** Build the live engine. The channel is passed in, never created here. */
341
+ protected abstract createPlay(init: EngineInit<P>, events: EventEmitter<EventsOf<P>>): EnginePlayBase<P>;
342
+ config(): Promise<PropertiesDefinition<P['config']>>;
343
+ config(patch: Partial<P['config']>): this;
344
+ options(): Promise<PropertiesDefinition<P['options']>>;
345
+ options(patch: Partial<P['options']>): this;
346
+ assets(): Promise<PropertiesDefinition<P['assets']>>;
347
+ assets(patch: Partial<P['assets']>): this;
348
+ storage(): Promise<PropertiesDefinition<P['storage']>>;
349
+ storage(patch: Partial<P['storage']>): this;
350
+ /** Recorded now, applied when the engine exists — same call as `new Sdk({ mount })`. */
351
+ mount(target: HTMLElement): this;
352
+ on<K extends keyof EventsOf<P>>(type: K, listener: EngineListener<EventsOf<P>, K>): this;
353
+ off<K extends keyof EventsOf<P>>(type: K, listener: EngineListener<EventsOf<P>, K>): this;
354
+ /**
355
+ * The only way in. On a live engine it reopens the session rather than building a
356
+ * second one: a factory governs at most one engine.
357
+ */
358
+ start(options?: Partial<P['options']>): PromisePlay<P>;
359
+ }
99
360
  //# sourceMappingURL=engine-specs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"engine-specs.d.ts","sourceRoot":"","sources":["../src/engine-specs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine-specs.d.ts","sourceRoot":"","sources":["../src/engine-specs.ts"],"names":[],"mappings":"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"}