@rue-js/runtime-vapor 0.0.27 → 0.0.28
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/package.json +5 -4
- package/pkg/package.json +17 -0
- package/pkg/rue_runtime_vapor.d.ts +1982 -0
- package/pkg/rue_runtime_vapor.js +4 -0
- package/pkg/rue_runtime_vapor_bg.js +1921 -0
- package/pkg/rue_runtime_vapor_bg.wasm +0 -0
- package/pkg/rue_runtime_vapor_bg.wasm.d.ts +98 -0
|
@@ -0,0 +1,1921 @@
|
|
|
1
|
+
let wasm;
|
|
2
|
+
export function __wbg_set_wasm(val) {
|
|
3
|
+
wasm = val;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
function addHeapObject(obj) {
|
|
7
|
+
if (heap_next === heap.length) heap.push(heap.length + 1);
|
|
8
|
+
const idx = heap_next;
|
|
9
|
+
heap_next = heap[idx];
|
|
10
|
+
|
|
11
|
+
heap[idx] = obj;
|
|
12
|
+
return idx;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function _assertClass(instance, klass) {
|
|
16
|
+
if (!(instance instanceof klass)) {
|
|
17
|
+
throw new Error(`expected instance of ${klass.name}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const CLOSURE_DTORS = (typeof FinalizationRegistry === 'undefined')
|
|
22
|
+
? { register: () => {}, unregister: () => {} }
|
|
23
|
+
: new FinalizationRegistry(state => state.dtor(state.a, state.b));
|
|
24
|
+
|
|
25
|
+
function debugString(val) {
|
|
26
|
+
// primitive types
|
|
27
|
+
const type = typeof val;
|
|
28
|
+
if (type == 'number' || type == 'boolean' || val == null) {
|
|
29
|
+
return `${val}`;
|
|
30
|
+
}
|
|
31
|
+
if (type == 'string') {
|
|
32
|
+
return `"${val}"`;
|
|
33
|
+
}
|
|
34
|
+
if (type == 'symbol') {
|
|
35
|
+
const description = val.description;
|
|
36
|
+
if (description == null) {
|
|
37
|
+
return 'Symbol';
|
|
38
|
+
} else {
|
|
39
|
+
return `Symbol(${description})`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (type == 'function') {
|
|
43
|
+
const name = val.name;
|
|
44
|
+
if (typeof name == 'string' && name.length > 0) {
|
|
45
|
+
return `Function(${name})`;
|
|
46
|
+
} else {
|
|
47
|
+
return 'Function';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// objects
|
|
51
|
+
if (Array.isArray(val)) {
|
|
52
|
+
const length = val.length;
|
|
53
|
+
let debug = '[';
|
|
54
|
+
if (length > 0) {
|
|
55
|
+
debug += debugString(val[0]);
|
|
56
|
+
}
|
|
57
|
+
for(let i = 1; i < length; i++) {
|
|
58
|
+
debug += ', ' + debugString(val[i]);
|
|
59
|
+
}
|
|
60
|
+
debug += ']';
|
|
61
|
+
return debug;
|
|
62
|
+
}
|
|
63
|
+
// Test for built-in
|
|
64
|
+
const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
|
|
65
|
+
let className;
|
|
66
|
+
if (builtInMatches && builtInMatches.length > 1) {
|
|
67
|
+
className = builtInMatches[1];
|
|
68
|
+
} else {
|
|
69
|
+
// Failed to match the standard '[object ClassName]'
|
|
70
|
+
return toString.call(val);
|
|
71
|
+
}
|
|
72
|
+
if (className == 'Object') {
|
|
73
|
+
// we're a user defined class or Object
|
|
74
|
+
// JSON.stringify avoids problems with cycles, and is generally much
|
|
75
|
+
// easier than looping through ownProperties of `val`.
|
|
76
|
+
try {
|
|
77
|
+
return 'Object(' + JSON.stringify(val) + ')';
|
|
78
|
+
} catch (_) {
|
|
79
|
+
return 'Object';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// errors
|
|
83
|
+
if (val instanceof Error) {
|
|
84
|
+
return `${val.name}: ${val.message}\n${val.stack}`;
|
|
85
|
+
}
|
|
86
|
+
// TODO we could test for more things here, like `Set`s and `Map`s.
|
|
87
|
+
return className;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
function dropObject(idx) {
|
|
91
|
+
if (idx < 132) return;
|
|
92
|
+
heap[idx] = heap_next;
|
|
93
|
+
heap_next = idx;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
let cachedDataViewMemory0 = null;
|
|
97
|
+
function getDataViewMemory0() {
|
|
98
|
+
if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
|
|
99
|
+
cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
|
|
100
|
+
}
|
|
101
|
+
return cachedDataViewMemory0;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function getStringFromWasm0(ptr, len) {
|
|
105
|
+
ptr = ptr >>> 0;
|
|
106
|
+
return decodeText(ptr, len);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
let cachedUint8ArrayMemory0 = null;
|
|
110
|
+
function getUint8ArrayMemory0() {
|
|
111
|
+
if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
|
|
112
|
+
cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
|
|
113
|
+
}
|
|
114
|
+
return cachedUint8ArrayMemory0;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function getObject(idx) { return heap[idx]; }
|
|
118
|
+
|
|
119
|
+
function handleError(f, args) {
|
|
120
|
+
try {
|
|
121
|
+
return f.apply(this, args);
|
|
122
|
+
} catch (e) {
|
|
123
|
+
wasm.__wbindgen_export3(addHeapObject(e));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
let heap = new Array(128).fill(undefined);
|
|
128
|
+
heap.push(undefined, null, true, false);
|
|
129
|
+
|
|
130
|
+
let heap_next = heap.length;
|
|
131
|
+
|
|
132
|
+
function isLikeNone(x) {
|
|
133
|
+
return x === undefined || x === null;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function makeMutClosure(arg0, arg1, dtor, f) {
|
|
137
|
+
const state = { a: arg0, b: arg1, cnt: 1, dtor };
|
|
138
|
+
const real = (...args) => {
|
|
139
|
+
|
|
140
|
+
// First up with a closure we increment the internal reference
|
|
141
|
+
// count. This ensures that the Rust closure environment won't
|
|
142
|
+
// be deallocated while we're invoking it.
|
|
143
|
+
state.cnt++;
|
|
144
|
+
const a = state.a;
|
|
145
|
+
state.a = 0;
|
|
146
|
+
try {
|
|
147
|
+
return f(a, state.b, ...args);
|
|
148
|
+
} finally {
|
|
149
|
+
state.a = a;
|
|
150
|
+
real._wbg_cb_unref();
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
real._wbg_cb_unref = () => {
|
|
154
|
+
if (--state.cnt === 0) {
|
|
155
|
+
state.dtor(state.a, state.b);
|
|
156
|
+
state.a = 0;
|
|
157
|
+
CLOSURE_DTORS.unregister(state);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
CLOSURE_DTORS.register(real, state, state);
|
|
161
|
+
return real;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
function passStringToWasm0(arg, malloc, realloc) {
|
|
165
|
+
if (realloc === undefined) {
|
|
166
|
+
const buf = cachedTextEncoder.encode(arg);
|
|
167
|
+
const ptr = malloc(buf.length, 1) >>> 0;
|
|
168
|
+
getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
|
|
169
|
+
WASM_VECTOR_LEN = buf.length;
|
|
170
|
+
return ptr;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
let len = arg.length;
|
|
174
|
+
let ptr = malloc(len, 1) >>> 0;
|
|
175
|
+
|
|
176
|
+
const mem = getUint8ArrayMemory0();
|
|
177
|
+
|
|
178
|
+
let offset = 0;
|
|
179
|
+
|
|
180
|
+
for (; offset < len; offset++) {
|
|
181
|
+
const code = arg.charCodeAt(offset);
|
|
182
|
+
if (code > 0x7F) break;
|
|
183
|
+
mem[ptr + offset] = code;
|
|
184
|
+
}
|
|
185
|
+
if (offset !== len) {
|
|
186
|
+
if (offset !== 0) {
|
|
187
|
+
arg = arg.slice(offset);
|
|
188
|
+
}
|
|
189
|
+
ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
|
|
190
|
+
const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
|
|
191
|
+
const ret = cachedTextEncoder.encodeInto(arg, view);
|
|
192
|
+
|
|
193
|
+
offset += ret.written;
|
|
194
|
+
ptr = realloc(ptr, len, offset, 1) >>> 0;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
WASM_VECTOR_LEN = offset;
|
|
198
|
+
return ptr;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function takeObject(idx) {
|
|
202
|
+
const ret = getObject(idx);
|
|
203
|
+
dropObject(idx);
|
|
204
|
+
return ret;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
|
|
208
|
+
cachedTextDecoder.decode();
|
|
209
|
+
const MAX_SAFARI_DECODE_BYTES = 2146435072;
|
|
210
|
+
let numBytesDecoded = 0;
|
|
211
|
+
function decodeText(ptr, len) {
|
|
212
|
+
numBytesDecoded += len;
|
|
213
|
+
if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {
|
|
214
|
+
cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
|
|
215
|
+
cachedTextDecoder.decode();
|
|
216
|
+
numBytesDecoded = len;
|
|
217
|
+
}
|
|
218
|
+
return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
const cachedTextEncoder = new TextEncoder();
|
|
222
|
+
|
|
223
|
+
if (!('encodeInto' in cachedTextEncoder)) {
|
|
224
|
+
cachedTextEncoder.encodeInto = function (arg, view) {
|
|
225
|
+
const buf = cachedTextEncoder.encode(arg);
|
|
226
|
+
view.set(buf);
|
|
227
|
+
return {
|
|
228
|
+
read: arg.length,
|
|
229
|
+
written: buf.length
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
let WASM_VECTOR_LEN = 0;
|
|
235
|
+
|
|
236
|
+
function __wasm_bindgen_func_elem_184(arg0, arg1, arg2, arg3, arg4, arg5) {
|
|
237
|
+
const ret = wasm.__wasm_bindgen_func_elem_184(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3), addHeapObject(arg4), addHeapObject(arg5));
|
|
238
|
+
return takeObject(ret);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function __wasm_bindgen_func_elem_178(arg0, arg1) {
|
|
242
|
+
wasm.__wasm_bindgen_func_elem_178(arg0, arg1);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function __wasm_bindgen_func_elem_183(arg0, arg1, arg2, arg3, arg4) {
|
|
246
|
+
const ret = wasm.__wasm_bindgen_func_elem_183(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3), addHeapObject(arg4));
|
|
247
|
+
return takeObject(ret);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
function __wasm_bindgen_func_elem_1099(arg0, arg1, arg2, arg3) {
|
|
251
|
+
wasm.__wasm_bindgen_func_elem_1099(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function __wasm_bindgen_func_elem_180(arg0, arg1, arg2) {
|
|
255
|
+
const ret = wasm.__wasm_bindgen_func_elem_180(arg0, arg1, addHeapObject(arg2));
|
|
256
|
+
return takeObject(ret);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
function __wasm_bindgen_func_elem_182(arg0, arg1, arg2, arg3) {
|
|
260
|
+
const ret = wasm.__wasm_bindgen_func_elem_182(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
|
|
261
|
+
return ret !== 0;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function __wasm_bindgen_func_elem_181(arg0, arg1, arg2, arg3) {
|
|
265
|
+
const ret = wasm.__wasm_bindgen_func_elem_181(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
|
|
266
|
+
return takeObject(ret);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function __wasm_bindgen_func_elem_179(arg0, arg1, arg2) {
|
|
270
|
+
wasm.__wasm_bindgen_func_elem_179(arg0, arg1, addHeapObject(arg2));
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
function __wasm_bindgen_func_elem_177(arg0, arg1) {
|
|
274
|
+
const ret = wasm.__wasm_bindgen_func_elem_177(arg0, arg1);
|
|
275
|
+
return takeObject(ret);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
const EffectHandleFinalization = (typeof FinalizationRegistry === 'undefined')
|
|
279
|
+
? { register: () => {}, unregister: () => {} }
|
|
280
|
+
: new FinalizationRegistry(ptr => wasm.__wbg_effecthandle_free(ptr >>> 0, 1));
|
|
281
|
+
|
|
282
|
+
const SignalHandleFinalization = (typeof FinalizationRegistry === 'undefined')
|
|
283
|
+
? { register: () => {}, unregister: () => {} }
|
|
284
|
+
: new FinalizationRegistry(ptr => wasm.__wbg_signalhandle_free(ptr >>> 0, 1));
|
|
285
|
+
|
|
286
|
+
const WasmRueFinalization = (typeof FinalizationRegistry === 'undefined')
|
|
287
|
+
? { register: () => {}, unregister: () => {} }
|
|
288
|
+
: new FinalizationRegistry(ptr => wasm.__wbg_wasmrue_free(ptr >>> 0, 1));
|
|
289
|
+
|
|
290
|
+
export class EffectHandle {
|
|
291
|
+
static __wrap(ptr) {
|
|
292
|
+
ptr = ptr >>> 0;
|
|
293
|
+
const obj = Object.create(EffectHandle.prototype);
|
|
294
|
+
obj.__wbg_ptr = ptr;
|
|
295
|
+
EffectHandleFinalization.register(obj, obj.__wbg_ptr, obj);
|
|
296
|
+
return obj;
|
|
297
|
+
}
|
|
298
|
+
__destroy_into_raw() {
|
|
299
|
+
const ptr = this.__wbg_ptr;
|
|
300
|
+
this.__wbg_ptr = 0;
|
|
301
|
+
EffectHandleFinalization.unregister(this);
|
|
302
|
+
return ptr;
|
|
303
|
+
}
|
|
304
|
+
free() {
|
|
305
|
+
const ptr = this.__destroy_into_raw();
|
|
306
|
+
wasm.__wbg_effecthandle_free(ptr, 0);
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* 销毁副作用:标记为已处置,并清空其清理回调
|
|
310
|
+
*
|
|
311
|
+
* 用法(JavaScript):
|
|
312
|
+
* ```js
|
|
313
|
+
* const eh = createEffect(() => {
|
|
314
|
+
* // ...effect body
|
|
315
|
+
* onCleanup(() => {
|
|
316
|
+
* // 这里注册的清理会在下一次执行前或 dispose() 时运行
|
|
317
|
+
* })
|
|
318
|
+
* })
|
|
319
|
+
* // 需要停止该副作用时:
|
|
320
|
+
* eh.dispose() // 标记为已处置,并执行最后一次已注册的清理
|
|
321
|
+
* ```
|
|
322
|
+
*/
|
|
323
|
+
dispose() {
|
|
324
|
+
wasm.effecthandle_dispose(this.__wbg_ptr);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
if (Symbol.dispose) EffectHandle.prototype[Symbol.dispose] = EffectHandle.prototype.free;
|
|
328
|
+
|
|
329
|
+
export class SignalHandle {
|
|
330
|
+
static __wrap(ptr) {
|
|
331
|
+
ptr = ptr >>> 0;
|
|
332
|
+
const obj = Object.create(SignalHandle.prototype);
|
|
333
|
+
obj.__wbg_ptr = ptr;
|
|
334
|
+
SignalHandleFinalization.register(obj, obj.__wbg_ptr, obj);
|
|
335
|
+
return obj;
|
|
336
|
+
}
|
|
337
|
+
__destroy_into_raw() {
|
|
338
|
+
const ptr = this.__wbg_ptr;
|
|
339
|
+
this.__wbg_ptr = 0;
|
|
340
|
+
SignalHandleFinalization.unregister(this);
|
|
341
|
+
return ptr;
|
|
342
|
+
}
|
|
343
|
+
free() {
|
|
344
|
+
const ptr = this.__destroy_into_raw();
|
|
345
|
+
wasm.__wbg_signalhandle_free(ptr, 0);
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* 根据路径读取当前对象/数组的子项值(依赖收集)
|
|
349
|
+
*
|
|
350
|
+
* 用法(JavaScript):
|
|
351
|
+
* ```js
|
|
352
|
+
* const s = createSignal({ user: { profile: { name: 'A' } } })
|
|
353
|
+
* const name1 = s.getPath(['user','profile','name']) // 'A'
|
|
354
|
+
* const name2 = s.getPath('user.profile.name') // 'A'
|
|
355
|
+
* // 在 watch 中使用路径读取会自动依赖收集
|
|
356
|
+
* watchFn(() => s.getPath(['user','profile','name']), (n, o) => { })
|
|
357
|
+
* watchFn(() => s.getPath('user.profile.name'), (n, o) => { })
|
|
358
|
+
* ```
|
|
359
|
+
* @param {any} path
|
|
360
|
+
* @returns {any}
|
|
361
|
+
*/
|
|
362
|
+
getPath(path) {
|
|
363
|
+
const ret = wasm.signalhandle_getPath(this.__wbg_ptr, addHeapObject(path));
|
|
364
|
+
return takeObject(ret);
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* 根据路径设置对象/数组的子项值:不可变更新,生成新的根对象并触发订阅者
|
|
368
|
+
*
|
|
369
|
+
* 用法(JavaScript):
|
|
370
|
+
* ```js
|
|
371
|
+
* const s = createSignal({ user: { profile: { name: 'A' }, age: 20 }, items: ['x'] })
|
|
372
|
+
* // 设置嵌套对象字段(数组路径)
|
|
373
|
+
* s.setPath(['user', 'profile', 'name'], 'B')
|
|
374
|
+
* // 设置数组元素(数组路径)
|
|
375
|
+
* s.setPath(['items', 0], 'y')
|
|
376
|
+
* // 字符串路径(以 . 分隔,数字段转为数组索引)
|
|
377
|
+
* s.setPath('user.profile.name', 'B')
|
|
378
|
+
* s.setPath('items.0', 'y')
|
|
379
|
+
* // 若根不是对象/数组,会以空对象作为根进行赋值
|
|
380
|
+
* s.setPath(['foo', 'bar'], 1)
|
|
381
|
+
* s.setPath('foo.bar', 1)
|
|
382
|
+
* ```
|
|
383
|
+
*
|
|
384
|
+
* 参数:
|
|
385
|
+
* - `path`: JS 数组或以 `.` 分隔的字符串(如 `['user','profile','name']`、`['items', 0]` 或 `'user.profile.name'`、`'items.0'`)
|
|
386
|
+
* - `value`: 目标路径的新值
|
|
387
|
+
* 行为与边界:
|
|
388
|
+
* - 路径缺失会自动以空对象占位,数组越界写入会扩展长度
|
|
389
|
+
* - 根为非对象/数组时以空对象为根进行赋值
|
|
390
|
+
* - 函数值作为普通值读写,不会被执行
|
|
391
|
+
* @param {any} path
|
|
392
|
+
* @param {any} value
|
|
393
|
+
*/
|
|
394
|
+
setPath(path, value) {
|
|
395
|
+
wasm.signalhandle_setPath(this.__wbg_ptr, addHeapObject(path), addHeapObject(value));
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* 便于调试:`signal.valueOf()` 返回内部值
|
|
399
|
+
* @returns {any}
|
|
400
|
+
*/
|
|
401
|
+
valueOf() {
|
|
402
|
+
const ret = wasm.signalhandle_valueOf(this.__wbg_ptr);
|
|
403
|
+
return takeObject(ret);
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* 路径偷看:不进行依赖收集(不订阅当前副作用),仅返回当前路径的值
|
|
407
|
+
* - 支持以 `.` 分隔的字符串路径(如 `user.profile.name`)或数组路径(如 `['user','profile','name']`、`['items', 0]`)
|
|
408
|
+
* - 行为与 `getPath` 相同,但不会触发依赖收集,适合用于调试/序列化
|
|
409
|
+
* @param {any} path
|
|
410
|
+
* @returns {any}
|
|
411
|
+
*/
|
|
412
|
+
peekPath(path) {
|
|
413
|
+
const ret = wasm.signalhandle_peekPath(this.__wbg_ptr, addHeapObject(path));
|
|
414
|
+
return takeObject(ret);
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* 便于调试:`String(signal)` 返回值的 JSON 字符串或占位文本
|
|
418
|
+
* @returns {string}
|
|
419
|
+
*/
|
|
420
|
+
toString() {
|
|
421
|
+
let deferred1_0;
|
|
422
|
+
let deferred1_1;
|
|
423
|
+
try {
|
|
424
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
425
|
+
wasm.signalhandle_toString(retptr, this.__wbg_ptr);
|
|
426
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
427
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
428
|
+
deferred1_0 = r0;
|
|
429
|
+
deferred1_1 = r1;
|
|
430
|
+
return getStringFromWasm0(r0, r1);
|
|
431
|
+
} finally {
|
|
432
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
433
|
+
wasm.__wbindgen_export4(deferred1_0, deferred1_1, 1);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* 只读调试:`signal.value` 直接返回内部值(不进行依赖收集)
|
|
438
|
+
* @returns {any}
|
|
439
|
+
*/
|
|
440
|
+
get value() {
|
|
441
|
+
const ret = wasm.signalhandle_value(this.__wbg_ptr);
|
|
442
|
+
return takeObject(ret);
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* 调试写入:`signal.value = next` 等价于 `signal.set(next)`
|
|
446
|
+
* 用法示例(JavaScript):
|
|
447
|
+
* ```js
|
|
448
|
+
* const s = createSignal(0)
|
|
449
|
+
* createEffect(() => { console.log('v =', s.get()) })
|
|
450
|
+
* s.value = 1 // 触发 effect(等价于 s.set(1))
|
|
451
|
+
* s.value = 1 // 若等值比较认为相等,则不触发
|
|
452
|
+
* ```
|
|
453
|
+
* @param {any} v
|
|
454
|
+
*/
|
|
455
|
+
set value(v) {
|
|
456
|
+
wasm.signalhandle_set(this.__wbg_ptr, addHeapObject(v));
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* 根据路径函数式更新子项:`updater(currentAtPath) -> nextAtPath`
|
|
460
|
+
*
|
|
461
|
+
* 用法(JavaScript):
|
|
462
|
+
* ```js
|
|
463
|
+
* const s = createSignal({ user: { age: 20 }, items: ['x'] })
|
|
464
|
+
* s.updatePath(['user','age'], prev => prev + 1) // age: 21
|
|
465
|
+
* s.updatePath(['user','name'], prev => (prev || '').toUpperCase())
|
|
466
|
+
* // 使用字符串路径
|
|
467
|
+
* s.updatePath('user.age', prev => prev + 1) // age: 21
|
|
468
|
+
* s.updatePath('items.0', prev => (prev || '').toUpperCase())
|
|
469
|
+
* ```
|
|
470
|
+
* @param {any} path
|
|
471
|
+
* @param {Function} updater
|
|
472
|
+
*/
|
|
473
|
+
updatePath(path, updater) {
|
|
474
|
+
wasm.signalhandle_updatePath(this.__wbg_ptr, addHeapObject(path), addHeapObject(updater));
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* 读取当前值,并在有正在运行的副作用时将其订阅到该信号
|
|
478
|
+
* @returns {any}
|
|
479
|
+
*/
|
|
480
|
+
get() {
|
|
481
|
+
const ret = wasm.signalhandle_get(this.__wbg_ptr);
|
|
482
|
+
return takeObject(ret);
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* 设置新值,按等值比较决定是否通知订阅者
|
|
486
|
+
* @param {any} v
|
|
487
|
+
*/
|
|
488
|
+
set(v) {
|
|
489
|
+
wasm.signalhandle_set(this.__wbg_ptr, addHeapObject(v));
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* 偷看当前值:不进行依赖收集(不订阅当前副作用)
|
|
493
|
+
* @returns {any}
|
|
494
|
+
*/
|
|
495
|
+
peek() {
|
|
496
|
+
const ret = wasm.signalhandle_peek(this.__wbg_ptr);
|
|
497
|
+
return takeObject(ret);
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* 便于调试:`JSON.stringify(signal)` 时返回内部值
|
|
501
|
+
* @returns {any}
|
|
502
|
+
*/
|
|
503
|
+
toJSON() {
|
|
504
|
+
const ret = wasm.signalhandle_toJSON(this.__wbg_ptr);
|
|
505
|
+
return takeObject(ret);
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* 根据回调对当前值进行计算并设置(相当于 set( updater(current) ))
|
|
509
|
+
* @param {Function} updater
|
|
510
|
+
*/
|
|
511
|
+
update(updater) {
|
|
512
|
+
wasm.signalhandle_update(this.__wbg_ptr, addHeapObject(updater));
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
if (Symbol.dispose) SignalHandle.prototype[Symbol.dispose] = SignalHandle.prototype.free;
|
|
516
|
+
|
|
517
|
+
export class WasmRue {
|
|
518
|
+
static __wrap(ptr) {
|
|
519
|
+
ptr = ptr >>> 0;
|
|
520
|
+
const obj = Object.create(WasmRue.prototype);
|
|
521
|
+
obj.__wbg_ptr = ptr;
|
|
522
|
+
WasmRueFinalization.register(obj, obj.__wbg_ptr, obj);
|
|
523
|
+
return obj;
|
|
524
|
+
}
|
|
525
|
+
__destroy_into_raw() {
|
|
526
|
+
const ptr = this.__wbg_ptr;
|
|
527
|
+
this.__wbg_ptr = 0;
|
|
528
|
+
WasmRueFinalization.unregister(this);
|
|
529
|
+
return ptr;
|
|
530
|
+
}
|
|
531
|
+
free() {
|
|
532
|
+
const ptr = this.__destroy_into_raw();
|
|
533
|
+
wasm.__wbg_wasmrue_free(ptr, 0);
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* @param {any} f
|
|
537
|
+
*/
|
|
538
|
+
onCreated(f) {
|
|
539
|
+
wasm.wasmrue_onCreated(this.__wbg_ptr, addHeapObject(f));
|
|
540
|
+
}
|
|
541
|
+
/**
|
|
542
|
+
* @param {any} f
|
|
543
|
+
*/
|
|
544
|
+
onMounted(f) {
|
|
545
|
+
wasm.wasmrue_onMounted(this.__wbg_ptr, addHeapObject(f));
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* @param {any} f
|
|
549
|
+
*/
|
|
550
|
+
onUpdated(f) {
|
|
551
|
+
wasm.wasmrue_onUpdated(this.__wbg_ptr, addHeapObject(f));
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* 使用插件:将 options 归一化为 Vec<JsValue> 并调用内部 use_plugin
|
|
555
|
+
* @param {any} plugin
|
|
556
|
+
* @param {any} options
|
|
557
|
+
*/
|
|
558
|
+
use(plugin, options) {
|
|
559
|
+
wasm.wasmrue_use(this.__wbg_ptr, addHeapObject(plugin), addHeapObject(options));
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* @param {any} f
|
|
563
|
+
*/
|
|
564
|
+
onUnmounted(f) {
|
|
565
|
+
wasm.wasmrue_onUnmounted(this.__wbg_ptr, addHeapObject(f));
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* 创建元素/组件的 VNode(开发态对象或注册表引用)
|
|
569
|
+
*
|
|
570
|
+
* - 组件函数:构建 Component 类型并输出注册表 ID
|
|
571
|
+
* - 普通标签:构建 VNodeType,归一化 children,入注册表或内联对象
|
|
572
|
+
* @param {any} type_tag
|
|
573
|
+
* @param {any} props
|
|
574
|
+
* @param {any} children
|
|
575
|
+
* @returns {any}
|
|
576
|
+
*/
|
|
577
|
+
createElement(type_tag, props, children) {
|
|
578
|
+
const ret = wasm.wasmrue_createElement(this.__wbg_ptr, addHeapObject(type_tag), addHeapObject(props), addHeapObject(children));
|
|
579
|
+
return takeObject(ret);
|
|
580
|
+
}
|
|
581
|
+
/**
|
|
582
|
+
* 区间渲染入口:解析 id/函数组件/对象为 VNode,并提交区间信息
|
|
583
|
+
* @param {any} vnode_id
|
|
584
|
+
* @param {any} parent
|
|
585
|
+
* @param {any} start
|
|
586
|
+
* @param {any} end
|
|
587
|
+
*/
|
|
588
|
+
renderBetween(vnode_id, parent, start, end) {
|
|
589
|
+
wasm.wasmrue_renderBetween(this.__wbg_ptr, addHeapObject(vnode_id), addHeapObject(parent), addHeapObject(start), addHeapObject(end));
|
|
590
|
+
}
|
|
591
|
+
/**
|
|
592
|
+
* 读取当前 DOM 适配器(从全局 __rue_dom)
|
|
593
|
+
* @returns {any}
|
|
594
|
+
*/
|
|
595
|
+
getDOMAdapter() {
|
|
596
|
+
const ret = wasm.wasmrue_getDOMAdapter(this.__wbg_ptr);
|
|
597
|
+
return takeObject(ret);
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* @param {any} f
|
|
601
|
+
*/
|
|
602
|
+
onBeforeMount(f) {
|
|
603
|
+
wasm.wasmrue_onBeforeMount(this.__wbg_ptr, addHeapObject(f));
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* 设置 DOM 适配器(JsDomAdapter),用于后续渲染与元素操作
|
|
607
|
+
* @param {any} adapter
|
|
608
|
+
*/
|
|
609
|
+
setDOMAdapter(adapter) {
|
|
610
|
+
wasm.wasmrue_setDOMAdapter(this.__wbg_ptr, addHeapObject(adapter));
|
|
611
|
+
}
|
|
612
|
+
/**
|
|
613
|
+
* @param {any} f
|
|
614
|
+
*/
|
|
615
|
+
onBeforeCreate(f) {
|
|
616
|
+
wasm.wasmrue_onBeforeCreate(this.__wbg_ptr, addHeapObject(f));
|
|
617
|
+
}
|
|
618
|
+
/**
|
|
619
|
+
* @param {any} f
|
|
620
|
+
*/
|
|
621
|
+
onBeforeUpdate(f) {
|
|
622
|
+
wasm.wasmrue_onBeforeUpdate(this.__wbg_ptr, addHeapObject(f));
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* @param {any} f
|
|
626
|
+
*/
|
|
627
|
+
onBeforeUnmount(f) {
|
|
628
|
+
wasm.wasmrue_onBeforeUnmount(this.__wbg_ptr, addHeapObject(f));
|
|
629
|
+
}
|
|
630
|
+
/**
|
|
631
|
+
* 获取 DOM 适配器的“可变”接口(同只读返回,兼容 JS 侧命名)
|
|
632
|
+
* @returns {any}
|
|
633
|
+
*/
|
|
634
|
+
getDOMAdapterMut() {
|
|
635
|
+
const ret = wasm.wasmrue_getDOMAdapterMut(this.__wbg_ptr);
|
|
636
|
+
return takeObject(ret);
|
|
637
|
+
}
|
|
638
|
+
/**
|
|
639
|
+
* JSX/h 入口:与 createElement 行为一致,聚合到同一实现
|
|
640
|
+
* @param {any} type_tag
|
|
641
|
+
* @param {any} props
|
|
642
|
+
* @param {any} children
|
|
643
|
+
* @returns {any}
|
|
644
|
+
*/
|
|
645
|
+
h(type_tag, props, children) {
|
|
646
|
+
const ret = wasm.wasmrue_createElement(this.__wbg_ptr, addHeapObject(type_tag), addHeapObject(props), addHeapObject(children));
|
|
647
|
+
return takeObject(ret);
|
|
648
|
+
}
|
|
649
|
+
/**
|
|
650
|
+
* 获取当前容器:优先返回最近一次渲染或挂载设置的容器
|
|
651
|
+
* @returns {any}
|
|
652
|
+
*/
|
|
653
|
+
getCurrentContainer() {
|
|
654
|
+
const ret = wasm.wasmrue_getCurrentContainer(this.__wbg_ptr);
|
|
655
|
+
return takeObject(ret);
|
|
656
|
+
}
|
|
657
|
+
/**
|
|
658
|
+
* 挂载入口:预刷新延迟任务 → 调用 app → 回退到空片段
|
|
659
|
+
* @param {any} app
|
|
660
|
+
* @param {any} container
|
|
661
|
+
*/
|
|
662
|
+
mount(app, container) {
|
|
663
|
+
wasm.wasmrue_mount(this.__wbg_ptr, addHeapObject(app), addHeapObject(container));
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* 返回 Vapor/VaporWithSetup 的注册表对象
|
|
667
|
+
*
|
|
668
|
+
* - 若传入 setup 函数:构建 VaporWithSetup,并尝试立即调用以填充 el
|
|
669
|
+
* - 若 el 为片段:收集其子节点并写入 __fragNodes
|
|
670
|
+
* - 否则构建普通 Vapor VNode
|
|
671
|
+
* @param {any} setup
|
|
672
|
+
* @returns {any}
|
|
673
|
+
*/
|
|
674
|
+
vapor(setup) {
|
|
675
|
+
const ret = wasm.wasmrue_vapor(this.__wbg_ptr, addHeapObject(setup));
|
|
676
|
+
return takeObject(ret);
|
|
677
|
+
}
|
|
678
|
+
/**
|
|
679
|
+
* 渲染入口:接受 id/对象/vaporElement,解析为 VNode 并异步提交
|
|
680
|
+
* @param {any} vnode_id
|
|
681
|
+
* @param {any} container
|
|
682
|
+
*/
|
|
683
|
+
render(vnode_id, container) {
|
|
684
|
+
wasm.wasmrue_render(this.__wbg_ptr, addHeapObject(vnode_id), addHeapObject(container));
|
|
685
|
+
}
|
|
686
|
+
/**
|
|
687
|
+
* 返回一个 JS 回调函数,用于在组件内部发射事件
|
|
688
|
+
*
|
|
689
|
+
* - 根据 props 构建事件发射器 emitter(name, args)
|
|
690
|
+
* - 回调参数 args 若为数组,将其拆解为 Vec<JsValue> 传入
|
|
691
|
+
* @param {any} props
|
|
692
|
+
* @returns {any}
|
|
693
|
+
*/
|
|
694
|
+
emitted(props) {
|
|
695
|
+
const ret = wasm.wasmrue_emitted(this.__wbg_ptr, addHeapObject(props));
|
|
696
|
+
return takeObject(ret);
|
|
697
|
+
}
|
|
698
|
+
/**
|
|
699
|
+
* 卸载入口:清空容器 innerHTML,并解除 container_map 绑定
|
|
700
|
+
* @param {any} container
|
|
701
|
+
*/
|
|
702
|
+
unmount(container) {
|
|
703
|
+
wasm.wasmrue_unmount(this.__wbg_ptr, addHeapObject(container));
|
|
704
|
+
}
|
|
705
|
+
/**
|
|
706
|
+
* @param {any} f
|
|
707
|
+
*/
|
|
708
|
+
onError(f) {
|
|
709
|
+
wasm.wasmrue_onError(this.__wbg_ptr, addHeapObject(f));
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
if (Symbol.dispose) WasmRue.prototype[Symbol.dispose] = WasmRue.prototype.free;
|
|
713
|
+
|
|
714
|
+
/**
|
|
715
|
+
* 批量更新:在回调期间抑制副作用的即时触发,统一在结束后刷新
|
|
716
|
+
*
|
|
717
|
+
* 用法与示例(JavaScript):
|
|
718
|
+
* ```js
|
|
719
|
+
* const { createSignal, createEffect, batch } = wasmModule
|
|
720
|
+
*
|
|
721
|
+
* // 示例一:同一信号多次 set,仅在批量结束后重跑一次
|
|
722
|
+
* const count = createSignal(0)
|
|
723
|
+
* createEffect(() => {
|
|
724
|
+
* console.log('[batch-demo] count =', count.get())
|
|
725
|
+
* })
|
|
726
|
+
* batch(() => {
|
|
727
|
+
* count.set(1)
|
|
728
|
+
* count.set(2)
|
|
729
|
+
* count.set(3)
|
|
730
|
+
* // 在批量范围内不会立即触发副作用
|
|
731
|
+
* })
|
|
732
|
+
* // 批量结束后只触发一次副作用,打印最新值 3
|
|
733
|
+
*
|
|
734
|
+
* // 示例二:一次性更新多个信号,副作用只合并重跑一次
|
|
735
|
+
* const a = createSignal(0)
|
|
736
|
+
* const b = createSignal(0)
|
|
737
|
+
* createEffect(() => {
|
|
738
|
+
* console.log('[batch-demo] sum =', a.get() + b.get())
|
|
739
|
+
* })
|
|
740
|
+
* batch(() => {
|
|
741
|
+
* a.set(10)
|
|
742
|
+
* b.set(20)
|
|
743
|
+
* }) // 仅一次重跑,输出 sum = 30
|
|
744
|
+
* ```
|
|
745
|
+
* @param {Function} cb
|
|
746
|
+
*/
|
|
747
|
+
export function batch(cb) {
|
|
748
|
+
wasm.batch(addHeapObject(cb));
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
/**
|
|
752
|
+
* @param {any} arg
|
|
753
|
+
* @param {boolean | null} [force_global]
|
|
754
|
+
* @returns {SignalHandle}
|
|
755
|
+
*/
|
|
756
|
+
export function computed(arg, force_global) {
|
|
757
|
+
const ret = wasm.computed(addHeapObject(arg), isLikeNone(force_global) ? 0xFFFFFF : force_global ? 1 : 0);
|
|
758
|
+
return SignalHandle.__wrap(ret);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
/**
|
|
762
|
+
* 创建计算属性
|
|
763
|
+
* - 参数:可为函数 `() => any`,或对象 `{ get: () => any }`
|
|
764
|
+
* 返回:一个只读信号句柄(通过 get/peek 读取,内部通过 effect 驱动更新)
|
|
765
|
+
* 示例(JavaScript):
|
|
766
|
+
* ```javascript
|
|
767
|
+
* const { createSignal, createComputed, createEffect } = wasmModule;
|
|
768
|
+
* const count = createSignal(1);
|
|
769
|
+
* const double = createComputed(() => count.get() * 2);
|
|
770
|
+
*
|
|
771
|
+
* createEffect(() => {
|
|
772
|
+
* console.log('double =', double.get());
|
|
773
|
+
* });
|
|
774
|
+
*
|
|
775
|
+
* count.set(2); // double 将变为 4 并触发订阅者
|
|
776
|
+
* ```
|
|
777
|
+
* 更多用法示例:
|
|
778
|
+
*
|
|
779
|
+
* 1) 对象参数(只读 getter):
|
|
780
|
+
* ```javascript
|
|
781
|
+
* const { createSignal, createComputed, createEffect } = wasmModule;
|
|
782
|
+
* const first = createSignal('John');
|
|
783
|
+
* const last = createSignal('Doe');
|
|
784
|
+
* const fullName = createComputed({
|
|
785
|
+
* get: () => first.get() + ' ' + last.get()
|
|
786
|
+
* });
|
|
787
|
+
* createEffect(() => {
|
|
788
|
+
* console.log('fullName =', fullName.get()); // John Doe
|
|
789
|
+
* });
|
|
790
|
+
* ```
|
|
791
|
+
*
|
|
792
|
+
* 2) 通过更新源信号实现“可写效果”(模拟 Vue3 的 setter 行为):
|
|
793
|
+
* ```javascript
|
|
794
|
+
* const setFullName = (nv) => {
|
|
795
|
+
* const [f, l] = nv.split(' ');
|
|
796
|
+
* first.set(f);
|
|
797
|
+
* last.set(l);
|
|
798
|
+
* };
|
|
799
|
+
* setFullName('David Smith'); // fullName 将变为 "David Smith"
|
|
800
|
+
* ```
|
|
801
|
+
*
|
|
802
|
+
* 3) 直接使用 `{ get, set }` 创建“可写 computed”,支持 `.set(value)`:
|
|
803
|
+
* ```javascript
|
|
804
|
+
* const fullName = createComputed({
|
|
805
|
+
* get: () => first.get() + ' ' + last.get(),
|
|
806
|
+
* set: (nv) => {
|
|
807
|
+
* const [f, l] = nv.split(' ');
|
|
808
|
+
* first.set(f);
|
|
809
|
+
* last.set(l);
|
|
810
|
+
* }
|
|
811
|
+
* });
|
|
812
|
+
* fullName.set('David Smith'); // 将调用你的 set 更新源信号,并重算派生值
|
|
813
|
+
* ```
|
|
814
|
+
* @param {any} arg
|
|
815
|
+
* @returns {SignalHandle}
|
|
816
|
+
*/
|
|
817
|
+
export function createComputed(arg) {
|
|
818
|
+
const ret = wasm.createComputed(addHeapObject(arg));
|
|
819
|
+
return SignalHandle.__wrap(ret);
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
/**
|
|
823
|
+
* 创建副作用(立即运行一次),并返回句柄
|
|
824
|
+
* 示例(JavaScript):
|
|
825
|
+
* ```javascript
|
|
826
|
+
* const { createSignal, createEffect, onCleanup, untrack, batch } = wasmModule;
|
|
827
|
+
* const s = createSignal(0);
|
|
828
|
+
*
|
|
829
|
+
* // 基本副作用:读取信号并打印
|
|
830
|
+
* createEffect(() => {
|
|
831
|
+
* console.log('value:', s.get());
|
|
832
|
+
* });
|
|
833
|
+
* s.set(1);
|
|
834
|
+
*
|
|
835
|
+
* // 清理示例:注册定时器并在下一次运行前清理
|
|
836
|
+
* createEffect(() => {
|
|
837
|
+
* const id = setInterval(() => console.log('tick'), 1000);
|
|
838
|
+
* onCleanup(() => clearInterval(id));
|
|
839
|
+
* });
|
|
840
|
+
*
|
|
841
|
+
* // 断开依赖收集:不会订阅 other 信号
|
|
842
|
+
* createEffect(() => {
|
|
843
|
+
* const v = untrack(() => s.get());
|
|
844
|
+
* console.log('untracked:', v);
|
|
845
|
+
* });
|
|
846
|
+
*
|
|
847
|
+
* 创建副作用(支持自定义调度器与懒执行)
|
|
848
|
+
* options:
|
|
849
|
+
* - scheduler: Function( run: Function ),用于自定义何时调用 run
|
|
850
|
+
* - lazy: bool,true 时不在创建时立即运行
|
|
851
|
+
* 示例(JavaScript):
|
|
852
|
+
* ```javascript
|
|
853
|
+
* const { createEffect } = wasmModule;
|
|
854
|
+
* const scheduler = (run) => queueMicrotask(run); // 或者使用 requestAnimationFrame
|
|
855
|
+
* createEffect(() => {
|
|
856
|
+
* // ...effect body
|
|
857
|
+
* }, { scheduler, lazy: false });
|
|
858
|
+
* ```
|
|
859
|
+
* @param {Function} cb
|
|
860
|
+
* @param {any | null} [options]
|
|
861
|
+
* @returns {EffectHandle}
|
|
862
|
+
*/
|
|
863
|
+
export function createEffect(cb, options) {
|
|
864
|
+
const ret = wasm.createEffect(addHeapObject(cb), isLikeNone(options) ? 0 : addHeapObject(options));
|
|
865
|
+
return EffectHandle.__wrap(ret);
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
/**
|
|
869
|
+
* 创建 Reactive:返回一个对象/数组的响应式代理(深/浅、只读可选)
|
|
870
|
+
*
|
|
871
|
+
* 用法(JavaScript / TypeScript):
|
|
872
|
+
* ```ts
|
|
873
|
+
* // 基础对象:读取与写入都响应式
|
|
874
|
+
* const state = createReactive({ user: { name: 'A' }, items: ['x'] })
|
|
875
|
+
* console.log(state.user.name) // 'A'
|
|
876
|
+
* state.user.name = 'B' // 写入嵌套字段,触发订阅者
|
|
877
|
+
* state.items.push('y') // 数组写入也可触发(通过路径写入实现不可变更新)
|
|
878
|
+
*
|
|
879
|
+
* // 在 Vapor JSX 中使用(自动 DOM 更新)
|
|
880
|
+
* // <span>{state.user.name}</span>
|
|
881
|
+
* // <input value={state.user.name} onInput={e => state.user.name = e.target.value} />
|
|
882
|
+
*
|
|
883
|
+
* // 只读代理:禁止写入
|
|
884
|
+
* const ro = createReactive({ a: 1 }, { readonly: true })
|
|
885
|
+
* // ro.a = 2 // 将被忽略或导致失败(只读)
|
|
886
|
+
*
|
|
887
|
+
* // 浅代理:仅对顶层对象进行代理,子对象不递归代理
|
|
888
|
+
* const sh = createReactive({ nested: { a: 1 } }, { shallow: true })
|
|
889
|
+
* // sh.nested 仍为普通对象(非代理)
|
|
890
|
+
*
|
|
891
|
+
* // 原始类型:普通值会自动包裹为 { value } 并返回其代理
|
|
892
|
+
* const num = createReactive(0)
|
|
893
|
+
* console.log(num.value) // 0
|
|
894
|
+
* num.value = 1 // 写入 value 字段触发订阅者
|
|
895
|
+
* const str = createReactive('A')
|
|
896
|
+
* str.value = 'B' // 原始类型统一通过 value 字段读写
|
|
897
|
+
*
|
|
898
|
+
* // 自定义等值比较:用于控制触发频率
|
|
899
|
+
* const eq = (prev: any, next: any) => _.isEqual(prev, next)
|
|
900
|
+
* const obj = createReactive({ a: 1 }, { equals: eq })
|
|
901
|
+
* obj.a = 1 // 不触发(相等)
|
|
902
|
+
* ```
|
|
903
|
+
* @param {any} initial
|
|
904
|
+
* @param {any | null} [options]
|
|
905
|
+
* @returns {any}
|
|
906
|
+
*/
|
|
907
|
+
export function createReactive(initial, options) {
|
|
908
|
+
const ret = wasm.createReactive(addHeapObject(initial), isLikeNone(options) ? 0 : addHeapObject(options));
|
|
909
|
+
return takeObject(ret);
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
/**
|
|
913
|
+
* 创建 Ref:返回一个带有 `value` 字段的响应式代理对象
|
|
914
|
+
*
|
|
915
|
+
* 用法(JavaScript / TypeScript):
|
|
916
|
+
* ```ts
|
|
917
|
+
* // 基本使用:读写 value,自动依赖收集
|
|
918
|
+
* const r = createRef(0)
|
|
919
|
+
* console.log(r.value) // 0
|
|
920
|
+
* r.value = 1 // 触发订阅者
|
|
921
|
+
*
|
|
922
|
+
* // 与 watchEffect 配合(依赖自动收集)
|
|
923
|
+
* const stop = watchEffect(() => {
|
|
924
|
+
* console.log('ref value =', r.value)
|
|
925
|
+
* })
|
|
926
|
+
* r.value = 2 // 触发前面的 watchEffect
|
|
927
|
+
* stop() // 停止响应
|
|
928
|
+
*
|
|
929
|
+
* // peek:查看当前值,不收集依赖(不会订阅当前副作用)
|
|
930
|
+
* const cur = r.peek() // 仅返回值,不产生订阅
|
|
931
|
+
*
|
|
932
|
+
* // update:基于当前值计算并写回
|
|
933
|
+
* r.update(prev => prev + 1) // 等价于 r.value = (prev + 1)
|
|
934
|
+
*
|
|
935
|
+
* // 自定义等值比较:避免无意义的触发
|
|
936
|
+
* const r2 = createRef({ a: 1 }, { equals: (p, n) => _.isEqual(p?.value, n?.value) })
|
|
937
|
+
* r2.value = { a: 1 } // 不触发(相等)
|
|
938
|
+
*
|
|
939
|
+
* // 与组件/DOM 结合(Vapor 模式下自动更新)
|
|
940
|
+
* // <span>{r.value}</span> 会被编译为原生 DOM + 响应式更新
|
|
941
|
+
* ```
|
|
942
|
+
* @param {any} initial
|
|
943
|
+
* @param {any | null} [options]
|
|
944
|
+
* @returns {any}
|
|
945
|
+
*/
|
|
946
|
+
export function createRef(initial, options) {
|
|
947
|
+
const ret = wasm.createRef(addHeapObject(initial), isLikeNone(options) ? 0 : addHeapObject(options));
|
|
948
|
+
return takeObject(ret);
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
/**
|
|
952
|
+
* 创建资源:根据 `src` 信号的值调用 `fetcher`(返回 Promise),
|
|
953
|
+
* 并提供 `{ data, error, loading }` 三个信号以反映异步状态。
|
|
954
|
+
* 示例(JavaScript):
|
|
955
|
+
* ```javascript
|
|
956
|
+
* const { createSignal, createResource, createEffect } = wasmModule;
|
|
957
|
+
* const key = createSignal('https://api.example.com/data');
|
|
958
|
+
* const res = createResource(key, async (k) => {
|
|
959
|
+
* const r = await fetch(k);
|
|
960
|
+
* if (!r.ok) throw new Error('network error');
|
|
961
|
+
* return r.json();
|
|
962
|
+
* });
|
|
963
|
+
*
|
|
964
|
+
* createEffect(() => {
|
|
965
|
+
* console.log('loading:', res.loading.get());
|
|
966
|
+
* console.log('data:', res.data.get());
|
|
967
|
+
* console.log('error:', res.error.get());
|
|
968
|
+
* });
|
|
969
|
+
*
|
|
970
|
+
* key.set('https://api.example.com/data2');
|
|
971
|
+
* ```
|
|
972
|
+
* @param {SignalHandle} src
|
|
973
|
+
* @param {Function} fetcher
|
|
974
|
+
* @returns {any}
|
|
975
|
+
*/
|
|
976
|
+
export function createResource(src, fetcher) {
|
|
977
|
+
_assertClass(src, SignalHandle);
|
|
978
|
+
const ret = wasm.createResource(src.__wbg_ptr, addHeapObject(fetcher));
|
|
979
|
+
return takeObject(ret);
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
/**
|
|
983
|
+
* 创建 WasmRue 实例(可选设置 DOM 适配器)
|
|
984
|
+
*
|
|
985
|
+
* - 若传入 adapter(JS 对象),则设置为 DomAdapter,并在全局挂载 __rue_dom
|
|
986
|
+
* - 初始化内部 Rue,构造渲染队列与上次容器记录
|
|
987
|
+
* @param {any} adapter
|
|
988
|
+
* @returns {WasmRue}
|
|
989
|
+
*/
|
|
990
|
+
export function createRue(adapter) {
|
|
991
|
+
const ret = wasm.createRue(addHeapObject(adapter));
|
|
992
|
+
return WasmRue.__wrap(ret);
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
/**
|
|
996
|
+
* 创建带选项的信号
|
|
997
|
+
* options.equals: Function(prev, next) -> bool,返回 true 表示值相等(不触发)
|
|
998
|
+
* 示例(JavaScript):
|
|
999
|
+
* ```javascript
|
|
1000
|
+
* const { createSignal, createEffect } = wasmModule;
|
|
1001
|
+
* const count = createSignal(0);
|
|
1002
|
+
* createEffect(() => {
|
|
1003
|
+
* console.log('count =', count.get());
|
|
1004
|
+
* });
|
|
1005
|
+
* count.set(1); // 触发 effect
|
|
1006
|
+
*
|
|
1007
|
+
* const eq = (prev, next) => prev === next;
|
|
1008
|
+
* const s = createSignal(0, { equals: eq });
|
|
1009
|
+
* s.set(0); // 不触发,因为 equals 返回 true(相等)
|
|
1010
|
+
* s.set(2); // 触发订阅者
|
|
1011
|
+
* ```
|
|
1012
|
+
* @param {any} initial
|
|
1013
|
+
* @param {any | null} [options]
|
|
1014
|
+
* @returns {SignalHandle}
|
|
1015
|
+
*/
|
|
1016
|
+
export function createSignal(initial, options) {
|
|
1017
|
+
const ret = wasm.createSignal(addHeapObject(initial), isLikeNone(options) ? 0 : addHeapObject(options));
|
|
1018
|
+
return SignalHandle.__wrap(ret);
|
|
1019
|
+
}
|
|
1020
|
+
|
|
1021
|
+
/**
|
|
1022
|
+
* 获取当前实例;若未设置则返回空值(null/undefined),不再构造默认根实例
|
|
1023
|
+
* 用法(JavaScript):
|
|
1024
|
+
* ```javascript
|
|
1025
|
+
* const { setCurrentInstance, getCurrentInstance, withHookSlot } = wasmModule;
|
|
1026
|
+
*
|
|
1027
|
+
* // 设置并获取当前实例
|
|
1028
|
+
* setCurrentInstance({ name: 'A' });
|
|
1029
|
+
* const inst = getCurrentInstance(); // { name: 'A', ... }
|
|
1030
|
+
*
|
|
1031
|
+
* // 清空当前实例后,获取为空(undefined 或 null)
|
|
1032
|
+
* setCurrentInstance(undefined);
|
|
1033
|
+
* const none = getCurrentInstance(); // undefined(或 null)
|
|
1034
|
+
*
|
|
1035
|
+
* // 在有当前实例时,withHookSlot 为该实例分配/复用一个 Hook 插槽
|
|
1036
|
+
* setCurrentInstance({});
|
|
1037
|
+
* const state = withHookSlot(() => ({ count: 0 })); // 首次创建并缓存到 __hooks.states
|
|
1038
|
+
* ```
|
|
1039
|
+
* @returns {any}
|
|
1040
|
+
*/
|
|
1041
|
+
export function getCurrentInstance() {
|
|
1042
|
+
const ret = wasm.getCurrentInstance();
|
|
1043
|
+
return takeObject(ret);
|
|
1044
|
+
}
|
|
1045
|
+
|
|
1046
|
+
/**
|
|
1047
|
+
* @param {any} obj
|
|
1048
|
+
* @returns {boolean}
|
|
1049
|
+
*/
|
|
1050
|
+
export function isReactive(obj) {
|
|
1051
|
+
const ret = wasm.isReactive(addHeapObject(obj));
|
|
1052
|
+
return ret !== 0;
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
/**
|
|
1056
|
+
* 在当前运行的副作用上注册清理函数
|
|
1057
|
+
* 清理函数会在下一次该副作用执行之前被调用
|
|
1058
|
+
* 用法与示例(JavaScript):
|
|
1059
|
+
* ```js
|
|
1060
|
+
* // 需求:每次依赖变化时重建一个定时器,并在下一次运行前清理上一次的定时器
|
|
1061
|
+
* const s = createSignal(0)
|
|
1062
|
+
* const eh = createEffect(() => {
|
|
1063
|
+
* const v = s.get() // 建立订阅
|
|
1064
|
+
* const id = setInterval(() => console.log('[onCleanup-demo] tick v=', v), 500)
|
|
1065
|
+
* onCleanup(() => clearInterval(id)) // 下次运行前清理上一次的定时器
|
|
1066
|
+
* })
|
|
1067
|
+
* s.set(1) // 触发重跑:先清理旧定时器,再创建新定时器(只保留一个)
|
|
1068
|
+
* s.set(2) // 同理
|
|
1069
|
+
* eh.dispose() // 停止后续运行,并执行最后一次已注册的清理(定时器不再 tick)
|
|
1070
|
+
* ```
|
|
1071
|
+
* @param {Function} cb
|
|
1072
|
+
*/
|
|
1073
|
+
export function onCleanup(cb) {
|
|
1074
|
+
wasm.onCleanup(addHeapObject(cb));
|
|
1075
|
+
}
|
|
1076
|
+
|
|
1077
|
+
/**
|
|
1078
|
+
* @param {any} initial
|
|
1079
|
+
* @param {boolean | null} [force_global]
|
|
1080
|
+
* @returns {any}
|
|
1081
|
+
*/
|
|
1082
|
+
export function propsReactive(initial, force_global) {
|
|
1083
|
+
const ret = wasm.propsReactive(addHeapObject(initial), isLikeNone(force_global) ? 0xFFFFFF : force_global ? 1 : 0);
|
|
1084
|
+
return takeObject(ret);
|
|
1085
|
+
}
|
|
1086
|
+
|
|
1087
|
+
/**
|
|
1088
|
+
* @param {any} initial
|
|
1089
|
+
* @param {any | null} [options]
|
|
1090
|
+
* @param {boolean | null} [force_global]
|
|
1091
|
+
* @returns {any}
|
|
1092
|
+
*/
|
|
1093
|
+
export function reactive(initial, options, force_global) {
|
|
1094
|
+
const ret = wasm.reactive(addHeapObject(initial), isLikeNone(options) ? 0 : addHeapObject(options), isLikeNone(force_global) ? 0xFFFFFF : force_global ? 1 : 0);
|
|
1095
|
+
return takeObject(ret);
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
/**
|
|
1099
|
+
* @param {any} initial
|
|
1100
|
+
* @param {boolean | null} [force_global]
|
|
1101
|
+
* @returns {any}
|
|
1102
|
+
*/
|
|
1103
|
+
export function readonly(initial, force_global) {
|
|
1104
|
+
const ret = wasm.readonly(addHeapObject(initial), isLikeNone(force_global) ? 0xFFFFFF : force_global ? 1 : 0);
|
|
1105
|
+
return takeObject(ret);
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
/**
|
|
1109
|
+
* @param {any} initial
|
|
1110
|
+
* @param {any | null} [options]
|
|
1111
|
+
* @param {boolean | null} [force_global]
|
|
1112
|
+
* @returns {any}
|
|
1113
|
+
*/
|
|
1114
|
+
export function ref(initial, options, force_global) {
|
|
1115
|
+
const ret = wasm.ref(addHeapObject(initial), isLikeNone(options) ? 0 : addHeapObject(options), isLikeNone(force_global) ? 0xFFFFFF : force_global ? 1 : 0);
|
|
1116
|
+
return takeObject(ret);
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
/**
|
|
1120
|
+
* 设置当前实例
|
|
1121
|
+
* 传入 `null/undefined` 表示清空;否则记录为 Some(instance)
|
|
1122
|
+
* 示例(JavaScript):
|
|
1123
|
+
* ```javascript
|
|
1124
|
+
* const { setCurrentInstance, getCurrentInstance, withHookSlot, createSignal } = wasmModule;
|
|
1125
|
+
* const inst = { name: 'MyComponent' };
|
|
1126
|
+
* setCurrentInstance(inst);
|
|
1127
|
+
*
|
|
1128
|
+
* // 在实例上分配一个 Hook 插槽,用于存储状态对象
|
|
1129
|
+
* const state = withHookSlot(() => ({ count: createSignal(0) }));
|
|
1130
|
+
* console.log(getCurrentInstance()); // 当前实例或根实例
|
|
1131
|
+
* ```
|
|
1132
|
+
* @param {any} i
|
|
1133
|
+
*/
|
|
1134
|
+
export function setCurrentInstance(i) {
|
|
1135
|
+
wasm.setCurrentInstance(addHeapObject(i));
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1138
|
+
/**
|
|
1139
|
+
* 设置调度模式
|
|
1140
|
+
* - mode="sync":信号变更时尽可能同步触发副作用
|
|
1141
|
+
* - 其他值:采用默认微任务合并调度
|
|
1142
|
+
* 示例(JavaScript):
|
|
1143
|
+
* ```javascript
|
|
1144
|
+
* const { setReactiveScheduling } = wasmModule;
|
|
1145
|
+
* setReactiveScheduling('sync'); // 适合少量、快速的更新
|
|
1146
|
+
* // setReactiveScheduling('microtask'); // 使用默认微任务合并(传非 "sync" 即可)
|
|
1147
|
+
* ```
|
|
1148
|
+
* @param {string} mode
|
|
1149
|
+
*/
|
|
1150
|
+
export function setReactiveScheduling(mode) {
|
|
1151
|
+
const ptr0 = passStringToWasm0(mode, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
1152
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1153
|
+
wasm.setReactiveScheduling(ptr0, len0);
|
|
1154
|
+
}
|
|
1155
|
+
|
|
1156
|
+
/**
|
|
1157
|
+
* @param {any} initial
|
|
1158
|
+
* @param {any | null} [options]
|
|
1159
|
+
* @param {boolean | null} [force_global]
|
|
1160
|
+
* @returns {any}
|
|
1161
|
+
*/
|
|
1162
|
+
export function shallowReactive(initial, options, force_global) {
|
|
1163
|
+
const ret = wasm.shallowReactive(addHeapObject(initial), isLikeNone(options) ? 0 : addHeapObject(options), isLikeNone(force_global) ? 0xFFFFFF : force_global ? 1 : 0);
|
|
1164
|
+
return takeObject(ret);
|
|
1165
|
+
}
|
|
1166
|
+
|
|
1167
|
+
/**
|
|
1168
|
+
* @param {any} initial
|
|
1169
|
+
* @param {boolean | null} [force_global]
|
|
1170
|
+
* @returns {any}
|
|
1171
|
+
*/
|
|
1172
|
+
export function shallowReadonly(initial, force_global) {
|
|
1173
|
+
const ret = wasm.shallowReadonly(addHeapObject(initial), isLikeNone(force_global) ? 0xFFFFFF : force_global ? 1 : 0);
|
|
1174
|
+
return takeObject(ret);
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1177
|
+
/**
|
|
1178
|
+
* @param {any} initial
|
|
1179
|
+
* @param {any | null} [options]
|
|
1180
|
+
* @param {boolean | null} [force_global]
|
|
1181
|
+
* @returns {SignalHandle}
|
|
1182
|
+
*/
|
|
1183
|
+
export function signal(initial, options, force_global) {
|
|
1184
|
+
const ret = wasm.signal(addHeapObject(initial), isLikeNone(options) ? 0 : addHeapObject(options), isLikeNone(force_global) ? 0xFFFFFF : force_global ? 1 : 0);
|
|
1185
|
+
return SignalHandle.__wrap(ret);
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
/**
|
|
1189
|
+
* @param {any} obj
|
|
1190
|
+
* @returns {any}
|
|
1191
|
+
*/
|
|
1192
|
+
export function toRaw(obj) {
|
|
1193
|
+
const ret = wasm.toRaw(addHeapObject(obj));
|
|
1194
|
+
return takeObject(ret);
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
/**
|
|
1198
|
+
* 通用取值转换
|
|
1199
|
+
* 支持以下输入:
|
|
1200
|
+
* - 函数:调用并返回其结果
|
|
1201
|
+
* - 对象:优先读取 `value` 字段,其次尝试调用 `get()` 方法
|
|
1202
|
+
* - 其他:直接返回原值
|
|
1203
|
+
* 示例(JavaScript):
|
|
1204
|
+
* ```javascript
|
|
1205
|
+
* const { toValue } = wasmModule;
|
|
1206
|
+
* toValue(() => 1); // 1
|
|
1207
|
+
* toValue({ value: 2 }); // 2
|
|
1208
|
+
* toValue({ get() { return 3; } }); // 3
|
|
1209
|
+
* toValue('hello'); // 'hello'
|
|
1210
|
+
* ```
|
|
1211
|
+
* @param {any} x
|
|
1212
|
+
* @returns {any}
|
|
1213
|
+
*/
|
|
1214
|
+
export function toValue(x) {
|
|
1215
|
+
const ret = wasm.toValue(addHeapObject(x));
|
|
1216
|
+
return takeObject(ret);
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
/**
|
|
1220
|
+
* @param {any} obj
|
|
1221
|
+
* @returns {any}
|
|
1222
|
+
*/
|
|
1223
|
+
export function unref(obj) {
|
|
1224
|
+
const ret = wasm.unref(addHeapObject(obj));
|
|
1225
|
+
return takeObject(ret);
|
|
1226
|
+
}
|
|
1227
|
+
|
|
1228
|
+
/**
|
|
1229
|
+
* 断开依赖收集地执行回调(不记录对 Signal 的订阅)
|
|
1230
|
+
*
|
|
1231
|
+
* 用途与示例(JavaScript):
|
|
1232
|
+
* - 在同一个副作用中,订阅主依赖 `a`,但临时读取 `b` 并且不希望 `b` 的变化触发该副作用。
|
|
1233
|
+
* - `untrack(fn)` 会在执行 `fn` 时临时关闭依赖收集,`fn` 内部对信号的读取不会把当前副作用订阅到这些信号上。
|
|
1234
|
+
*
|
|
1235
|
+
* ```js
|
|
1236
|
+
* const a = createSignal(0)
|
|
1237
|
+
* const b = createSignal(0)
|
|
1238
|
+
* createEffect(() => {
|
|
1239
|
+
* const av = a.get() // 订阅 a:a 变化会使该副作用重跑
|
|
1240
|
+
* const bv = untrack(() => b.get()) // 断开依赖读取 b:b 变化不会触发该副作用
|
|
1241
|
+
* console.log('[untrack-demo] run av=', av, 'bv=', bv)
|
|
1242
|
+
* })
|
|
1243
|
+
* b.set(1) // 不触发副作用(因为对 b 的读取发生在 untrack 内)
|
|
1244
|
+
* b.set(2) // 不触发副作用
|
|
1245
|
+
* a.set(10) // 触发副作用(因为对 a 进行了正常订阅)
|
|
1246
|
+
* ```
|
|
1247
|
+
*
|
|
1248
|
+
* 说明:若仅需“不订阅地读取”某个信号,也可使用 `peek()`(例如 `const v = sig.peek()`)。
|
|
1249
|
+
* @param {Function} cb
|
|
1250
|
+
* @returns {any}
|
|
1251
|
+
*/
|
|
1252
|
+
export function untrack(cb) {
|
|
1253
|
+
const ret = wasm.untrack(addHeapObject(cb));
|
|
1254
|
+
return takeObject(ret);
|
|
1255
|
+
}
|
|
1256
|
+
|
|
1257
|
+
/**
|
|
1258
|
+
* @param {Function} func
|
|
1259
|
+
* @param {any} deps
|
|
1260
|
+
* @returns {Function}
|
|
1261
|
+
*/
|
|
1262
|
+
export function useCallback(func, deps) {
|
|
1263
|
+
const ret = wasm.useCallback(addHeapObject(func), addHeapObject(deps));
|
|
1264
|
+
return takeObject(ret);
|
|
1265
|
+
}
|
|
1266
|
+
|
|
1267
|
+
/**
|
|
1268
|
+
* @param {Function} effect
|
|
1269
|
+
* @param {any | null} [deps]
|
|
1270
|
+
* @param {any | null} [options]
|
|
1271
|
+
*/
|
|
1272
|
+
export function useEffect(effect, deps, options) {
|
|
1273
|
+
wasm.useEffect(addHeapObject(effect), isLikeNone(deps) ? 0 : addHeapObject(deps), isLikeNone(options) ? 0 : addHeapObject(options));
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
/**
|
|
1277
|
+
* @param {Function} factory
|
|
1278
|
+
* @param {any} deps
|
|
1279
|
+
* @returns {any}
|
|
1280
|
+
*/
|
|
1281
|
+
export function useMemo(factory, deps) {
|
|
1282
|
+
const ret = wasm.useMemo(addHeapObject(factory), addHeapObject(deps));
|
|
1283
|
+
return takeObject(ret);
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
/**
|
|
1287
|
+
* @param {any} initial
|
|
1288
|
+
* @returns {any}
|
|
1289
|
+
*/
|
|
1290
|
+
export function useRef(initial) {
|
|
1291
|
+
const ret = wasm.useRef(addHeapObject(initial));
|
|
1292
|
+
return takeObject(ret);
|
|
1293
|
+
}
|
|
1294
|
+
|
|
1295
|
+
/**
|
|
1296
|
+
* @param {Function} factory
|
|
1297
|
+
* @returns {any}
|
|
1298
|
+
*/
|
|
1299
|
+
export function useSetup(factory) {
|
|
1300
|
+
const ret = wasm.useSetup(addHeapObject(factory));
|
|
1301
|
+
return takeObject(ret);
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
/**
|
|
1305
|
+
* useSignal:等价于 `useState(initial, { kind: 'signal', ...options })`
|
|
1306
|
+
*
|
|
1307
|
+
* 用途:
|
|
1308
|
+
* - 以“底层信号句柄”的形式管理状态,适合需要精细控制 `get/set/update/setPath/peek` 的场景
|
|
1309
|
+
* - 支持 `equals(prev, next)` 自定义等值比较,返回 `true` 表示不触发订阅者
|
|
1310
|
+
*
|
|
1311
|
+
* 示例:
|
|
1312
|
+
* const [sig, setSig] = useSignal({ a: 1 })
|
|
1313
|
+
* console.log(sig.get()) // { a: 1 }
|
|
1314
|
+
* setSig({ a: 2 }) // 触发订阅者
|
|
1315
|
+
* setSig(h => ({ a: h.peek().a + 1 })) // { a: 3 }
|
|
1316
|
+
* sig.setPath('a', 4)
|
|
1317
|
+
* console.log(sig.get()) // { a: 4 }
|
|
1318
|
+
* @param {any} initial
|
|
1319
|
+
* @param {any | null} [options]
|
|
1320
|
+
* @returns {any}
|
|
1321
|
+
*/
|
|
1322
|
+
export function useSignal(initial, options) {
|
|
1323
|
+
const ret = wasm.useSignal(addHeapObject(initial), isLikeNone(options) ? 0 : addHeapObject(options));
|
|
1324
|
+
return takeObject(ret);
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
/**
|
|
1328
|
+
* useState 钩子:统一的轻量状态容器(支持 reactive/ref/signal 三种形态)
|
|
1329
|
+
*
|
|
1330
|
+
* 设计概览:
|
|
1331
|
+
* - 默认形态为 `reactive`:当初始值为对象/数组时直接返回其响应式代理;当为原始类型时自动包裹为 `{ value }` 并返回其代理。
|
|
1332
|
+
* - 可选 `kind`:
|
|
1333
|
+
* - `'reactive'`:对象/数组的响应式代理;原始类型将自动包裹为 `{ value }`
|
|
1334
|
+
* - `'ref'`:总是返回 `{ value }` 的响应式代理,便于统一读写
|
|
1335
|
+
* - `'signal'`:返回底层 `SignalHandle`,适合需要精细控制 get/set/update/path 的场景
|
|
1336
|
+
* - 等值比较:通过 `options.equals(prev, next)` 自定义比较逻辑,返回 `true` 表示值相等,不触发订阅者。
|
|
1337
|
+
*
|
|
1338
|
+
* 使用示例(JavaScript / TypeScript):
|
|
1339
|
+
* // reactive(默认)
|
|
1340
|
+
* const [state, setState] = useState({ user: { name: 'A' }, items: ['x'] })
|
|
1341
|
+
* state.user.name = 'B' // 响应式写入
|
|
1342
|
+
* setState({ user: { name: 'C' }, items: ['y'] }) // 整体替换
|
|
1343
|
+
* setState(prev => ({ ...prev, user: { ...prev.user, name: 'D' } })) // 基于回调更新
|
|
1344
|
+
*
|
|
1345
|
+
* // ref(原始类型亦可统一为 { value })
|
|
1346
|
+
* const [count, setCount] = useState(0, { kind: 'ref' })
|
|
1347
|
+
* console.log(count.value) // 0
|
|
1348
|
+
* setCount(1) // 触发订阅者
|
|
1349
|
+
* setCount(ref => { ref.value += 1 }) // 2
|
|
1350
|
+
*
|
|
1351
|
+
* // signal(底层句柄)
|
|
1352
|
+
* const [sig, setSig] = useState({ a: 1 }, { kind: 'signal' })
|
|
1353
|
+
* console.log(sig.get()) // { a: 1 }
|
|
1354
|
+
* sig.set({ a: 2 }) // 触发订阅者
|
|
1355
|
+
* setSig(handle => ({ a: handle.peek().a + 1 })) // { a: 3 }
|
|
1356
|
+
* sig.setPath('a', 4) // 路径写入
|
|
1357
|
+
* console.log(sig.get()) // { a: 4 }
|
|
1358
|
+
*
|
|
1359
|
+
* // 自定义等值比较(默认使用 shallowEqual)
|
|
1360
|
+
* const [state2, setState2] = useState({ a: 1, b: 2 }, { kind: 'reactive', equals: (prev, next) => prev.a === next.a })
|
|
1361
|
+
* setState2({ a: 1, b: 3 }) // 不触发订阅者,因为 a 未改变
|
|
1362
|
+
* setState2({ a: 2, b: 4 }) // 触发订阅者,因为 a 改变
|
|
1363
|
+
* @param {any} initial
|
|
1364
|
+
* @param {any | null} [options]
|
|
1365
|
+
* @returns {any}
|
|
1366
|
+
*/
|
|
1367
|
+
export function useState(initial, options) {
|
|
1368
|
+
const ret = wasm.useState(addHeapObject(initial), isLikeNone(options) ? 0 : addHeapObject(options));
|
|
1369
|
+
return takeObject(ret);
|
|
1370
|
+
}
|
|
1371
|
+
|
|
1372
|
+
/**
|
|
1373
|
+
* 按 Hook 唯一 id 绑定插槽索引并运行回调
|
|
1374
|
+
* - 行为:在当前实例的 `__hooks.__idMap` 中为 `id` 分配稳定索引,并通过设置 `__forcedIndex` 强制 `withHookSlot` 使用该索引
|
|
1375
|
+
* - 若此前不存在该 id,则使用 `states.length` 作为新索引
|
|
1376
|
+
* - 运行 `runner()`,并在结束后清除 `__forcedIndex`
|
|
1377
|
+
* @param {any} id
|
|
1378
|
+
* @param {Function} runner
|
|
1379
|
+
* @returns {any}
|
|
1380
|
+
*/
|
|
1381
|
+
export function vaporWithHookId(id, runner) {
|
|
1382
|
+
const ret = wasm.vaporWithHookId(addHeapObject(id), addHeapObject(runner));
|
|
1383
|
+
return takeObject(ret);
|
|
1384
|
+
}
|
|
1385
|
+
|
|
1386
|
+
/**
|
|
1387
|
+
* 统一侦听入口:接受函数、信号句柄对象(含 `get` 方法)或来源数组
|
|
1388
|
+
*
|
|
1389
|
+
* 用法(JavaScript):
|
|
1390
|
+
* ```js
|
|
1391
|
+
* // 1) 侦听函数源(等价 watchFn)
|
|
1392
|
+
* const stop1 = watch(() => state.count, (n, o) => { console.log(n, o) }, { immediate: true })
|
|
1393
|
+
*
|
|
1394
|
+
* // 2) 侦听信号句柄对象(含 get 方法)
|
|
1395
|
+
* const s = createSignal(0)
|
|
1396
|
+
* const stop2 = watch(s, (n, o) => { console.log(n, o) })
|
|
1397
|
+
* s.set(1)
|
|
1398
|
+
*
|
|
1399
|
+
* // 3) 侦听来源数组:函数 / 信号句柄 / 常量混合
|
|
1400
|
+
* const s1 = createSignal(0)
|
|
1401
|
+
* const s2 = createSignal(10)
|
|
1402
|
+
* const stop3 = watch([() => s1.get(), s2, 'x'], ([n1, n2, c], [o1, o2, oc]) => { console.log(n1, n2, c, o1, o2, oc) })
|
|
1403
|
+
* s1.set(1); s2.set(11)
|
|
1404
|
+
*
|
|
1405
|
+
* // 自定义比较:覆盖默认逐项浅比较
|
|
1406
|
+
* watch([s1, s2], (n, o) => {}, { equals: (prev, next) => _.isEqual(prev, next) })
|
|
1407
|
+
* ```
|
|
1408
|
+
* @param {any} source
|
|
1409
|
+
* @param {Function} handler
|
|
1410
|
+
* @param {any | null} [options_raw]
|
|
1411
|
+
* @returns {EffectHandle}
|
|
1412
|
+
*/
|
|
1413
|
+
export function watch(source, handler, options_raw) {
|
|
1414
|
+
const ret = wasm.watch(addHeapObject(source), addHeapObject(handler), isLikeNone(options_raw) ? 0 : addHeapObject(options_raw));
|
|
1415
|
+
return EffectHandle.__wrap(ret);
|
|
1416
|
+
}
|
|
1417
|
+
|
|
1418
|
+
/**
|
|
1419
|
+
* 深度侦听:当对象/数组任意子项变化时触发
|
|
1420
|
+
*
|
|
1421
|
+
* 用法(JavaScript):
|
|
1422
|
+
* ```js
|
|
1423
|
+
* const s = createSignal({ user: { name: 'A' }, items: ['x'] })
|
|
1424
|
+
* const stop = watchDeepSignal(s, (newv, oldv) => {
|
|
1425
|
+
* console.log('deep changed', oldv, '->', newv)
|
|
1426
|
+
* }, { immediate: true })
|
|
1427
|
+
* s.setPath(['user','name'], 'B')
|
|
1428
|
+
* s.setPath(['items', 0], 'y')
|
|
1429
|
+
* stop.dispose() // 取消侦听
|
|
1430
|
+
* ```
|
|
1431
|
+
* @param {SignalHandle} src
|
|
1432
|
+
* @param {Function} handler
|
|
1433
|
+
* @param {any | null} [options]
|
|
1434
|
+
* @returns {EffectHandle}
|
|
1435
|
+
*/
|
|
1436
|
+
export function watchDeepSignal(src, handler, options) {
|
|
1437
|
+
_assertClass(src, SignalHandle);
|
|
1438
|
+
const ret = wasm.watchDeepSignal(src.__wbg_ptr, addHeapObject(handler), isLikeNone(options) ? 0 : addHeapObject(options));
|
|
1439
|
+
return EffectHandle.__wrap(ret);
|
|
1440
|
+
}
|
|
1441
|
+
|
|
1442
|
+
/**
|
|
1443
|
+
* 侦听副作用:在副作用体内自行读取信号,依赖会自动收集
|
|
1444
|
+
* 类似 Vue 的 `watchEffect`
|
|
1445
|
+
* 示例(JavaScript):
|
|
1446
|
+
* ```javascript
|
|
1447
|
+
* const { createSignal, watchEffect } = wasmModule;
|
|
1448
|
+
* const s = createSignal(0);
|
|
1449
|
+
* watchEffect(() => {
|
|
1450
|
+
* console.log('value:', s.get());
|
|
1451
|
+
* }, {
|
|
1452
|
+
* //可选 scheduler
|
|
1453
|
+
* });
|
|
1454
|
+
* s.set(1);
|
|
1455
|
+
* ```
|
|
1456
|
+
* @param {Function} cb
|
|
1457
|
+
* @param {any | null} [options]
|
|
1458
|
+
* @returns {EffectHandle}
|
|
1459
|
+
*/
|
|
1460
|
+
export function watchEffect(cb, options) {
|
|
1461
|
+
const ret = wasm.watchEffect(addHeapObject(cb), isLikeNone(options) ? 0 : addHeapObject(options));
|
|
1462
|
+
return EffectHandle.__wrap(ret);
|
|
1463
|
+
}
|
|
1464
|
+
|
|
1465
|
+
/**
|
|
1466
|
+
* 侦听任意 getter 函数的结果变化
|
|
1467
|
+
* options: { immediate?: bool, scheduler?: Function, equals?: Function }
|
|
1468
|
+
* 示例(JavaScript):
|
|
1469
|
+
* ```javascript
|
|
1470
|
+
* const { watchFn } = wasmModule;
|
|
1471
|
+
* const obj = { value: 0 };
|
|
1472
|
+
* const stop = watchFn(
|
|
1473
|
+
* () => obj.value,
|
|
1474
|
+
* (newv, oldv) => console.log('changed:', oldv, '->', newv),
|
|
1475
|
+
* { immediate: true }
|
|
1476
|
+
* );
|
|
1477
|
+
* obj.value = 1; // 当 getter 读取到新值时触发 handler
|
|
1478
|
+
* ```
|
|
1479
|
+
* @param {Function} getter
|
|
1480
|
+
* @param {Function} handler
|
|
1481
|
+
* @param {any | null} [options]
|
|
1482
|
+
* @returns {EffectHandle}
|
|
1483
|
+
*/
|
|
1484
|
+
export function watchFn(getter, handler, options) {
|
|
1485
|
+
const ret = wasm.watchFn(addHeapObject(getter), addHeapObject(handler), isLikeNone(options) ? 0 : addHeapObject(options));
|
|
1486
|
+
return EffectHandle.__wrap(ret);
|
|
1487
|
+
}
|
|
1488
|
+
|
|
1489
|
+
/**
|
|
1490
|
+
* 侦听指定路径的值变化:`path` 支持 JS 数组或以 `.` 分隔的字符串
|
|
1491
|
+
*
|
|
1492
|
+
* 用法(JavaScript):
|
|
1493
|
+
* ```js
|
|
1494
|
+
* const s = createSignal({ user: { profile: { name: 'A' } } })
|
|
1495
|
+
* // 数组路径
|
|
1496
|
+
* watchPath(s, ['user','profile','name'], (n, o) => {
|
|
1497
|
+
* console.log('name changed:', o, '->', n)
|
|
1498
|
+
* }, { immediate: true })
|
|
1499
|
+
* // 字符串路径(数字段会自动转为数组索引)
|
|
1500
|
+
* watchPath(s, 'user.profile.name', (n, o) => {
|
|
1501
|
+
* console.log('name changed:', o, '->', n)
|
|
1502
|
+
* }, { immediate: true })
|
|
1503
|
+
* s.setPath(['user','profile','name'], 'B')
|
|
1504
|
+
* s.setPath('user.profile.name', 'B')
|
|
1505
|
+
* ```
|
|
1506
|
+
* @param {SignalHandle} src
|
|
1507
|
+
* @param {any} path
|
|
1508
|
+
* @param {Function} handler
|
|
1509
|
+
* @param {any | null} [options]
|
|
1510
|
+
* @returns {EffectHandle}
|
|
1511
|
+
*/
|
|
1512
|
+
export function watchPath(src, path, handler, options) {
|
|
1513
|
+
_assertClass(src, SignalHandle);
|
|
1514
|
+
const ret = wasm.watchPath(src.__wbg_ptr, addHeapObject(path), addHeapObject(handler), isLikeNone(options) ? 0 : addHeapObject(options));
|
|
1515
|
+
return EffectHandle.__wrap(ret);
|
|
1516
|
+
}
|
|
1517
|
+
|
|
1518
|
+
/**
|
|
1519
|
+
* 侦听单个信号的变化并在变化时触发处理器
|
|
1520
|
+
* options: { immediate?: bool, scheduler?: Function, equals?: Function }
|
|
1521
|
+
* 示例(JavaScript):
|
|
1522
|
+
* ```javascript
|
|
1523
|
+
* const { createSignal, watchSignal } = wasmModule;
|
|
1524
|
+
* const s = createSignal(0);
|
|
1525
|
+
* watchSignal(s, (newv, oldv) => {
|
|
1526
|
+
* console.log('signal changed:', oldv, '->', newv);
|
|
1527
|
+
* }, { immediate: true });
|
|
1528
|
+
* s.set(1);
|
|
1529
|
+
* ```
|
|
1530
|
+
* @param {SignalHandle} src
|
|
1531
|
+
* @param {Function} handler
|
|
1532
|
+
* @param {any | null} [options]
|
|
1533
|
+
* @returns {EffectHandle}
|
|
1534
|
+
*/
|
|
1535
|
+
export function watchSignal(src, handler, options) {
|
|
1536
|
+
_assertClass(src, SignalHandle);
|
|
1537
|
+
const ret = wasm.watchSignal(src.__wbg_ptr, addHeapObject(handler), isLikeNone(options) ? 0 : addHeapObject(options));
|
|
1538
|
+
return EffectHandle.__wrap(ret);
|
|
1539
|
+
}
|
|
1540
|
+
|
|
1541
|
+
/**
|
|
1542
|
+
* 在当前实例上为 Hook 分配/复用一个插槽
|
|
1543
|
+
* - 若无当前实例,则直接执行 factory 返回对象
|
|
1544
|
+
* - 有实例时,依据 `__hooks.index` 或 `__forcedIndex` 计算插槽序号
|
|
1545
|
+
* 示例(JavaScript):
|
|
1546
|
+
* ```javascript
|
|
1547
|
+
* const { setCurrentInstance, withHookSlot } = wasmModule;
|
|
1548
|
+
* setCurrentInstance({});
|
|
1549
|
+
* const a = withHookSlot(() => ({ id: 1 }));
|
|
1550
|
+
* const b = withHookSlot(() => ({ id: 2 }));
|
|
1551
|
+
* // 若再次调用 withHookSlot(且未强制索引),将分配下一个插槽
|
|
1552
|
+
* ```
|
|
1553
|
+
* @param {Function} factory
|
|
1554
|
+
* @returns {any}
|
|
1555
|
+
*/
|
|
1556
|
+
export function withHookSlot(factory) {
|
|
1557
|
+
const ret = wasm.withHookSlot(addHeapObject(factory));
|
|
1558
|
+
return takeObject(ret);
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1561
|
+
export function __wbg___wbindgen_boolean_get_dea25b33882b895b(arg0) {
|
|
1562
|
+
const v = getObject(arg0);
|
|
1563
|
+
const ret = typeof(v) === 'boolean' ? v : undefined;
|
|
1564
|
+
return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;
|
|
1565
|
+
};
|
|
1566
|
+
|
|
1567
|
+
export function __wbg___wbindgen_debug_string_adfb662ae34724b6(arg0, arg1) {
|
|
1568
|
+
const ret = debugString(getObject(arg1));
|
|
1569
|
+
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
1570
|
+
const len1 = WASM_VECTOR_LEN;
|
|
1571
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
|
1572
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
1573
|
+
};
|
|
1574
|
+
|
|
1575
|
+
export function __wbg___wbindgen_is_function_8d400b8b1af978cd(arg0) {
|
|
1576
|
+
const ret = typeof(getObject(arg0)) === 'function';
|
|
1577
|
+
return ret;
|
|
1578
|
+
};
|
|
1579
|
+
|
|
1580
|
+
export function __wbg___wbindgen_is_null_dfda7d66506c95b5(arg0) {
|
|
1581
|
+
const ret = getObject(arg0) === null;
|
|
1582
|
+
return ret;
|
|
1583
|
+
};
|
|
1584
|
+
|
|
1585
|
+
export function __wbg___wbindgen_is_object_ce774f3490692386(arg0) {
|
|
1586
|
+
const val = getObject(arg0);
|
|
1587
|
+
const ret = typeof(val) === 'object' && val !== null;
|
|
1588
|
+
return ret;
|
|
1589
|
+
};
|
|
1590
|
+
|
|
1591
|
+
export function __wbg___wbindgen_is_string_704ef9c8fc131030(arg0) {
|
|
1592
|
+
const ret = typeof(getObject(arg0)) === 'string';
|
|
1593
|
+
return ret;
|
|
1594
|
+
};
|
|
1595
|
+
|
|
1596
|
+
export function __wbg___wbindgen_is_undefined_f6b95eab589e0269(arg0) {
|
|
1597
|
+
const ret = getObject(arg0) === undefined;
|
|
1598
|
+
return ret;
|
|
1599
|
+
};
|
|
1600
|
+
|
|
1601
|
+
export function __wbg___wbindgen_jsval_eq_b6101cc9cef1fe36(arg0, arg1) {
|
|
1602
|
+
const ret = getObject(arg0) === getObject(arg1);
|
|
1603
|
+
return ret;
|
|
1604
|
+
};
|
|
1605
|
+
|
|
1606
|
+
export function __wbg___wbindgen_number_get_9619185a74197f95(arg0, arg1) {
|
|
1607
|
+
const obj = getObject(arg1);
|
|
1608
|
+
const ret = typeof(obj) === 'number' ? obj : undefined;
|
|
1609
|
+
getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);
|
|
1610
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
|
|
1611
|
+
};
|
|
1612
|
+
|
|
1613
|
+
export function __wbg___wbindgen_rethrow_78714972834ecdf1(arg0) {
|
|
1614
|
+
throw takeObject(arg0);
|
|
1615
|
+
};
|
|
1616
|
+
|
|
1617
|
+
export function __wbg___wbindgen_string_get_a2a31e16edf96e42(arg0, arg1) {
|
|
1618
|
+
const obj = getObject(arg1);
|
|
1619
|
+
const ret = typeof(obj) === 'string' ? obj : undefined;
|
|
1620
|
+
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
1621
|
+
var len1 = WASM_VECTOR_LEN;
|
|
1622
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
|
1623
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
1624
|
+
};
|
|
1625
|
+
|
|
1626
|
+
export function __wbg___wbindgen_throw_dd24417ed36fc46e(arg0, arg1) {
|
|
1627
|
+
throw new Error(getStringFromWasm0(arg0, arg1));
|
|
1628
|
+
};
|
|
1629
|
+
|
|
1630
|
+
export function __wbg__wbg_cb_unref_87dfb5aaa0cbcea7(arg0) {
|
|
1631
|
+
getObject(arg0)._wbg_cb_unref();
|
|
1632
|
+
};
|
|
1633
|
+
|
|
1634
|
+
export function __wbg_apply_52e9ae668d017009() { return handleError(function (arg0, arg1, arg2) {
|
|
1635
|
+
const ret = getObject(arg0).apply(getObject(arg1), getObject(arg2));
|
|
1636
|
+
return addHeapObject(ret);
|
|
1637
|
+
}, arguments) };
|
|
1638
|
+
|
|
1639
|
+
export function __wbg_call_3020136f7a2d6e44() { return handleError(function (arg0, arg1, arg2) {
|
|
1640
|
+
const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));
|
|
1641
|
+
return addHeapObject(ret);
|
|
1642
|
+
}, arguments) };
|
|
1643
|
+
|
|
1644
|
+
export function __wbg_call_78f94eb02ec7f9b2() { return handleError(function (arg0, arg1, arg2, arg3, arg4) {
|
|
1645
|
+
const ret = getObject(arg0).call(getObject(arg1), getObject(arg2), getObject(arg3), getObject(arg4));
|
|
1646
|
+
return addHeapObject(ret);
|
|
1647
|
+
}, arguments) };
|
|
1648
|
+
|
|
1649
|
+
export function __wbg_call_abb4ff46ce38be40() { return handleError(function (arg0, arg1) {
|
|
1650
|
+
const ret = getObject(arg0).call(getObject(arg1));
|
|
1651
|
+
return addHeapObject(ret);
|
|
1652
|
+
}, arguments) };
|
|
1653
|
+
|
|
1654
|
+
export function __wbg_call_c8baa5c5e72d274e() { return handleError(function (arg0, arg1, arg2, arg3) {
|
|
1655
|
+
const ret = getObject(arg0).call(getObject(arg1), getObject(arg2), getObject(arg3));
|
|
1656
|
+
return addHeapObject(ret);
|
|
1657
|
+
}, arguments) };
|
|
1658
|
+
|
|
1659
|
+
export function __wbg_catch_b9db41d97d42bd02(arg0, arg1) {
|
|
1660
|
+
const ret = getObject(arg0).catch(getObject(arg1));
|
|
1661
|
+
return addHeapObject(ret);
|
|
1662
|
+
};
|
|
1663
|
+
|
|
1664
|
+
export function __wbg_defineProperty_c4fadd16974ffa92(arg0, arg1, arg2) {
|
|
1665
|
+
const ret = Object.defineProperty(getObject(arg0), getObject(arg1), getObject(arg2));
|
|
1666
|
+
return addHeapObject(ret);
|
|
1667
|
+
};
|
|
1668
|
+
|
|
1669
|
+
export function __wbg_deleteProperty_da180bf2624d16d6() { return handleError(function (arg0, arg1) {
|
|
1670
|
+
const ret = Reflect.deleteProperty(getObject(arg0), getObject(arg1));
|
|
1671
|
+
return ret;
|
|
1672
|
+
}, arguments) };
|
|
1673
|
+
|
|
1674
|
+
export function __wbg_from_29a8414a7a7cd19d(arg0) {
|
|
1675
|
+
const ret = Array.from(getObject(arg0));
|
|
1676
|
+
return addHeapObject(ret);
|
|
1677
|
+
};
|
|
1678
|
+
|
|
1679
|
+
export function __wbg_getOwnPropertyDescriptor_b6aa5a2fa50d52c7(arg0, arg1) {
|
|
1680
|
+
const ret = Object.getOwnPropertyDescriptor(getObject(arg0), getObject(arg1));
|
|
1681
|
+
return addHeapObject(ret);
|
|
1682
|
+
};
|
|
1683
|
+
|
|
1684
|
+
export function __wbg_get_6b7bd52aca3f9671(arg0, arg1) {
|
|
1685
|
+
const ret = getObject(arg0)[arg1 >>> 0];
|
|
1686
|
+
return addHeapObject(ret);
|
|
1687
|
+
};
|
|
1688
|
+
|
|
1689
|
+
export function __wbg_get_af9dab7e9603ea93() { return handleError(function (arg0, arg1) {
|
|
1690
|
+
const ret = Reflect.get(getObject(arg0), getObject(arg1));
|
|
1691
|
+
return addHeapObject(ret);
|
|
1692
|
+
}, arguments) };
|
|
1693
|
+
|
|
1694
|
+
export function __wbg_get_cbf36dc54869cf03(arg0, arg1) {
|
|
1695
|
+
const ret = getObject(arg0).get(getObject(arg1));
|
|
1696
|
+
return addHeapObject(ret);
|
|
1697
|
+
};
|
|
1698
|
+
|
|
1699
|
+
export function __wbg_has_0e670569d65d3a45() { return handleError(function (arg0, arg1) {
|
|
1700
|
+
const ret = Reflect.has(getObject(arg0), getObject(arg1));
|
|
1701
|
+
return ret;
|
|
1702
|
+
}, arguments) };
|
|
1703
|
+
|
|
1704
|
+
export function __wbg_instanceof_Promise_eca6c43a2610558d(arg0) {
|
|
1705
|
+
let result;
|
|
1706
|
+
try {
|
|
1707
|
+
result = getObject(arg0) instanceof Promise;
|
|
1708
|
+
} catch (_) {
|
|
1709
|
+
result = false;
|
|
1710
|
+
}
|
|
1711
|
+
const ret = result;
|
|
1712
|
+
return ret;
|
|
1713
|
+
};
|
|
1714
|
+
|
|
1715
|
+
export function __wbg_isArray_51fd9e6422c0a395(arg0) {
|
|
1716
|
+
const ret = Array.isArray(getObject(arg0));
|
|
1717
|
+
return ret;
|
|
1718
|
+
};
|
|
1719
|
+
|
|
1720
|
+
export function __wbg_is_928aa29d71e75457(arg0, arg1) {
|
|
1721
|
+
const ret = Object.is(getObject(arg0), getObject(arg1));
|
|
1722
|
+
return ret;
|
|
1723
|
+
};
|
|
1724
|
+
|
|
1725
|
+
export function __wbg_keys_f5c6002ff150fc6c(arg0) {
|
|
1726
|
+
const ret = Object.keys(getObject(arg0));
|
|
1727
|
+
return addHeapObject(ret);
|
|
1728
|
+
};
|
|
1729
|
+
|
|
1730
|
+
export function __wbg_length_d45040a40c570362(arg0) {
|
|
1731
|
+
const ret = getObject(arg0).length;
|
|
1732
|
+
return ret;
|
|
1733
|
+
};
|
|
1734
|
+
|
|
1735
|
+
export function __wbg_new_0_23cedd11d9b40c9d() {
|
|
1736
|
+
const ret = new Date();
|
|
1737
|
+
return addHeapObject(ret);
|
|
1738
|
+
};
|
|
1739
|
+
|
|
1740
|
+
export function __wbg_new_1ba21ce319a06297() {
|
|
1741
|
+
const ret = new Object();
|
|
1742
|
+
return addHeapObject(ret);
|
|
1743
|
+
};
|
|
1744
|
+
|
|
1745
|
+
export function __wbg_new_25f239778d6112b9() {
|
|
1746
|
+
const ret = new Array();
|
|
1747
|
+
return addHeapObject(ret);
|
|
1748
|
+
};
|
|
1749
|
+
|
|
1750
|
+
export function __wbg_new_b546ae120718850e() {
|
|
1751
|
+
const ret = new Map();
|
|
1752
|
+
return addHeapObject(ret);
|
|
1753
|
+
};
|
|
1754
|
+
|
|
1755
|
+
export function __wbg_new_df1173567d5ff028(arg0, arg1) {
|
|
1756
|
+
const ret = new Error(getStringFromWasm0(arg0, arg1));
|
|
1757
|
+
return addHeapObject(ret);
|
|
1758
|
+
};
|
|
1759
|
+
|
|
1760
|
+
export function __wbg_new_no_args_cb138f77cf6151ee(arg0, arg1) {
|
|
1761
|
+
const ret = new Function(getStringFromWasm0(arg0, arg1));
|
|
1762
|
+
return addHeapObject(ret);
|
|
1763
|
+
};
|
|
1764
|
+
|
|
1765
|
+
export function __wbg_new_with_args_df9e7125ffe55248(arg0, arg1, arg2, arg3) {
|
|
1766
|
+
const ret = new Function(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
|
|
1767
|
+
return addHeapObject(ret);
|
|
1768
|
+
};
|
|
1769
|
+
|
|
1770
|
+
export function __wbg_ownKeys_f06fcde184cdc8e0() { return handleError(function (arg0) {
|
|
1771
|
+
const ret = Reflect.ownKeys(getObject(arg0));
|
|
1772
|
+
return addHeapObject(ret);
|
|
1773
|
+
}, arguments) };
|
|
1774
|
+
|
|
1775
|
+
export function __wbg_push_7d9be8f38fc13975(arg0, arg1) {
|
|
1776
|
+
const ret = getObject(arg0).push(getObject(arg1));
|
|
1777
|
+
return ret;
|
|
1778
|
+
};
|
|
1779
|
+
|
|
1780
|
+
export function __wbg_resolve_fd5bfbaa4ce36e1e(arg0) {
|
|
1781
|
+
const ret = Promise.resolve(getObject(arg0));
|
|
1782
|
+
return addHeapObject(ret);
|
|
1783
|
+
};
|
|
1784
|
+
|
|
1785
|
+
export function __wbg_set_781438a03c0c3c81() { return handleError(function (arg0, arg1, arg2) {
|
|
1786
|
+
const ret = Reflect.set(getObject(arg0), getObject(arg1), getObject(arg2));
|
|
1787
|
+
return ret;
|
|
1788
|
+
}, arguments) };
|
|
1789
|
+
|
|
1790
|
+
export function __wbg_set_7df433eea03a5c14(arg0, arg1, arg2) {
|
|
1791
|
+
getObject(arg0)[arg1 >>> 0] = takeObject(arg2);
|
|
1792
|
+
};
|
|
1793
|
+
|
|
1794
|
+
export function __wbg_set_efaaf145b9377369(arg0, arg1, arg2) {
|
|
1795
|
+
const ret = getObject(arg0).set(getObject(arg1), getObject(arg2));
|
|
1796
|
+
return addHeapObject(ret);
|
|
1797
|
+
};
|
|
1798
|
+
|
|
1799
|
+
export function __wbg_set_length_a5425f40fdfb1bb5(arg0, arg1) {
|
|
1800
|
+
getObject(arg0).length = arg1 >>> 0;
|
|
1801
|
+
};
|
|
1802
|
+
|
|
1803
|
+
export function __wbg_signalhandle_new(arg0) {
|
|
1804
|
+
const ret = SignalHandle.__wrap(arg0);
|
|
1805
|
+
return addHeapObject(ret);
|
|
1806
|
+
};
|
|
1807
|
+
|
|
1808
|
+
export function __wbg_static_accessor_GLOBAL_769e6b65d6557335() {
|
|
1809
|
+
const ret = typeof global === 'undefined' ? null : global;
|
|
1810
|
+
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
|
1811
|
+
};
|
|
1812
|
+
|
|
1813
|
+
export function __wbg_static_accessor_GLOBAL_THIS_60cf02db4de8e1c1() {
|
|
1814
|
+
const ret = typeof globalThis === 'undefined' ? null : globalThis;
|
|
1815
|
+
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
|
1816
|
+
};
|
|
1817
|
+
|
|
1818
|
+
export function __wbg_static_accessor_SELF_08f5a74c69739274() {
|
|
1819
|
+
const ret = typeof self === 'undefined' ? null : self;
|
|
1820
|
+
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
|
1821
|
+
};
|
|
1822
|
+
|
|
1823
|
+
export function __wbg_static_accessor_WINDOW_a8924b26aa92d024() {
|
|
1824
|
+
const ret = typeof window === 'undefined' ? null : window;
|
|
1825
|
+
return isLikeNone(ret) ? 0 : addHeapObject(ret);
|
|
1826
|
+
};
|
|
1827
|
+
|
|
1828
|
+
export function __wbg_stringify_655a6390e1f5eb6b() { return handleError(function (arg0) {
|
|
1829
|
+
const ret = JSON.stringify(getObject(arg0));
|
|
1830
|
+
return addHeapObject(ret);
|
|
1831
|
+
}, arguments) };
|
|
1832
|
+
|
|
1833
|
+
export function __wbg_then_4f95312d68691235(arg0, arg1) {
|
|
1834
|
+
const ret = getObject(arg0).then(getObject(arg1));
|
|
1835
|
+
return addHeapObject(ret);
|
|
1836
|
+
};
|
|
1837
|
+
|
|
1838
|
+
export function __wbg_toISOString_eca15cbe422eeea5(arg0) {
|
|
1839
|
+
const ret = getObject(arg0).toISOString();
|
|
1840
|
+
return addHeapObject(ret);
|
|
1841
|
+
};
|
|
1842
|
+
|
|
1843
|
+
export function __wbindgen_cast_04cabf735c12b7a5(arg0, arg1) {
|
|
1844
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 1, function: Function { arguments: [Externref, Externref, Externref, Externref], shim_idx: 9, ret: Externref, inner_ret: Some(Externref) }, mutable: true }) -> Externref`.
|
|
1845
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_63, __wasm_bindgen_func_elem_184);
|
|
1846
|
+
return addHeapObject(ret);
|
|
1847
|
+
};
|
|
1848
|
+
|
|
1849
|
+
export function __wbindgen_cast_2241b6af4c4b2941(arg0, arg1) {
|
|
1850
|
+
// Cast intrinsic for `Ref(String) -> Externref`.
|
|
1851
|
+
const ret = getStringFromWasm0(arg0, arg1);
|
|
1852
|
+
return addHeapObject(ret);
|
|
1853
|
+
};
|
|
1854
|
+
|
|
1855
|
+
export function __wbindgen_cast_32bc49bfb4050e32(arg0, arg1) {
|
|
1856
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 1, function: Function { arguments: [Externref], shim_idx: 2, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1857
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_63, __wasm_bindgen_func_elem_179);
|
|
1858
|
+
return addHeapObject(ret);
|
|
1859
|
+
};
|
|
1860
|
+
|
|
1861
|
+
export function __wbindgen_cast_3ad2e43c28aac9a2(arg0, arg1) {
|
|
1862
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 1, function: Function { arguments: [Externref, Externref], shim_idx: 3, ret: Boolean, inner_ret: Some(Boolean) }, mutable: true }) -> Externref`.
|
|
1863
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_63, __wasm_bindgen_func_elem_182);
|
|
1864
|
+
return addHeapObject(ret);
|
|
1865
|
+
};
|
|
1866
|
+
|
|
1867
|
+
export function __wbindgen_cast_3e0f7cd5ff36de98(arg0, arg1) {
|
|
1868
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 5, function: Function { arguments: [], shim_idx: 6, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1869
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_71, __wasm_bindgen_func_elem_178);
|
|
1870
|
+
return addHeapObject(ret);
|
|
1871
|
+
};
|
|
1872
|
+
|
|
1873
|
+
export function __wbindgen_cast_5b3a20861c90b46d(arg0, arg1) {
|
|
1874
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 1, function: Function { arguments: [Externref, Externref], shim_idx: 179, ret: Unit, inner_ret: Some(Unit) }, mutable: true }) -> Externref`.
|
|
1875
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_63, __wasm_bindgen_func_elem_1099);
|
|
1876
|
+
return addHeapObject(ret);
|
|
1877
|
+
};
|
|
1878
|
+
|
|
1879
|
+
export function __wbindgen_cast_6cbf5a2ede8f72df(arg0, arg1) {
|
|
1880
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 1, function: Function { arguments: [], shim_idx: 4, ret: Externref, inner_ret: Some(Externref) }, mutable: true }) -> Externref`.
|
|
1881
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_63, __wasm_bindgen_func_elem_177);
|
|
1882
|
+
return addHeapObject(ret);
|
|
1883
|
+
};
|
|
1884
|
+
|
|
1885
|
+
export function __wbindgen_cast_8c2759bbf891ca0f(arg0, arg1) {
|
|
1886
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 1, function: Function { arguments: [Externref], shim_idx: 8, ret: Externref, inner_ret: Some(Externref) }, mutable: true }) -> Externref`.
|
|
1887
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_63, __wasm_bindgen_func_elem_180);
|
|
1888
|
+
return addHeapObject(ret);
|
|
1889
|
+
};
|
|
1890
|
+
|
|
1891
|
+
export function __wbindgen_cast_bd8c2fef27b60e6e(arg0, arg1) {
|
|
1892
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 1, function: Function { arguments: [Externref, Externref, Externref], shim_idx: 10, ret: Externref, inner_ret: Some(Externref) }, mutable: true }) -> Externref`.
|
|
1893
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_63, __wasm_bindgen_func_elem_183);
|
|
1894
|
+
return addHeapObject(ret);
|
|
1895
|
+
};
|
|
1896
|
+
|
|
1897
|
+
export function __wbindgen_cast_d4089fe2ead6559a(arg0, arg1) {
|
|
1898
|
+
// Cast intrinsic for `Closure(Closure { dtor_idx: 1, function: Function { arguments: [Externref, Externref], shim_idx: 7, ret: Externref, inner_ret: Some(Externref) }, mutable: true }) -> Externref`.
|
|
1899
|
+
const ret = makeMutClosure(arg0, arg1, wasm.__wasm_bindgen_func_elem_63, __wasm_bindgen_func_elem_181);
|
|
1900
|
+
return addHeapObject(ret);
|
|
1901
|
+
};
|
|
1902
|
+
|
|
1903
|
+
export function __wbindgen_cast_d6cd19b81560fd6e(arg0) {
|
|
1904
|
+
// Cast intrinsic for `F64 -> Externref`.
|
|
1905
|
+
const ret = arg0;
|
|
1906
|
+
return addHeapObject(ret);
|
|
1907
|
+
};
|
|
1908
|
+
|
|
1909
|
+
export function __wbindgen_object_clone_ref(arg0) {
|
|
1910
|
+
const ret = getObject(arg0);
|
|
1911
|
+
return addHeapObject(ret);
|
|
1912
|
+
};
|
|
1913
|
+
|
|
1914
|
+
export function __wbindgen_object_drop_ref(arg0) {
|
|
1915
|
+
takeObject(arg0);
|
|
1916
|
+
};
|
|
1917
|
+
|
|
1918
|
+
export function __wbindgen_object_is_undefined(arg0) {
|
|
1919
|
+
const ret = getObject(arg0) === undefined;
|
|
1920
|
+
return ret;
|
|
1921
|
+
};
|