@wasm-gaming/engine-specs 0.3.0 → 0.3.1

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/demo/demo.sdk.js CHANGED
@@ -3,9 +3,9 @@
3
3
  * The demo engine, written against the contract in `src/engine-specs.ts`.
4
4
  *
5
5
  * It is a real implementation, not a mock: the four payloads are closed with named
6
- * types, every getter returns descriptors, every setter chains, and `boot()` is
7
- * idempotent. `demo/tsconfig.json` checks it against the contract, so "the demo
8
- * conforms" is verified rather than claimed.
6
+ * types, every getter returns descriptors, every setter chains, and a factory
7
+ * governs at most one live engine. `demo/tsconfig.json` checks it against the
8
+ * contract, so "the demo conforms" is verified rather than claimed.
9
9
  *
10
10
  * What used to live in a manifest lives here now:
11
11
  * `id`/`version`/`name`/`description` are static on the class, the video geometry is
@@ -305,7 +305,7 @@ export class DemoEngineSDK {
305
305
  if (init) this.#init = { ...init }
306
306
  }
307
307
 
308
- /** The engine that answers a read before boot: the settings the next one will use. */
308
+ /** Answers a read before there is an engine: the settings the next one will use. */
309
309
  #pending() {
310
310
  return this.#play ?? new DemoPlay(this.#init)
311
311
  }
@@ -386,23 +386,23 @@ export class DemoEngineSDK {
386
386
  }
387
387
 
388
388
  /**
389
- * Idempotent: a factory governs at most one live engine.
390
- * @param {DemoInit} [init]
391
- * @returns {DemoPromisePlay}
389
+ * Bringing the engine up is this engine's own business, not a step the contract
390
+ * exposes — so it stays private. A factory governs at most one live engine.
391
+ * @returns {DemoPlay}
392
392
  */
393
- boot(init) {
394
- if (init) this.#init = { ...this.#init, ...init }
393
+ #boot() {
395
394
  this.#play ??= new DemoPlay(this.#init)
396
- return hydrate(Promise.resolve(this.#play))
395
+ return this.#play
397
396
  }
398
397
 
399
398
  /**
400
- * `start(p)` is `boot().restart(p)` — literally, so the equivalence cannot drift.
399
+ * The only way in. On a live engine it reopens the session rather than
400
+ * rebuilding one.
401
401
  * @param {Partial<DemoOptions>} [options]
402
402
  * @returns {DemoPromisePlay}
403
403
  */
404
404
  start(options) {
405
- return this.boot().restart(options)
405
+ return hydrate(Promise.resolve(this.#boot())).restart(options)
406
406
  }
407
407
  }
408
408
 
@@ -79,7 +79,14 @@ export interface PromisePlay<P extends EnginePayloads = DefaultPayloads> extends
79
79
  destroy(): Promise<void>;
80
80
  }
81
81
  export interface EngineSDK<P extends EnginePayloads = DefaultPayloads> extends EngineSurface<EngineSDK<P>, P> {
82
- boot(init?: EngineInit<P>): PromisePlay<P>;
82
+ /**
83
+ * Bring the engine up and open a session — the only way in.
84
+ *
85
+ * A factory governs at most one live engine, so calling it again on a live one
86
+ * reopens the session rather than building a second engine; that is exactly
87
+ * {@link EnginePlay.restart}. Whatever an engine has to do before a session can
88
+ * exist is its own business, done here.
89
+ */
83
90
  start(options?: Partial<P['options']>): PromisePlay<P>;
84
91
  }
85
92
  /**
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wasm-gaming/engine-specs",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "The wasm-gaming engine contract: the single shared JS API every WASM game/emulator engine and the host app conform to. TypeScript types, no runtime dependencies.",
5
5
  "type": "module",
6
6
  "types": "./dist/engine-specs.d.ts",
@@ -89,7 +89,14 @@ export interface PromisePlay<P extends EnginePayloads = DefaultPayloads>
89
89
 
90
90
  export interface EngineSDK<P extends EnginePayloads = DefaultPayloads>
91
91
  extends EngineSurface<EngineSDK<P>, P> {
92
- boot(init?: EngineInit<P>): PromisePlay<P>;
92
+ /**
93
+ * Bring the engine up and open a session — the only way in.
94
+ *
95
+ * A factory governs at most one live engine, so calling it again on a live one
96
+ * reopens the session rather than building a second engine; that is exactly
97
+ * {@link EnginePlay.restart}. Whatever an engine has to do before a session can
98
+ * exist is its own business, done here.
99
+ */
93
100
  start(options?: Partial<P['options']>): PromisePlay<P>;
94
101
  }
95
102