@wasm-gaming/rsdkv5-wasm 0.1.0 → 0.1.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.
- package/README.md +79 -6
- package/dist/rsdkv5/engine-specs.js +382 -0
- package/dist/rsdkv5/rsdkv5.js +1 -1
- package/dist/rsdkv5/rsdkv5.options.d.ts +61 -13
- package/dist/rsdkv5/rsdkv5.options.d.ts.map +1 -1
- package/dist/rsdkv5/rsdkv5.options.js +35 -21
- package/dist/rsdkv5/rsdkv5.options.js.map +1 -1
- package/dist/rsdkv5/rsdkv5.sdk.d.ts +80 -32
- package/dist/rsdkv5/rsdkv5.sdk.d.ts.map +1 -1
- package/dist/rsdkv5/rsdkv5.sdk.js +369 -181
- package/dist/rsdkv5/rsdkv5.sdk.js.map +1 -1
- package/dist/rsdkv5/rsdkv5.wasm +0 -0
- package/package.json +6 -16
- package/src/rsdkv5.options.ts +96 -43
- package/src/rsdkv5.sdk.ts +424 -208
- package/dist/manifest.json +0 -69
- package/dist/rsdkv5/rsdkv5.manifest.d.ts +0 -4
- package/dist/rsdkv5/rsdkv5.manifest.d.ts.map +0 -1
- package/dist/rsdkv5/rsdkv5.manifest.js +0 -39
- package/dist/rsdkv5/rsdkv5.manifest.js.map +0 -1
- package/src/rsdkv5.manifest.ts +0 -44
|
@@ -1,35 +1,80 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The engine package's entry point: an `EngineSDK` for RSDKv5 (Sonic Mania).
|
|
3
|
+
*
|
|
4
|
+
* ```js
|
|
5
|
+
* import Rsdkv5SDK from '@wasm-gaming/rsdkv5-wasm';
|
|
6
|
+
*
|
|
7
|
+
* const play = await new Rsdkv5SDK()
|
|
8
|
+
* .assets({ data: () => readDataRsdk() }) // bytes, or a thunk
|
|
9
|
+
* .storage({ namespace: 'sonic-mania' }) // → OPFS rsdkv5/sonic-mania/
|
|
10
|
+
* .mount(document.querySelector('#stage'))
|
|
11
|
+
* .start();
|
|
12
|
+
*
|
|
13
|
+
* play.pause('menu'); play.resume('menu');
|
|
14
|
+
* play.devMenu.getStageList(); // the host draws its own stage select
|
|
15
|
+
* await play.destroy(); // save flushed, loop stopped, audio closed
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* One game-agnostic `rsdkv5.wasm`: `Data.rsdk` is written into the filesystem at
|
|
19
|
+
* runtime, never baked in. The working dir `/data/rsdkv5/<namespace>` is in memory;
|
|
20
|
+
* Sonic Mania writes its user files there (`SaveData.bin`, `TimeAttackDB.bin`,
|
|
21
|
+
* `ReplayDB.bin`, `Replay_*.bin`). The SDK seeds them from OPFS `rsdkv5/<namespace>/`
|
|
22
|
+
* before boot and mirrors back whatever changed (every 10 s, on pause, on page hide
|
|
23
|
+
* and on destroy).
|
|
24
|
+
*/
|
|
25
|
+
import { EnginePlayBase, EngineSDKBase, EventEmitter, } from './engine-specs.js';
|
|
26
|
+
import { RSDKV5_SPEC, RSDKV5_VIDEO, } from './rsdkv5.options.js';
|
|
27
|
+
export { RSDKV5_SPEC, RSDKV5_VIDEO } from './rsdkv5.options.js';
|
|
28
|
+
const ENGINE_ID = 'rsdkv5';
|
|
6
29
|
const DEFAULT_STORAGE_NAMESPACE = 'default';
|
|
30
|
+
const WORK_ROOT = '/data';
|
|
31
|
+
/** Inputs the SDK writes itself; everything else in the working dir is the game's. */
|
|
32
|
+
const NOT_SAVES = new Set(['Data.rsdk', 'Settings.ini', 'log.txt']);
|
|
33
|
+
const SAVE_INTERVAL_MS = 10_000;
|
|
7
34
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* `
|
|
12
|
-
*
|
|
35
|
+
* Where an engine keeps one namespace: `<engineId>/<namespace>`, relative to the OPFS
|
|
36
|
+
* root. Identical in every wasm-gaming engine, written to move verbatim into
|
|
37
|
+
* engine-specs: segments cleaned, `.` and `..` dropped, anything outside
|
|
38
|
+
* `[A-Za-z0-9._-]` → `_`, nothing usable → `default`; a leading `<engineId>/` is
|
|
39
|
+
* stripped once.
|
|
13
40
|
*/
|
|
14
|
-
function
|
|
15
|
-
const
|
|
41
|
+
export function storagePath(engineId, namespace) {
|
|
42
|
+
const segments = typeof namespace === 'string'
|
|
43
|
+
? namespace
|
|
44
|
+
.split('/')
|
|
45
|
+
.map((segment) => segment.trim())
|
|
46
|
+
.filter((segment) => segment && segment !== '.' && segment !== '..')
|
|
47
|
+
.map((segment) => segment.replace(/[^A-Za-z0-9._-]/g, '_'))
|
|
48
|
+
: [];
|
|
49
|
+
const prefixed = segments.length > 1 && segments[0] === engineId;
|
|
50
|
+
if (prefixed)
|
|
51
|
+
segments.shift();
|
|
52
|
+
const cleaned = segments.join('/') || DEFAULT_STORAGE_NAMESPACE;
|
|
53
|
+
return { namespace: cleaned, path: `${engineId}/${cleaned}`, prefixed };
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Serialise the engine config into RSDKv5U's `Settings.ini` (capital S — the engine
|
|
57
|
+
* opens exactly that name, and the Emscripten FS is case-sensitive). The v5 dialect:
|
|
58
|
+
* lowercase keys, 0/1 booleans, `dataFile=` naming the pack relative to the working dir.
|
|
59
|
+
*/
|
|
60
|
+
export function buildSettingsIni(config) {
|
|
16
61
|
const b = (v) => (v ? '1' : '0');
|
|
17
62
|
return [
|
|
18
63
|
'[Game]',
|
|
19
64
|
'dataFile=Data.rsdk',
|
|
20
|
-
`devMenu=${b(
|
|
21
|
-
`language=${
|
|
22
|
-
`region=${
|
|
65
|
+
`devMenu=${b(config.devMenu)}`,
|
|
66
|
+
`language=${(config.language ?? 0) | 0}`,
|
|
67
|
+
`region=${(config.region ?? -1) | 0}`,
|
|
23
68
|
'',
|
|
24
69
|
'[Video]',
|
|
25
70
|
'windowed=1',
|
|
26
71
|
'border=1',
|
|
27
72
|
'exclusiveFS=0',
|
|
28
|
-
`vsync=${b(
|
|
73
|
+
`vsync=${b(config.vsync ?? true)}`,
|
|
29
74
|
'tripleBuffering=0',
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
75
|
+
`pixWidth=${RSDKV5_VIDEO.width}`,
|
|
76
|
+
`winWidth=${RSDKV5_VIDEO.width}`,
|
|
77
|
+
`winHeight=${RSDKV5_VIDEO.height}`,
|
|
33
78
|
'fsWidth=0',
|
|
34
79
|
'fsHeight=0',
|
|
35
80
|
'refreshRate=60',
|
|
@@ -43,192 +88,335 @@ function buildSettingsIni(options = {}) {
|
|
|
43
88
|
'',
|
|
44
89
|
].join('\n');
|
|
45
90
|
}
|
|
46
|
-
function
|
|
47
|
-
if (
|
|
91
|
+
async function opfsDir(path, create) {
|
|
92
|
+
if (typeof navigator === 'undefined' || !navigator.storage?.getDirectory)
|
|
48
93
|
return null;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
return
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
94
|
+
try {
|
|
95
|
+
let dir = await navigator.storage.getDirectory();
|
|
96
|
+
for (const segment of path.split('/').filter(Boolean)) {
|
|
97
|
+
dir = await dir.getDirectoryHandle(segment, { create });
|
|
98
|
+
}
|
|
99
|
+
return dir;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
58
104
|
}
|
|
59
|
-
|
|
60
|
-
function
|
|
61
|
-
if (
|
|
62
|
-
return
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
105
|
+
async function resolveAsset(asset) {
|
|
106
|
+
const value = typeof asset === 'function' ? await asset() : asset;
|
|
107
|
+
if (value == null)
|
|
108
|
+
return null;
|
|
109
|
+
if (value instanceof Uint8Array)
|
|
110
|
+
return value;
|
|
111
|
+
if (value instanceof ArrayBuffer)
|
|
112
|
+
return new Uint8Array(value);
|
|
113
|
+
throw new TypeError('rsdkv5: an asset must be a Uint8Array, an ArrayBuffer or a thunk returning one');
|
|
114
|
+
}
|
|
115
|
+
function sameBytes(a, b) {
|
|
116
|
+
if (!a || a.length !== b.length)
|
|
117
|
+
return false;
|
|
118
|
+
for (let i = 0; i < a.length; i++)
|
|
119
|
+
if (a[i] !== b[i])
|
|
120
|
+
return false;
|
|
121
|
+
return true;
|
|
71
122
|
}
|
|
72
|
-
|
|
73
|
-
function ensureDir(Module, path) {
|
|
74
|
-
const parts = path.split('/').filter(Boolean);
|
|
123
|
+
function mkdirp(Module, path) {
|
|
75
124
|
let current = '';
|
|
76
|
-
for (const part of
|
|
125
|
+
for (const part of path.split('/').filter(Boolean)) {
|
|
77
126
|
current += `/${part}`;
|
|
78
127
|
try {
|
|
79
128
|
Module.FS.mkdir(current);
|
|
80
129
|
}
|
|
81
130
|
catch {
|
|
82
|
-
/*
|
|
131
|
+
/* exists */
|
|
83
132
|
}
|
|
84
133
|
}
|
|
85
134
|
}
|
|
86
|
-
/**
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
135
|
+
/** The live engine: one booted RSDKv5 and its session. */
|
|
136
|
+
export class Rsdkv5Play extends EnginePlayBase {
|
|
137
|
+
#module = null;
|
|
138
|
+
#destroyed = false;
|
|
139
|
+
#pauseOwner = null;
|
|
140
|
+
#canvas = null;
|
|
141
|
+
#ownsCanvas = false;
|
|
142
|
+
#box = null;
|
|
143
|
+
#boxObserver = null;
|
|
144
|
+
#namespace = DEFAULT_STORAGE_NAMESPACE;
|
|
145
|
+
#storagePath = `${ENGINE_ID}/${DEFAULT_STORAGE_NAMESPACE}`;
|
|
146
|
+
#workDir = `${WORK_ROOT}/${ENGINE_ID}/${DEFAULT_STORAGE_NAMESPACE}`;
|
|
147
|
+
#persist = true;
|
|
148
|
+
#saveTimer = null;
|
|
149
|
+
#lastSaved = new Map();
|
|
150
|
+
#flushing = null;
|
|
151
|
+
#onHidden = () => {
|
|
152
|
+
if (document.visibilityState === 'hidden')
|
|
153
|
+
void this.flushSaves();
|
|
154
|
+
};
|
|
155
|
+
constructor(init, events) {
|
|
156
|
+
super(RSDKV5_SPEC, init, events);
|
|
97
157
|
}
|
|
98
|
-
|
|
99
|
-
return
|
|
158
|
+
get namespace() {
|
|
159
|
+
return this.#namespace;
|
|
100
160
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
if (!fileExists(Module, path))
|
|
105
|
-
return false;
|
|
106
|
-
try {
|
|
107
|
-
Module.FS.unlink(path);
|
|
108
|
-
return true;
|
|
161
|
+
/** Where this session's files live, relative to the OPFS root: `rsdkv5/<namespace>`. */
|
|
162
|
+
get storagePath() {
|
|
163
|
+
return this.#storagePath;
|
|
109
164
|
}
|
|
110
|
-
|
|
111
|
-
return
|
|
165
|
+
get pausedBy() {
|
|
166
|
+
return this.#pauseOwner;
|
|
112
167
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
168
|
+
/** RSDKv5's stage list, for a host that draws its own stage select. */
|
|
169
|
+
get devMenu() {
|
|
170
|
+
const Module = () => this.#module;
|
|
171
|
+
return {
|
|
172
|
+
getStageList() {
|
|
173
|
+
try {
|
|
174
|
+
return JSON.parse(Module()?.web_devmenu_get_stage_list?.() ?? '[]');
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
return [];
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
loadStage(category, stage) {
|
|
181
|
+
Module()?.web_devmenu_load_stage?.(category | 0, stage | 0);
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Freeze the game and its sound. The first caller owns the pause; only that
|
|
187
|
+
* owner's {@link resume} lifts it. The save is flushed.
|
|
188
|
+
*/
|
|
189
|
+
pause(owner = 'host') {
|
|
190
|
+
const Module = this.#module;
|
|
191
|
+
if (!Module || this.#pauseOwner)
|
|
192
|
+
return;
|
|
193
|
+
this.#pauseOwner = owner;
|
|
194
|
+
Module.web_devmenu_set_paused?.(true);
|
|
195
|
+
void Module.SDL2?.audioContext?.suspend();
|
|
196
|
+
void this.flushSaves();
|
|
197
|
+
this.emit('pause', { owner });
|
|
198
|
+
}
|
|
199
|
+
resume(owner = 'host') {
|
|
200
|
+
const Module = this.#module;
|
|
201
|
+
if (!Module || this.#pauseOwner !== owner)
|
|
202
|
+
return;
|
|
203
|
+
this.#pauseOwner = null;
|
|
204
|
+
void Module.SDL2?.audioContext?.resume();
|
|
205
|
+
Module.web_devmenu_set_paused?.(false);
|
|
206
|
+
this.emit('resume', { owner });
|
|
207
|
+
}
|
|
208
|
+
/** Copy the game's changed user files to OPFS `rsdkv5/<namespace>/`; emits `saves`. */
|
|
209
|
+
flushSaves() {
|
|
210
|
+
this.#flushing ??= this.#flush().finally(() => {
|
|
211
|
+
this.#flushing = null;
|
|
212
|
+
});
|
|
213
|
+
return this.#flushing;
|
|
214
|
+
}
|
|
215
|
+
// ---- Contract hooks ----
|
|
216
|
+
mounted(target) {
|
|
217
|
+
if (target instanceof HTMLCanvasElement) {
|
|
218
|
+
this.#canvas = target;
|
|
219
|
+
this.#ownsCanvas = false;
|
|
220
|
+
this.#box = target.parentElement;
|
|
126
221
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
window
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
canvas
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
settingsBytes = toUint8(await config.settingsProvider());
|
|
165
|
-
}
|
|
166
|
-
if (settingsBytes) {
|
|
167
|
-
Module.FS.writeFile(settingsPath, settingsBytes);
|
|
168
|
-
}
|
|
169
|
-
else if (!fileExists(Module, settingsPath)) {
|
|
170
|
-
Module.FS.writeFile(settingsPath, new TextEncoder().encode(buildSettingsIni(options)));
|
|
171
|
-
}
|
|
172
|
-
Module.FS.chdir(workDir);
|
|
173
|
-
const setPaused = (paused) => {
|
|
174
|
-
if (typeof Module.web_devmenu_set_paused === 'function')
|
|
175
|
-
Module.web_devmenu_set_paused(paused);
|
|
176
|
-
};
|
|
177
|
-
const devMenu = {
|
|
178
|
-
getStageList() {
|
|
179
|
-
if (typeof Module.web_devmenu_get_stage_list !== 'function')
|
|
180
|
-
return [];
|
|
222
|
+
else {
|
|
223
|
+
this.#canvas = document.createElement('canvas');
|
|
224
|
+
this.#ownsCanvas = true;
|
|
225
|
+
this.#box = target;
|
|
226
|
+
target.appendChild(this.#canvas);
|
|
227
|
+
}
|
|
228
|
+
// Emscripten's SDL2 port finds its window with querySelector('#canvas').
|
|
229
|
+
this.#canvas.id = 'canvas';
|
|
230
|
+
this.#canvas.tabIndex = 0;
|
|
231
|
+
this.#canvas.style.display = 'block';
|
|
232
|
+
this.#canvas.style.imageRendering = 'pixelated';
|
|
233
|
+
this.#canvas.addEventListener('contextmenu', (event) => event.preventDefault());
|
|
234
|
+
if (this.#ownsCanvas && this.#box) {
|
|
235
|
+
this.#boxObserver?.disconnect();
|
|
236
|
+
this.#boxObserver = new ResizeObserver(() => this.#fit());
|
|
237
|
+
this.#boxObserver.observe(this.#box);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
async open(_options) {
|
|
241
|
+
if (this.#destroyed || this.#module) {
|
|
242
|
+
// RSDKv5 cannot restart in process: main() runs once and owns the loop.
|
|
243
|
+
throw new Error('rsdkv5: the engine cannot be restarted in process — destroy() and start a new page (or iframe)');
|
|
244
|
+
}
|
|
245
|
+
await this.#boot();
|
|
246
|
+
}
|
|
247
|
+
patched(_kind, _patch) {
|
|
248
|
+
// Nothing in RSDKV5_SPEC is live: Settings.ini is read once, at boot.
|
|
249
|
+
}
|
|
250
|
+
async close() {
|
|
251
|
+
if (this.#saveTimer)
|
|
252
|
+
clearInterval(this.#saveTimer);
|
|
253
|
+
this.#saveTimer = null;
|
|
254
|
+
document.removeEventListener('visibilitychange', this.#onHidden);
|
|
255
|
+
window.removeEventListener('pagehide', this.#onHidden);
|
|
256
|
+
const Module = this.#module;
|
|
257
|
+
if (Module) {
|
|
258
|
+
await this.flushSaves();
|
|
181
259
|
try {
|
|
182
|
-
|
|
260
|
+
Module.web_devmenu_set_paused?.(true);
|
|
261
|
+
Module.pauseMainLoop?.();
|
|
183
262
|
}
|
|
184
|
-
catch
|
|
185
|
-
|
|
186
|
-
return [];
|
|
263
|
+
catch {
|
|
264
|
+
/* already stopped */
|
|
187
265
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
if (typeof Module.web_devmenu_load_stage === 'function') {
|
|
191
|
-
Module.web_devmenu_load_stage(categoryIdx | 0, stageIdx | 0);
|
|
266
|
+
try {
|
|
267
|
+
await Module.SDL2?.audioContext?.close();
|
|
192
268
|
}
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
};
|
|
196
|
-
// No 'UsingCWD' argv — that's a v4-ism; v5U's main() doesn't parse it. The
|
|
197
|
-
// engine resolves Settings.ini/dataFile relative to the FS CWD set above.
|
|
198
|
-
Module.callMain([]);
|
|
199
|
-
emit({ type: 'ready' });
|
|
200
|
-
return {
|
|
201
|
-
start() { },
|
|
202
|
-
pause() { setPaused(true); },
|
|
203
|
-
resume() { setPaused(false); },
|
|
204
|
-
reset() {
|
|
205
|
-
throw new Error('rsdkv5: reset() is not supported — destroy() and load() again');
|
|
206
|
-
},
|
|
207
|
-
setInput(preset) {
|
|
208
|
-
if (typeof window !== 'undefined') {
|
|
209
|
-
window.__gamepadKeyMap = preset ?? manifest.input;
|
|
269
|
+
catch {
|
|
270
|
+
/* already closed */
|
|
210
271
|
}
|
|
211
|
-
}
|
|
212
|
-
|
|
272
|
+
}
|
|
273
|
+
this.#boxObserver?.disconnect();
|
|
274
|
+
this.#boxObserver = null;
|
|
275
|
+
if (this.#ownsCanvas)
|
|
276
|
+
this.#canvas?.remove();
|
|
277
|
+
this.#canvas = null;
|
|
278
|
+
this.#module = null;
|
|
279
|
+
this.#pauseOwner = null;
|
|
280
|
+
this.#destroyed = true;
|
|
281
|
+
}
|
|
282
|
+
// ---- Boot ----
|
|
283
|
+
async #boot() {
|
|
284
|
+
const config = await this.#values('config');
|
|
285
|
+
const assets = await this.#values('assets');
|
|
286
|
+
const storage = await this.#values('storage');
|
|
287
|
+
if (!this.#canvas)
|
|
288
|
+
throw new Error('rsdkv5: mount() an element (or a canvas) before start()');
|
|
289
|
+
const data = await resolveAsset(assets.data);
|
|
290
|
+
if (!data)
|
|
291
|
+
throw new Error('rsdkv5: no Data.rsdk — hand one over as assets.data (bytes or a thunk)');
|
|
292
|
+
const settings = await resolveAsset(assets.settings);
|
|
293
|
+
const resolved = storagePath(ENGINE_ID, storage.namespace);
|
|
294
|
+
if (resolved.prefixed) {
|
|
295
|
+
console.warn(`[rsdkv5] storage.namespace no longer needs the "${ENGINE_ID}/" prefix. Pass "${resolved.namespace}".`);
|
|
296
|
+
}
|
|
297
|
+
this.#namespace = resolved.namespace;
|
|
298
|
+
this.#storagePath = resolved.path;
|
|
299
|
+
this.#workDir = `${WORK_ROOT}/${resolved.path}`;
|
|
300
|
+
this.#persist = storage.persist !== null;
|
|
301
|
+
const jsUrl = config.jsUrl ?? new URL('./rsdkv5.js', import.meta.url).href;
|
|
302
|
+
const wasmUrl = config.wasmUrl ?? new URL('./rsdkv5.wasm', import.meta.url).href;
|
|
303
|
+
const { default: createRSDKv5 } = (await import(/* @vite-ignore */ jsUrl));
|
|
304
|
+
let failed = null;
|
|
305
|
+
const Module = await createRSDKv5({
|
|
306
|
+
canvas: this.#canvas,
|
|
307
|
+
noInitialRun: true,
|
|
308
|
+
locateFile: (path) => (path.endsWith('.wasm') ? wasmUrl : new URL(path, jsUrl).href),
|
|
309
|
+
print: (text) => console.log('[rsdkv5]', text),
|
|
310
|
+
printErr: (text) => console.warn('[rsdkv5]', text),
|
|
311
|
+
onAbort: (what) => failed?.(new Error(`rsdkv5: aborted — ${String(what)}`)),
|
|
312
|
+
});
|
|
313
|
+
this.#module = Module;
|
|
314
|
+
failed = (error) => this.emit('error', error);
|
|
315
|
+
mkdirp(Module, this.#workDir);
|
|
316
|
+
Module.FS.writeFile(`${this.#workDir}/Data.rsdk`, data);
|
|
317
|
+
Module.FS.writeFile(`${this.#workDir}/Settings.ini`, settings ?? new TextEncoder().encode(buildSettingsIni(config)));
|
|
318
|
+
if (this.#persist)
|
|
319
|
+
await this.#restoreSave();
|
|
320
|
+
Module.FS.chdir(this.#workDir);
|
|
321
|
+
// RSDKv5U resolves Settings.ini and dataFile relative to the CWD set above.
|
|
322
|
+
Module.callMain([]);
|
|
323
|
+
if (this.#persist) {
|
|
324
|
+
this.#saveTimer = setInterval(() => void this.flushSaves(), SAVE_INTERVAL_MS);
|
|
325
|
+
document.addEventListener('visibilitychange', this.#onHidden);
|
|
326
|
+
window.addEventListener('pagehide', this.#onHidden);
|
|
327
|
+
}
|
|
328
|
+
this.#fit();
|
|
329
|
+
}
|
|
330
|
+
async #values(kind) {
|
|
331
|
+
const described = (await this[kind]());
|
|
332
|
+
const out = {};
|
|
333
|
+
for (const [key, property] of Object.entries(described))
|
|
334
|
+
out[key] = property.value;
|
|
335
|
+
return out;
|
|
336
|
+
}
|
|
337
|
+
// ---- Save mirror ----
|
|
338
|
+
async #restoreSave() {
|
|
339
|
+
const dir = await opfsDir(this.#storagePath, false);
|
|
340
|
+
if (!dir || !this.#module)
|
|
341
|
+
return;
|
|
342
|
+
const iterable = dir;
|
|
343
|
+
for await (const [name, handle] of iterable.entries()) {
|
|
344
|
+
if (handle.kind !== 'file' || NOT_SAVES.has(name))
|
|
345
|
+
continue;
|
|
346
|
+
const bytes = new Uint8Array(await (await handle.getFile()).arrayBuffer());
|
|
347
|
+
this.#module.FS.writeFile(`${this.#workDir}/${name}`, bytes);
|
|
348
|
+
this.#lastSaved.set(name, bytes);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
async #flush() {
|
|
352
|
+
const Module = this.#module;
|
|
353
|
+
if (!Module || !this.#persist)
|
|
354
|
+
return;
|
|
355
|
+
const changed = [];
|
|
356
|
+
let names;
|
|
357
|
+
try {
|
|
358
|
+
names = Module.FS.readdir(this.#workDir);
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
for (const name of names) {
|
|
364
|
+
if (name === '.' || name === '..' || NOT_SAVES.has(name))
|
|
365
|
+
continue;
|
|
366
|
+
const path = `${this.#workDir}/${name}`;
|
|
367
|
+
if (!Module.FS.isFile(Module.FS.stat(path).mode))
|
|
368
|
+
continue;
|
|
369
|
+
const bytes = new Uint8Array(Module.FS.readFile(path));
|
|
370
|
+
if (!sameBytes(this.#lastSaved.get(name) ?? null, bytes))
|
|
371
|
+
changed.push([name, bytes]);
|
|
372
|
+
}
|
|
373
|
+
if (changed.length === 0)
|
|
374
|
+
return;
|
|
375
|
+
const dir = await opfsDir(this.#storagePath, true);
|
|
376
|
+
if (!dir)
|
|
377
|
+
return;
|
|
378
|
+
const written = [];
|
|
379
|
+
for (const [name, bytes] of changed) {
|
|
213
380
|
try {
|
|
214
|
-
|
|
381
|
+
const writable = await (await dir.getFileHandle(name, { create: true })).createWritable();
|
|
382
|
+
await writable.write(bytes);
|
|
383
|
+
await writable.close();
|
|
384
|
+
this.#lastSaved.set(name, bytes);
|
|
385
|
+
written.push(name);
|
|
215
386
|
}
|
|
216
|
-
catch {
|
|
217
|
-
|
|
218
|
-
setPaused(true);
|
|
387
|
+
catch (e) {
|
|
388
|
+
console.warn(`[rsdkv5] could not persist ${name}`, e);
|
|
219
389
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
|
|
390
|
+
}
|
|
391
|
+
if (written.length)
|
|
392
|
+
this.emit('saves', { files: written });
|
|
393
|
+
}
|
|
394
|
+
// ---- Picture ----
|
|
395
|
+
#fit() {
|
|
396
|
+
const canvas = this.#canvas;
|
|
397
|
+
const box = this.#box;
|
|
398
|
+
if (!canvas || !box || !this.#ownsCanvas)
|
|
399
|
+
return;
|
|
400
|
+
const { width, height } = box.getBoundingClientRect();
|
|
401
|
+
if (!width || !height)
|
|
402
|
+
return;
|
|
403
|
+
const scale = Math.min(width / RSDKV5_VIDEO.width, height / RSDKV5_VIDEO.height);
|
|
404
|
+
canvas.style.width = `${Math.floor(RSDKV5_VIDEO.width * scale)}px`;
|
|
405
|
+
canvas.style.height = `${Math.floor(RSDKV5_VIDEO.height * scale)}px`;
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
/** The factory a host constructs: static identity, the configuration chain, `start()`. */
|
|
409
|
+
export class Rsdkv5SDK extends EngineSDKBase {
|
|
410
|
+
static id = ENGINE_ID;
|
|
411
|
+
/** Kept in step with package.json by `node scripts/sync-version.mjs`. */
|
|
412
|
+
static version = '0.1.2';
|
|
413
|
+
static name = 'Retro Software Development Kit v3';
|
|
414
|
+
static description = 'RSDKv5U (Sonic Mania decompilation) compiled to WebAssembly. Ships none of the game: the player provides Data.rsdk, and it never leaves their browser.';
|
|
415
|
+
createPlay(init, events) {
|
|
416
|
+
return new Rsdkv5Play(init, events);
|
|
417
|
+
}
|
|
232
418
|
}
|
|
233
|
-
|
|
419
|
+
/** CI's conformance line: if this class stops satisfying the contract, `make test` fails. */
|
|
420
|
+
export const RSDKV5_ENGINE = Rsdkv5SDK;
|
|
421
|
+
export default Rsdkv5SDK;
|
|
234
422
|
//# sourceMappingURL=rsdkv5.sdk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsdkv5.sdk.js","sourceRoot":"","sources":["../../src/rsdkv5.sdk.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rsdkv5.sdk.js","sourceRoot":"","sources":["../../src/rsdkv5.sdk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,GAKb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,WAAW,EACX,YAAY,GAKb,MAAM,qBAAqB,CAAC;AAW7B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,SAAS,GAAG,QAAQ,CAAC;AAC3B,MAAM,yBAAyB,GAAG,SAAS,CAAC;AAC5C,MAAM,SAAS,GAAG,OAAO,CAAC;AAC1B,sFAAsF;AACtF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;AACpE,MAAM,gBAAgB,GAAG,MAAM,CAAC;AA6BhC;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CACzB,QAAgB,EAChB,SAAkB;IAElB,MAAM,QAAQ,GACZ,OAAO,SAAS,KAAK,QAAQ;QAC3B,CAAC,CAAC,SAAS;aACN,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;aAChC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,IAAI,CAAC;aACnE,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QAC/D,CAAC,CAAC,EAAE,CAAC;IACT,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC;IACjE,IAAI,QAAQ;QAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,yBAAyB,CAAC;IAChE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,QAAQ,IAAI,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,MAAM,CAAC,GAAG,CAAC,CAAsB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACtD,OAAO;QACL,QAAQ;QACR,oBAAoB;QACpB,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE;QAC9B,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE;QACxC,UAAU,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;QACrC,EAAE;QACF,SAAS;QACT,YAAY;QACZ,UAAU;QACV,eAAe;QACf,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE;QAClC,mBAAmB;QACnB,YAAY,YAAY,CAAC,KAAK,EAAE;QAChC,YAAY,YAAY,CAAC,KAAK,EAAE;QAChC,aAAa,YAAY,CAAC,MAAM,EAAE;QAClC,WAAW;QACX,YAAY;QACZ,gBAAgB;QAChB,iBAAiB;QACjB,gBAAgB;QAChB,EAAE;QACF,SAAS;QACT,kBAAkB;QAClB,kBAAkB;QAClB,eAAe;QACf,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,MAAe;IAClD,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY;QAAE,OAAO,IAAI,CAAC;IACtF,IAAI,CAAC;QACH,IAAI,GAAG,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QACjD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACtD,GAAG,GAAG,MAAM,GAAG,CAAC,kBAAkB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAA8B;IACxD,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/D,MAAM,IAAI,SAAS,CAAC,gFAAgF,CAAC,CAAC;AACxG,CAAC;AAED,SAAS,SAAS,CAAC,CAAoB,EAAE,CAAa;IACpD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACnE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,MAAM,CAAC,MAAoB,EAAE,IAAY;IAChD,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;AACH,CAAC;AAED,0DAA0D;AAC1D,MAAM,OAAO,UAAW,SAAQ,cAA8B;IAC5D,OAAO,GAAwB,IAAI,CAAC;IACpC,UAAU,GAAG,KAAK,CAAC;IACnB,WAAW,GAAkB,IAAI,CAAC;IAElC,OAAO,GAA6B,IAAI,CAAC;IACzC,WAAW,GAAG,KAAK,CAAC;IACpB,IAAI,GAAuB,IAAI,CAAC;IAChC,YAAY,GAA0B,IAAI,CAAC;IAE3C,UAAU,GAAG,yBAAyB,CAAC;IACvC,YAAY,GAAG,GAAG,SAAS,IAAI,yBAAyB,EAAE,CAAC;IAC3D,QAAQ,GAAG,GAAG,SAAS,IAAI,SAAS,IAAI,yBAAyB,EAAE,CAAC;IACpE,QAAQ,GAAG,IAAI,CAAC;IAChB,UAAU,GAA0C,IAAI,CAAC;IACzD,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC3C,SAAS,GAAyB,IAAI,CAAC;IACvC,SAAS,GAAG,GAAS,EAAE;QACrB,IAAI,QAAQ,CAAC,eAAe,KAAK,QAAQ;YAAE,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;IACpE,CAAC,CAAC;IAEF,YAAY,IAAiC,EAAE,MAA+C;QAC5F,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,wFAAwF;IACxF,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,uEAAuE;IACvE,IAAI,OAAO;QACT,MAAM,MAAM,GAAG,GAAwB,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;QACvD,OAAO;YACL,YAAY;gBACV,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,0BAA0B,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC;gBACtE,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,SAAS,CAAC,QAAgB,EAAE,KAAa;gBACvC,MAAM,EAAE,EAAE,sBAAsB,EAAE,CAAC,QAAQ,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YAC9D,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK,GAAG,MAAM;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QACxC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,MAAM,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QAC1C,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,KAAK,GAAG,MAAM;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK;YAAE,OAAO;QAClD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;QACzC,MAAM,CAAC,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IACjC,CAAC;IAED,uFAAuF;IACvF,UAAU;QACR,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,2BAA2B;IAER,OAAO,CAAC,MAAmB;QAC5C,IAAI,MAAM,YAAY,iBAAiB,EAAE,CAAC;YACxC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;QACnC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC;YACnB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;QACD,yEAAyE;QACzE,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC;QAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QACrC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,WAAW,CAAC;QAChD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;QAChF,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAEkB,KAAK,CAAC,IAAI,CAAC,QAAuB;QACnD,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,wEAAwE;YACxE,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;QACpH,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAEkB,OAAO,CAAC,KAAkB,EAAE,MAAc;QAC3D,sEAAsE;IACxE,CAAC;IAEkB,KAAK,CAAC,KAAK;QAC5B,IAAI,IAAI,CAAC,UAAU;YAAE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,MAAM,CAAC,sBAAsB,EAAE,CAAC,IAAI,CAAC,CAAC;gBACtC,MAAM,CAAC,aAAa,EAAE,EAAE,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;YACvB,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,oBAAoB;YACtB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,IAAI,CAAC,WAAW;YAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,iBAAiB;IAEjB,KAAK,CAAC,KAAK;QACT,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAe,QAAQ,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAiD,QAAQ,CAAC,CAAC;QAC5F,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAkD,SAAS,CAAC,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAE9F,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QACrG,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,mDAAmD,SAAS,oBAAoB,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC;QACvH,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC;QACrC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,GAAG,SAAS,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC;QAEzC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACjF,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAA+B,CAAC;QAEzG,IAAI,MAAM,GAAoC,IAAI,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;YAChC,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC;YAC5F,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;YACtD,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;YAC1D,OAAO,EAAE,CAAC,IAAa,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACrF,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,MAAM,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAE9C,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,YAAY,EAAE,IAAI,CAAC,CAAC;QACxD,MAAM,CAAC,EAAE,CAAC,SAAS,CACjB,GAAG,IAAI,CAAC,QAAQ,eAAe,EAC/B,QAAQ,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAC/D,CAAC;QACF,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE7C,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,4EAA4E;QAC5E,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAEpB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAC9E,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9D,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,IAAqC;QACpD,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAuC,CAAC;QAC7E,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;QACnF,OAAO,GAAQ,CAAC;IAClB,CAAC;IAED,wBAAwB;IAExB,KAAK,CAAC,YAAY;QAChB,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAClC,MAAM,QAAQ,GAAG,GAA0E,CAAC;QAC5F,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YACtD,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC5D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAO,MAA+B,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;YACrG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;YAC7D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtC,MAAM,OAAO,GAA6C,EAAE,CAAC;QAC7D,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YACnE,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC3D,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,KAAK,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACxF,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;gBAC1F,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC5B,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,8BAA8B,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,MAAM;YAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,oBAAoB;IAEpB,IAAI;QACF,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QACjD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACtD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QACjF,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC;QACnE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;IACvE,CAAC;CACF;AAED,0FAA0F;AAC1F,MAAM,OAAO,SAAU,SAAQ,aAA6B;IAC1D,MAAM,CAAU,EAAE,GAAG,SAAS,CAAC;IAC/B,yEAAyE;IACzE,MAAM,CAAU,OAAO,GAAG,OAAO,CAAC;IAClC,MAAM,CAAU,IAAI,GAAG,mCAAmC,CAAC;IAC3D,MAAM,CAAU,WAAW,GACzB,wJAAwJ,CAAC;IAExI,UAAU,CAC3B,IAAgC,EAChC,MAA8C;QAE9C,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;;AAGH,6FAA6F;AAC7F,MAAM,CAAC,MAAM,aAAa,GAAyC,SAAS,CAAC;AAE7E,eAAe,SAAS,CAAC"}
|
package/dist/rsdkv5/rsdkv5.wasm
CHANGED
|
Binary file
|