@thi.ng/wasm-api 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Change Log
2
2
 
3
- - **Last updated**: 2022-08-01T14:53:59Z
3
+ - **Last updated**: 2022-08-01T22:09:32Z
4
4
  - **Generator**: [thi.ng/monopub](https://thi.ng/monopub)
5
5
 
6
6
  All notable changes to this project will be documented in this file.
@@ -9,6 +9,17 @@ See [Conventional Commits](https://conventionalcommits.org/) for commit guidelin
9
9
  **Note:** Unlisted _patch_ versions only involve non-code or otherwise excluded changes
10
10
  and/or version bumps of transitive dependencies.
11
11
 
12
+ ## [0.2.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/wasm-api@0.2.0) (2022-08-01)
13
+
14
+ #### 🚀 Features
15
+
16
+ - major update ObjectIndex ([4547f1f](https://github.com/thi-ng/umbrella/commit/4547f1f))
17
+ - add ObjectIndexOpts ctor options
18
+ - add IDGen for internal ID generation/recycling
19
+ - add iterators
20
+ - rename existing methods
21
+ - fix zig slice pointer handling, use named child modules ([bd7905a](https://github.com/thi-ng/umbrella/commit/bd7905a))
22
+
12
23
  ## [0.1.0](https://github.com/thi-ng/umbrella/tree/@thi.ng/wasm-api@0.1.0) (2022-08-01)
13
24
 
14
25
  #### 🚀 Features
package/README.md CHANGED
@@ -10,6 +10,8 @@ This project is part of the
10
10
  [@thi.ng/umbrella](https://github.com/thi-ng/umbrella/) monorepo.
11
11
 
12
12
  - [About](#about)
13
+ - [Custom API modules](#custom-api-modules)
14
+ - [Object indices & handles](#object-indices--handles)
13
15
  - [Status](#status)
14
16
  - [Installation](#installation)
15
17
  - [Dependencies](#dependencies)
@@ -31,6 +33,124 @@ manipulation, WebGL, WebGPU, WebAudio etc.
31
33
  In general, all languages with a WebAssembly target are supported, however
32
34
  currently only bindings for [Zig](https://ziglang.org) are included.
33
35
 
36
+ ### Custom API modules
37
+
38
+ On the JS side, custom API modules can be easily integrated via the [`IWasmAPI`
39
+ interface](https://docs.thi.ng/umbrella/wasm-api/interfaces/IWasmAPI.html). The
40
+ following example provides a brief overview:
41
+
42
+ ```ts
43
+ import { IWasmAPI, WasmBridge } from "@thi.ng/wasm-api";
44
+
45
+ export class CustomAPI implements IWasmAPI {
46
+ parent!: WasmBridge;
47
+
48
+ async init(parent: WasmBridge) {
49
+ this.parent = parent;
50
+ this.parent.logger.debug("initializing custom API");
51
+
52
+ // any other tasks you might need to do...
53
+
54
+ return true;
55
+ }
56
+
57
+ /**
58
+ * Returns object of functions to import as externals into
59
+ * the WASM module. These imports are merged with the bridge's
60
+ * core API and hence should use naming prefixes...
61
+ */
62
+ getImports(): WebAssembly.Imports {
63
+ return {
64
+ /**
65
+ * Writes 2 random float32 numbers to given address
66
+ */
67
+ custom_randomVec2: (addr: number) => {
68
+ this.parent.f32.set(
69
+ [Math.random(), Math.random()],
70
+ addr >> 2
71
+ );
72
+ }
73
+ };
74
+ }
75
+ }
76
+ ```
77
+
78
+ Now we can supply this custom API when creating the main WASM bridge:
79
+
80
+ ```ts
81
+ export const bridge = new WasmBridge({ custom: new CustomAPI() });
82
+ ```
83
+
84
+ In Zig (or any other language of your choice) we can then utilize this custom
85
+ API like so (also see example further below in this readme):
86
+
87
+ ```zig
88
+ const js = @import("wasmapi");
89
+
90
+ /// JS external to fill vec2 w/ random values
91
+ extern fn custom_randomVec2(addr: usize) void;
92
+
93
+ export fn test_randomVec2() void {
94
+ var foo = [2]f32{ 0, 0 };
95
+
96
+ // print original
97
+ js.printF32Array(foo[0..]);
98
+
99
+ // populate foo with random numbers
100
+ custom_randomVec2(@ptrToInt(&foo));
101
+
102
+ // print result
103
+ js.printF32Array(foo[0..]);
104
+ }
105
+ ```
106
+
107
+ ### Object indices & handles
108
+
109
+ Since only numeric values can be exchanged between the WASM module and the JS
110
+ host, any JS native objects the WASM side might want to be working with must be
111
+ managed in JS. For this purpose the [`ObjectIndex`
112
+ class](https://docs.thi.ng/umbrella/wasm-api/classes/ObjectIndex.html) can be
113
+ used by API modules to handle ID generation (incl. recycling, using
114
+ [@thi.ng/idgen](https://github.com/thi-ng/umbrella/tree/develop/packages/idgen))
115
+ & indexing of different types of JS objects/values. Only the numeric IDs will
116
+ then need to be exchanged with the WASM module...
117
+
118
+ ```ts
119
+ import { ObjectIndex } from "@thi.ng/wasm-api";
120
+
121
+ const canvases = new ObjectIndex<HTMLCanvasElement>({ name: "canvas" });
122
+
123
+ // index item and assign new ID
124
+ canvases.add(document.createElement("canvas"));
125
+ // 0
126
+
127
+ // look up item by ID
128
+ canvases.get(0);
129
+ // <canvas ...>
130
+
131
+ // work w/ retrieved item
132
+ canvases.get(0).id = "foo";
133
+
134
+ // check if item for ID exists (O(1))
135
+ canvases.has(1)
136
+ // false
137
+
138
+ // by default invalid IDs throw error
139
+ canvases.get(1)
140
+ // Uncaught Error: Assertion failed: missing canvas for ID: 2
141
+
142
+ // error can be disabled via 2nd arg
143
+ canvases.get(1, false)
144
+ // undefined
145
+
146
+ // find ID using custom predicate (same failure behavior as .get())
147
+ canvases.find((x) => x.id == "bar")
148
+ // Uncaught Error: Assertion failed: given predicate matched no canvas
149
+
150
+ canvases.delete(0);
151
+ // true
152
+ ```
153
+
34
154
  ### Status
35
155
 
36
156
  **ALPHA** - bleeding edge / work-in-progress
@@ -60,13 +180,14 @@ node --experimental-repl-await
60
180
  > const wasmApi = await import("@thi.ng/wasm-api");
61
181
  ```
62
182
 
63
- Package sizes (gzipped, pre-treeshake): ESM: 1.08 KB
183
+ Package sizes (gzipped, pre-treeshake): ESM: 1.21 KB
64
184
 
65
185
  ## Dependencies
66
186
 
67
187
  - [@thi.ng/api](https://github.com/thi-ng/umbrella/tree/develop/packages/api)
68
188
  - [@thi.ng/errors](https://github.com/thi-ng/umbrella/tree/develop/packages/errors)
69
189
  - [@thi.ng/hex](https://github.com/thi-ng/umbrella/tree/develop/packages/hex)
190
+ - [@thi.ng/idgen](https://github.com/thi-ng/umbrella/tree/develop/packages/idgen)
70
191
  - [@thi.ng/logger](https://github.com/thi-ng/umbrella/tree/develop/packages/logger)
71
192
 
72
193
  ## API
@@ -84,18 +205,23 @@ interface App {
84
205
  }
85
206
 
86
207
  (async () => {
208
+ // new API bridge with defaults
209
+ // (i.e. no child API modules and using console logger)
87
210
  const bridge = new WasmBridge();
211
+
88
212
  // instantiate WASM module using imports provided by the bridge
89
213
  const wasm = await WebAssembly.instantiate(
90
214
  readFileSync("hello.wasm"),
91
215
  bridge.getImports()
92
216
  );
217
+
93
218
  // cast WASM exports to our defined interface
94
219
  const app: App = <any>wasm.instance.exports;
220
+
95
221
  // init bindings & child APIs (if any)
96
222
  await bridge.init(app.memory);
97
223
 
98
- // call WASM function
224
+ // call a WASM function
99
225
  app.start();
100
226
  })();
101
227
  ```
@@ -112,7 +238,8 @@ export fn start() void {
112
238
  }
113
239
  ```
114
240
 
115
- The WASM binary can be built via:
241
+ The WASM binary can be built via (for more complex scenarios add the supplied
242
+ .zig file(s) to your `build.zig` and/or source folder):
116
243
 
117
244
  ```bash
118
245
  # compile WASM binary
@@ -135,12 +262,12 @@ The resulting WASM:
135
262
  (import "env" "_printStr" (func $fimport$0 (param i32 i32)))
136
263
  (global $global$0 (mut i32) (i32.const 65536))
137
264
  (memory $0 2)
138
- (data (i32.const 65536) "hello world!\00\00\00\00\00\00\01\00\0c\00\00\00")
265
+ (data (i32.const 65536) "hello world!\00")
139
266
  (export "memory" (memory $0))
140
267
  (export "start" (func $0))
141
268
  (func $0
142
269
  (call $fimport$0
143
- (i32.const 65552)
270
+ (i32.const 65536)
144
271
  (i32.const 12)
145
272
  )
146
273
  )
package/api.d.ts CHANGED
@@ -32,15 +32,15 @@ export interface CoreAPI {
32
32
  printU32Hex: Fn<number, void>;
33
33
  printF32: Fn<number, void>;
34
34
  printF64: Fn<number, void>;
35
- _printI8Array: (ptr: number, len: number) => void;
36
- _printU8Array: (ptr: number, len: number) => void;
37
- _printI16Array: (ptr: number, len: number) => void;
38
- _printU16Array: (ptr: number, len: number) => void;
39
- _printI32Array: (ptr: number, len: number) => void;
40
- _printU32Array: (ptr: number, len: number) => void;
41
- _printF32Array: (ptr: number, len: number) => void;
42
- _printF64Array: (ptr: number, len: number) => void;
43
- _printStr0: (ptr: number) => void;
44
- _printStr: (ptr: number, len: number) => void;
35
+ _printI8Array: (addr: number, len: number) => void;
36
+ _printU8Array: (addr: number, len: number) => void;
37
+ _printI16Array: (addr: number, len: number) => void;
38
+ _printU16Array: (addr: number, len: number) => void;
39
+ _printI32Array: (addr: number, len: number) => void;
40
+ _printU32Array: (addr: number, len: number) => void;
41
+ _printF32Array: (addr: number, len: number) => void;
42
+ _printF64Array: (addr: number, len: number) => void;
43
+ _printStr0: (addr: number) => void;
44
+ _printStr: (addr: number, len: number) => void;
45
45
  }
46
46
  //# sourceMappingURL=api.d.ts.map
package/bridge.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  import type { ILogger } from "@thi.ng/logger";
2
2
  import type { CoreAPI, IWasmAPI } from "./api.js";
3
3
  export declare class WasmBridge {
4
+ modules: Record<string, IWasmAPI>;
4
5
  logger: ILogger;
5
- protected children: IWasmAPI[];
6
6
  i8: Int8Array;
7
7
  u8: Uint8Array;
8
8
  i16: Int16Array;
@@ -14,7 +14,7 @@ export declare class WasmBridge {
14
14
  utf8Decoder: TextDecoder;
15
15
  utf8Encoder: TextEncoder;
16
16
  core: CoreAPI;
17
- constructor(logger?: ILogger, children?: IWasmAPI[]);
17
+ constructor(modules?: Record<string, IWasmAPI>, logger?: ILogger);
18
18
  init(mem: WebAssembly.Memory): Promise<boolean>;
19
19
  /**
20
20
  * Returns object of all WASM imports declared in the bridge core API and
@@ -33,16 +33,16 @@ export declare class WasmBridge {
33
33
  printU32Hex: import("@thi.ng/api").Fn<number, void>;
34
34
  printF32: import("@thi.ng/api").Fn<number, void>;
35
35
  printF64: import("@thi.ng/api").Fn<number, void>;
36
- _printI8Array: (ptr: number, len: number) => void;
37
- _printU8Array: (ptr: number, len: number) => void;
38
- _printI16Array: (ptr: number, len: number) => void;
39
- _printU16Array: (ptr: number, len: number) => void;
40
- _printI32Array: (ptr: number, len: number) => void;
41
- _printU32Array: (ptr: number, len: number) => void;
42
- _printF32Array: (ptr: number, len: number) => void;
43
- _printF64Array: (ptr: number, len: number) => void;
44
- _printStr0: (ptr: number) => void;
45
- _printStr: (ptr: number, len: number) => void;
36
+ _printI8Array: (addr: number, len: number) => void;
37
+ _printU8Array: (addr: number, len: number) => void;
38
+ _printI16Array: (addr: number, len: number) => void;
39
+ _printU16Array: (addr: number, len: number) => void;
40
+ _printI32Array: (addr: number, len: number) => void;
41
+ _printU32Array: (addr: number, len: number) => void;
42
+ _printF32Array: (addr: number, len: number) => void;
43
+ _printF64Array: (addr: number, len: number) => void;
44
+ _printStr0: (addr: number) => void;
45
+ _printStr: (addr: number, len: number) => void;
46
46
  };
47
47
  };
48
48
  getI8Array(ptr: number, len: number): Int8Array;
@@ -61,8 +61,8 @@ export declare class WasmBridge {
61
61
  derefU32(ptr: number): number;
62
62
  derefF32(ptr: number): number;
63
63
  derefF64(ptr: number): number;
64
- getString(ptr: number, len?: number): string;
65
- getElementById(ptr: number, len?: number): HTMLElement | null;
66
- setString(str: string, ptr: number, maxBytes: number, terminate?: boolean): number;
64
+ getString(addr: number, len?: number): string;
65
+ getElementById(addr: number, len?: number): HTMLElement | null;
66
+ setString(str: string, addr: number, maxBytes: number, terminate?: boolean): number;
67
67
  }
68
68
  //# sourceMappingURL=bridge.d.ts.map
package/bridge.js CHANGED
@@ -2,13 +2,13 @@ import { assert } from "@thi.ng/errors/assert";
2
2
  import { U16, U32, U8 } from "@thi.ng/hex";
3
3
  import { ConsoleLogger } from "@thi.ng/logger/console";
4
4
  export class WasmBridge {
5
- constructor(logger = new ConsoleLogger("wasm"), children = []) {
5
+ constructor(modules = {}, logger = new ConsoleLogger("wasm")) {
6
+ this.modules = modules;
6
7
  this.logger = logger;
7
- this.children = children;
8
8
  this.utf8Decoder = new TextDecoder();
9
9
  this.utf8Encoder = new TextEncoder();
10
10
  const logN = (x) => this.logger.debug(x);
11
- const logA = (method) => (ptr, len) => this.logger.debug(method(ptr, len).join(", "));
11
+ const logA = (method) => (addr, len) => this.logger.debug(method(addr, len).join(", "));
12
12
  this.core = {
13
13
  printI8: logN,
14
14
  printU8: logN,
@@ -29,8 +29,8 @@ export class WasmBridge {
29
29
  _printU32Array: logA(this.getU32Array.bind(this)),
30
30
  _printF32Array: logA(this.getF32Array.bind(this)),
31
31
  _printF64Array: logA(this.getF64Array.bind(this)),
32
- _printStr0: (ptr) => this.logger.debug(this.getString(ptr, 0)),
33
- _printStr: (ptr, len) => this.logger.debug(this.getString(ptr, len)),
32
+ _printStr0: (addr) => this.logger.debug(this.getString(addr, 0)),
33
+ _printStr: (addr, len) => this.logger.debug(this.getString(addr, len)),
34
34
  };
35
35
  }
36
36
  async init(mem) {
@@ -42,8 +42,9 @@ export class WasmBridge {
42
42
  this.u32 = new Uint32Array(mem.buffer);
43
43
  this.f32 = new Float32Array(mem.buffer);
44
44
  this.f64 = new Float64Array(mem.buffer);
45
- for (let child of this.children) {
46
- const status = await child.init(this);
45
+ for (let id in this.modules) {
46
+ this.logger.debug(`initializing API module: ${id}`);
47
+ const status = await this.modules[id].init(this);
47
48
  if (!status)
48
49
  return false;
49
50
  }
@@ -55,8 +56,9 @@ export class WasmBridge {
55
56
  */
56
57
  getImports() {
57
58
  const env = { ...this.core };
58
- for (let child of this.children)
59
- Object.assign(env, child.getImports());
59
+ for (let id in this.modules) {
60
+ Object.assign(env, this.modules[id].getImports());
61
+ }
60
62
  return { env };
61
63
  }
62
64
  getI8Array(ptr, len) {
@@ -113,22 +115,21 @@ export class WasmBridge {
113
115
  derefF64(ptr) {
114
116
  return this.f64[ptr >> 3];
115
117
  }
116
- getString(ptr, len = 0) {
117
- const start = this.u32[ptr >> 2];
118
- return this.utf8Decoder.decode(this.u8.subarray(start, len > 0 ? start + len : this.u8.indexOf(0, start)));
118
+ getString(addr, len = 0) {
119
+ return this.utf8Decoder.decode(this.u8.subarray(addr, len > 0 ? addr + len : this.u8.indexOf(0, addr)));
119
120
  }
120
- getElementById(ptr, len = 0) {
121
- const id = this.getString(ptr, len);
121
+ getElementById(addr, len = 0) {
122
+ const id = this.getString(addr, len);
122
123
  const el = document.getElementById(id);
123
124
  assert(!!el, `missing DOM element #${id}`);
124
125
  return el;
125
126
  }
126
- setString(str, ptr, maxBytes, terminate = true) {
127
- maxBytes = Math.min(maxBytes, this.u8.length - ptr);
128
- const len = this.utf8Encoder.encodeInto(str, this.u8.subarray(ptr, ptr + maxBytes)).written;
129
- assert(len != null && len < maxBytes + (terminate ? 0 : 1), `error writing string to 0x${U32(ptr)}`);
127
+ setString(str, addr, maxBytes, terminate = true) {
128
+ maxBytes = Math.min(maxBytes, this.u8.length - addr);
129
+ const len = this.utf8Encoder.encodeInto(str, this.u8.subarray(addr, addr + maxBytes)).written;
130
+ assert(len != null && len < maxBytes + (terminate ? 0 : 1), `error writing string to 0x${U32(addr)}`);
130
131
  if (terminate) {
131
- this.u8[ptr + len] = 0;
132
+ this.u8[addr + len] = 0;
132
133
  return len + 1;
133
134
  }
134
135
  return len;
package/dev/custom.zig ADDED
@@ -0,0 +1,11 @@
1
+ const js = @import("wasmapi");
2
+
3
+ /// Fill vec2 with random values
4
+ extern fn custom_randomVec2(addr: usize) void;
5
+
6
+ export fn test_random_vec2() void {
7
+ var foo = [2]f32{ 0, 0 };
8
+ js.printF32Array(foo[0..]);
9
+ custom_randomVec2(@ptrToInt(&foo));
10
+ js.printF32Array(foo[0..]);
11
+ }
package/dev/hello.zig CHANGED
@@ -1,6 +1,7 @@
1
- //! Example Zig application
1
+ //! Example Zig application (hello.zig)
2
2
 
3
3
  /// import externals
4
+ /// see build command for configuration
4
5
  const js = @import("wasmapi");
5
6
 
6
7
  export fn start() void {
@@ -0,0 +1,39 @@
1
+ const std = @import("std");
2
+ /// Zig version. When writing code that supports multiple versions of Zig, prefer
3
+ /// feature detection (i.e. with `@hasDecl` or `@hasField`) over version checks.
4
+ pub const zig_version = std.SemanticVersion.parse("0.10.0-dev.3034+6fab6c3e4") catch unreachable;
5
+ pub const zig_backend = std.builtin.CompilerBackend.stage1;
6
+ /// Temporary until self-hosted supports the `cpu.arch` value.
7
+ pub const stage2_arch: std.Target.Cpu.Arch = .wasm32;
8
+
9
+ pub const output_mode = std.builtin.OutputMode.Lib;
10
+ pub const link_mode = std.builtin.LinkMode.Dynamic;
11
+ pub const is_test = false;
12
+ pub const single_threaded = true;
13
+ pub const abi = std.Target.Abi.musl;
14
+ pub const cpu: std.Target.Cpu = .{
15
+ .arch = .wasm32,
16
+ .model = &std.Target.wasm.cpu.generic,
17
+ .features = std.Target.wasm.featureSet(&[_]std.Target.wasm.Feature{
18
+ }),
19
+ };
20
+ pub const os = std.Target.Os{
21
+ .tag = .freestanding,
22
+ .version_range = .{ .none = {} },
23
+ };
24
+ pub const target = std.Target{
25
+ .cpu = cpu,
26
+ .os = os,
27
+ .abi = abi,
28
+ };
29
+ pub const object_format = std.Target.ObjectFormat.wasm;
30
+ pub const mode = std.builtin.Mode.ReleaseSmall;
31
+ pub const link_libc = false;
32
+ pub const link_libcpp = false;
33
+ pub const have_error_return_tracing = false;
34
+ pub const valgrind_support = false;
35
+ pub const sanitize_thread = false;
36
+ pub const position_independent_code = true;
37
+ pub const position_independent_executable = false;
38
+ pub const strip_debug_info = true;
39
+ pub const code_model = std.builtin.CodeModel.default;
package/object-index.d.ts CHANGED
@@ -1,15 +1,70 @@
1
- import type { Predicate } from "@thi.ng/api";
1
+ import type { Predicate, Range1_32 } from "@thi.ng/api";
2
+ import { IDGen } from "@thi.ng/idgen";
2
3
  import type { ILogger } from "@thi.ng/logger";
3
- export declare class ObjectIndex<T> {
4
+ export interface ObjectIndexOpts {
5
+ /**
6
+ * Human-readable name for index (used for logging, if any)
7
+ */
4
8
  name: string;
5
- items: T[];
6
- logger?: ILogger | undefined;
7
- constructor(name: string, items?: T[], logger?: ILogger | undefined);
8
- add(x: T): number;
9
- removeID(id: number): boolean;
10
- getID(id: number): T;
11
- getID(id: number, ensure: true): T;
12
- getID(id: number, ensure: false): T | undefined;
13
- findID(pred: Predicate<T>, ensure?: boolean): number;
9
+ /**
10
+ * Optional logger instance
11
+ */
12
+ logger?: ILogger;
13
+ /**
14
+ * Number of bits for IDs, [1..32] range.
15
+ *
16
+ * @defaultValue 32
17
+ */
18
+ bits?: Range1_32;
19
+ }
20
+ export declare class ObjectIndex<T> {
21
+ readonly name: string;
22
+ logger?: ILogger;
23
+ protected idgen: IDGen;
24
+ protected items: T[];
25
+ constructor(opts: ObjectIndexOpts);
26
+ keys(): Generator<number, void, unknown>;
27
+ values(): Generator<T, void, unknown>;
28
+ /**
29
+ * Indexes given `item` and assigns it to the next available ID (which might
30
+ * be a previously freed ID) and returns it.
31
+ *
32
+ * @param item
33
+ */
34
+ add(item: T): number;
35
+ /**
36
+ * Returns true if the given `id` is valid/active.
37
+ *
38
+ * @param id
39
+ */
40
+ has(id: number): boolean;
41
+ /**
42
+ * First checks if given `id` is valid and if so frees it (for recycling)
43
+ * and deletes its corresponding item. If `ensure` is true (default), throws
44
+ * an error if the ID is invalid (otherwise returns false for invalid IDs).
45
+ *
46
+ * @param id
47
+ * @param ensure
48
+ */
49
+ delete(id: number, ensure?: boolean): boolean;
50
+ /**
51
+ * First checks if given `id` is valid and if so returns corresponding item.
52
+ * If `ensure` is true (default), throws an error if the ID is invalid
53
+ * (otherwise returns undefined for invalid IDs)
54
+ *
55
+ * @param id
56
+ */
57
+ get(id: number): T;
58
+ get(id: number, ensure: true): T;
59
+ get(id: number, ensure: false): T | undefined;
60
+ /**
61
+ * Applies given predicate to all active items and returns ID of first
62
+ * matching. If `ensure` is true (default), throws an error if the `pred`
63
+ * didn't match anything (otherwise returns undefined).
64
+ *
65
+ * @param pred
66
+ * @param ensure
67
+ */
68
+ find(pred: Predicate<T>, ensure?: boolean): number | undefined;
14
69
  }
15
70
  //# sourceMappingURL=object-index.d.ts.map
package/object-index.js CHANGED
@@ -1,33 +1,76 @@
1
1
  import { assert } from "@thi.ng/errors/assert";
2
+ import { IDGen } from "@thi.ng/idgen";
2
3
  export class ObjectIndex {
3
- constructor(name, items = [], logger) {
4
- this.name = name;
5
- this.items = items;
6
- this.logger = logger;
4
+ constructor(opts) {
5
+ this.items = [];
6
+ this.name = opts.name;
7
+ this.logger = opts.logger;
8
+ this.idgen = new IDGen(opts.bits || 32, 0);
7
9
  }
8
- add(x) {
9
- const id = this.items.length - 1;
10
+ keys() {
11
+ return this.idgen[Symbol.iterator]();
12
+ }
13
+ *values() {
14
+ for (let id of this.idgen) {
15
+ yield this.items[id];
16
+ }
17
+ }
18
+ /**
19
+ * Indexes given `item` and assigns it to the next available ID (which might
20
+ * be a previously freed ID) and returns it.
21
+ *
22
+ * @param item
23
+ */
24
+ add(item) {
25
+ const id = this.idgen.next();
10
26
  this.logger && this.logger.debug(`adding ${this.name} ID: ${id}`);
11
- this.items[id] = x;
27
+ this.items[id] = item;
12
28
  return id;
13
29
  }
14
- removeID(id) {
15
- if (this.items[id] !== undefined) {
30
+ /**
31
+ * Returns true if the given `id` is valid/active.
32
+ *
33
+ * @param id
34
+ */
35
+ has(id) {
36
+ return this.idgen.has(id);
37
+ }
38
+ /**
39
+ * First checks if given `id` is valid and if so frees it (for recycling)
40
+ * and deletes its corresponding item. If `ensure` is true (default), throws
41
+ * an error if the ID is invalid (otherwise returns false for invalid IDs).
42
+ *
43
+ * @param id
44
+ * @param ensure
45
+ */
46
+ delete(id, ensure = true) {
47
+ if (this.idgen.has(id)) {
16
48
  this.logger && this.logger.debug(`deleting ${this.name} ID: ${id}`);
49
+ this.idgen.free(id);
17
50
  delete this.items[id];
18
51
  return true;
19
52
  }
53
+ assert(!ensure, `can't delete missing ${this.name} ID: ${id}`);
20
54
  return false;
21
55
  }
22
- getID(id, ensure = true) {
23
- const obj = this.items[id];
56
+ get(id, ensure = true) {
24
57
  ensure &&
25
- assert(obj !== undefined, `missing ${this.name} for ID: ${id}`);
26
- return obj;
58
+ assert(this.idgen.has(id), `missing ${this.name} for ID: ${id}`);
59
+ return this.items[id];
27
60
  }
28
- findID(pred, ensure = true) {
29
- const id = this.items.findIndex(pred);
30
- ensure && assert(id >= 0, `can't find ${this.name}`);
31
- return id;
61
+ /**
62
+ * Applies given predicate to all active items and returns ID of first
63
+ * matching. If `ensure` is true (default), throws an error if the `pred`
64
+ * didn't match anything (otherwise returns undefined).
65
+ *
66
+ * @param pred
67
+ * @param ensure
68
+ */
69
+ find(pred, ensure = true) {
70
+ for (let id of this.idgen) {
71
+ if (pred(this.items[id]))
72
+ return id;
73
+ }
74
+ assert(!ensure, `given predicate matched no ${this.name}`);
32
75
  }
33
76
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thi.ng/wasm-api",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Modular, extensible API bridge and generic glue code between JS & WebAssembly",
5
5
  "type": "module",
6
6
  "module": "./index.js",
@@ -37,6 +37,7 @@
37
37
  "@thi.ng/api": "^8.3.9",
38
38
  "@thi.ng/errors": "^2.1.9",
39
39
  "@thi.ng/hex": "^2.1.9",
40
+ "@thi.ng/idgen": "^2.1.9",
40
41
  "@thi.ng/logger": "^1.1.9"
41
42
  },
42
43
  "devDependencies": {
@@ -49,6 +50,8 @@
49
50
  },
50
51
  "keywords": [
51
52
  "api",
53
+ "id",
54
+ "logger",
52
55
  "memory",
53
56
  "typescript",
54
57
  "wasm",
@@ -89,5 +92,5 @@
89
92
  "status": "alpha",
90
93
  "year": 2022
91
94
  },
92
- "gitHead": "976ccd698cedaa60dcef2e69030a5eb98898cc4a\n"
95
+ "gitHead": "24ec2749982f4193e6bc50173a238f336854bb1c\n"
93
96
  }
package/zig/core.zig CHANGED
@@ -24,65 +24,65 @@ pub extern fn printF32(x: f32) void;
24
24
  pub extern fn printF64(x: f64) void;
25
25
 
26
26
  /// Prints pointer as hex number using configured JS logger
27
- pub fn printPtr(x: *const anyopaque) void {
28
- printU32Hex(@ptrToInt(x));
27
+ pub fn printPtr(ptr: *const anyopaque) void {
28
+ printU32Hex(@ptrToInt(ptr));
29
29
  }
30
30
 
31
31
  /// Prints number array using configured JS logger
32
- pub extern fn _printI8Array(ptr: usize, len: usize) void;
32
+ pub extern fn _printI8Array(addr: usize, len: usize) void;
33
33
  /// Prints number array using configured JS logger
34
- pub extern fn _printU8Array(ptr: usize, len: usize) void;
34
+ pub extern fn _printU8Array(addr: usize, len: usize) void;
35
35
  /// Prints number array using configured JS logger
36
- pub extern fn _printI16Array(ptr: usize, len: usize) void;
36
+ pub extern fn _printI16Array(addr: usize, len: usize) void;
37
37
  /// Prints number array using configured JS logger
38
- pub extern fn _printU16Array(ptr: usize, len: usize) void;
38
+ pub extern fn _printU16Array(addr: usize, len: usize) void;
39
39
  /// Prints number array using configured JS logger
40
- pub extern fn _printI32Array(ptr: usize, len: usize) void;
40
+ pub extern fn _printI32Array(addr: usize, len: usize) void;
41
41
  /// Prints number array using configured JS logger
42
- pub extern fn _printU32Array(ptr: usize, len: usize) void;
42
+ pub extern fn _printU32Array(addr: usize, len: usize) void;
43
43
  /// Prints number array using configured JS logger
44
- pub extern fn _printF32Array(ptr: usize, len: usize) void;
44
+ pub extern fn _printF32Array(addr: usize, len: usize) void;
45
45
  /// Prints number array using configured JS logger
46
- pub extern fn _printF64Array(ptr: usize, len: usize) void;
46
+ pub extern fn _printF64Array(addr: usize, len: usize) void;
47
47
 
48
48
  /// Prints number array using configured JS logger
49
49
  pub fn printI8Array(buf: []const i8) void {
50
- _printI8Array(@ptrToInt(&buf), buf.len);
50
+ _printI8Array(@ptrToInt(buf.ptr), buf.len);
51
51
  }
52
52
  /// Prints number array using configured JS logger
53
53
  pub fn printU8Array(buf: []const u8) void {
54
- _printU8Array(@ptrToInt(&buf), buf.len);
54
+ _printU8Array(@ptrToInt(buf.ptr), buf.len);
55
55
  }
56
56
  /// Prints number array using configured JS logger
57
57
  pub fn printI16Array(buf: []const i16) void {
58
- _printI16Array(@ptrToInt(&buf), buf.len);
58
+ _printI16Array(@ptrToInt(buf.ptr), buf.len);
59
59
  }
60
60
  /// Prints number array using configured JS logger
61
61
  pub fn printU16Array(buf: []const u16) void {
62
- _printU16Array(@ptrToInt(&buf), buf.len);
62
+ _printU16Array(@ptrToInt(buf.ptr), buf.len);
63
63
  }
64
64
  /// Prints number array using configured JS logger
65
65
  pub fn printI32Array(buf: []const i32) void {
66
- _printI32Array(@ptrToInt(&buf), buf.len);
66
+ _printI32Array(@ptrToInt(buf.ptr), buf.len);
67
67
  }
68
68
  /// Prints number array using configured JS logger
69
69
  pub fn printU32Array(buf: []const u32) void {
70
- _printU32Array(@ptrToInt(&buf), buf.len);
70
+ _printU32Array(@ptrToInt(buf.ptr), buf.len);
71
71
  }
72
72
  /// Prints number array using configured JS logger
73
73
  pub fn printF32Array(buf: []const f32) void {
74
- _printF32Array(@ptrToInt(&buf), buf.len);
74
+ _printF32Array(@ptrToInt(buf.ptr), buf.len);
75
75
  }
76
76
  /// Prints number array using configured JS logger
77
77
  pub fn printF64Array(buf: []const f64) void {
78
- _printF64Array(@ptrToInt(&buf), buf.len);
78
+ _printF64Array(@ptrToInt(buf.ptr), buf.len);
79
79
  }
80
80
 
81
81
  /// Prints a zero-terminated string using configured JS logger
82
- extern fn _printStr0(ptr: usize) void;
82
+ extern fn _printStr0(addr: usize) void;
83
83
  /// Prints a string of given length using configured JS logger
84
- extern fn _printStr(ptr: usize, len: usize) void;
84
+ extern fn _printStr(addr: usize, len: usize) void;
85
85
 
86
86
  pub fn printStr(msg: []const u8) void {
87
- _printStr(@ptrToInt(&msg), msg.len);
87
+ _printStr(@ptrToInt(msg.ptr), msg.len);
88
88
  }
@@ -1,52 +0,0 @@
1
- (()=>{var Ce=Object.create;var ue=Object.defineProperty;var Pe=Object.getOwnPropertyDescriptor;var Oe=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,_e=Object.prototype.hasOwnProperty;var Me=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var De=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Oe(e))!_e.call(t,i)&&i!==r&&ue(t,i,{get:()=>e[i],enumerable:!(n=Pe(e,i))||n.enumerable});return t};var Fe=(t,e,r)=>(r=t!=null?Ce(Re(t)):{},De(e||!t||!t.__esModule?ue(r,"default",{value:t,enumerable:!0}):r,t));var pe=Me((de,fe)=>{(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i<n.length;i++){var s=n[i],o=e[s];if(Array.isArray(o)){r[s]=o.slice();continue}if(typeof o=="string"||typeof o=="number"||typeof o=="boolean"){r[s]=o;continue}throw new TypeError("clone is not deep and does not support nested objects")}return r},t.FieldRef=function(e,r,n){this.docRef=e,this.fieldName=r,this._stringValue=n},t.FieldRef.joiner="/",t.FieldRef.fromString=function(e){var r=e.indexOf(t.FieldRef.joiner);if(r===-1)throw"malformed field ref string";var n=e.slice(0,r),i=e.slice(r+1);return new t.FieldRef(i,n,e)},t.FieldRef.prototype.toString=function(){return this._stringValue==null&&(this._stringValue=this.fieldName+t.FieldRef.joiner+this.docRef),this._stringValue};t.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var r=0;r<this.length;r++)this.elements[e[r]]=!0}else this.length=0},t.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},t.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},t.Set.prototype.contains=function(e){return!!this.elements[e]},t.Set.prototype.intersect=function(e){var r,n,i,s=[];if(e===t.Set.complete)return this;if(e===t.Set.empty)return e;this.length<e.length?(r=this,n=e):(r=e,n=this),i=Object.keys(r.elements);for(var o=0;o<i.length;o++){var a=i[o];a in n.elements&&s.push(a)}return new t.Set(s)},t.Set.prototype.union=function(e){return e===t.Set.complete?t.Set.complete:e===t.Set.empty?this:new t.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},t.idf=function(e,r){var n=0;for(var i in e)i!="_index"&&(n+=Object.keys(e[i]).length);var s=(r-n+.5)/(n+.5);return Math.log(1+Math.abs(s))},t.Token=function(e,r){this.str=e||"",this.metadata=r||{}},t.Token.prototype.toString=function(){return this.str},t.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},t.Token.prototype.clone=function(e){return e=e||function(r){return r},new t.Token(e(this.str,this.metadata),this.metadata)};t.tokenizer=function(e,r){if(e==null||e==null)return[];if(Array.isArray(e))return e.map(function(f){return new t.Token(t.utils.asString(f).toLowerCase(),t.utils.clone(r))});for(var n=e.toString().toLowerCase(),i=n.length,s=[],o=0,a=0;o<=i;o++){var l=n.charAt(o),u=o-a;if(l.match(t.tokenizer.separator)||o==i){if(u>0){var h=t.utils.clone(r)||{};h.position=[a,u],h.index=s.length,s.push(new t.Token(n.slice(a,o),h))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index.
2
- `,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error("Cannot load unregistered function: "+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n<r;n++){for(var i=this._stack[n],s=[],o=0;o<e.length;o++){var a=i(e[o],o,e);if(!(a==null||a===""))if(Array.isArray(a))for(var l=0;l<a.length;l++)s.push(a[l]);else s.push(a)}e=s}return e},t.Pipeline.prototype.runString=function(e,r){var n=new t.Token(e,r);return this.run([n]).map(function(i){return i.toString()})},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})};t.Vector=function(e){this._magnitude=0,this.elements=e||[]},t.Vector.prototype.positionForIndex=function(e){if(this.elements.length==0)return 0;for(var r=0,n=this.elements.length/2,i=n-r,s=Math.floor(i/2),o=this.elements[s*2];i>1&&(o<e&&(r=s),o>e&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(o<e)return(s+1)*2},t.Vector.prototype.insert=function(e,r){this.upsert(e,r,function(){throw"duplicate index"})},t.Vector.prototype.upsert=function(e,r,n){this._magnitude=0;var i=this.positionForIndex(e);this.elements[i]==e?this.elements[i+1]=n(this.elements[i+1],r):this.elements.splice(i,0,e,r)},t.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,r=this.elements.length,n=1;n<r;n+=2){var i=this.elements[n];e+=i*i}return this._magnitude=Math.sqrt(e)},t.Vector.prototype.dot=function(e){for(var r=0,n=this.elements,i=e.elements,s=n.length,o=i.length,a=0,l=0,u=0,h=0;u<s&&h<o;)a=n[u],l=i[h],a<l?u+=2:a>l?h+=2:a==l&&(r+=n[u+1]*i[h+1],u+=2,h+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r<this.elements.length;r+=2,n++)e[n]=this.elements[r];return e},t.Vector.prototype.toJSON=function(){return this.elements};t.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},r={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",s=n+"[^aeiouy]*",o=i+"[aeiou]*",a="^("+s+")?"+o+s,l="^("+s+")?"+o+s+"("+o+")?$",u="^("+s+")?"+o+s+o+s,h="^("+s+")?"+i,f=new RegExp(a),p=new RegExp(u),E=new RegExp(l),y=new RegExp(h),b=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,T=/^(.+?)(ed|ing)$/,w=/.$/,I=/(at|bl|iz)$/,M=new RegExp("([^aeiouylsz])\\1$"),B=new RegExp("^"+s+i+"[^aeiouwxy]$"),V=/^(.+?[^aeiou])y$/,q=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,$=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,H=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,W=/^(.+?)(s|t)(ion)$/,P=/^(.+?)e$/,U=/ll$/,G=new RegExp("^"+s+i+"[^aeiouwxy]$"),z=function(c){var g,O,S,d,x,R,F;if(c.length<3)return c;if(S=c.substr(0,1),S=="y"&&(c=S.toUpperCase()+c.substr(1)),d=b,x=m,d.test(c)?c=c.replace(d,"$1$2"):x.test(c)&&(c=c.replace(x,"$1$2")),d=v,x=T,d.test(c)){var L=d.exec(c);d=f,d.test(L[1])&&(d=w,c=c.replace(d,""))}else if(x.test(c)){var L=x.exec(c);g=L[1],x=y,x.test(g)&&(c=g,x=I,R=M,F=B,x.test(c)?c=c+"e":R.test(c)?(d=w,c=c.replace(d,"")):F.test(c)&&(c=c+"e"))}if(d=V,d.test(c)){var L=d.exec(c);g=L[1],c=g+"i"}if(d=q,d.test(c)){var L=d.exec(c);g=L[1],O=L[2],d=f,d.test(g)&&(c=g+e[O])}if(d=$,d.test(c)){var L=d.exec(c);g=L[1],O=L[2],d=f,d.test(g)&&(c=g+r[O])}if(d=H,x=W,d.test(c)){var L=d.exec(c);g=L[1],d=p,d.test(g)&&(c=g)}else if(x.test(c)){var L=x.exec(c);g=L[1]+L[2],x=p,x.test(g)&&(c=g)}if(d=P,d.test(c)){var L=d.exec(c);g=L[1],d=p,x=E,R=G,(d.test(g)||x.test(g)&&!R.test(g))&&(c=g)}return d=U,x=p,d.test(c)&&x.test(c)&&(d=w,c=c.replace(d,"")),S=="y"&&(c=S.toLowerCase()+c.substr(1)),c};return function(D){return D.update(z)}}(),t.Pipeline.registerFunction(t.stemmer,"stemmer");t.generateStopWordFilter=function(e){var r=e.reduce(function(n,i){return n[i]=i,n},{});return function(n){if(n&&r[n.toString()]!==n.toString())return n}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter");t.trimmer=function(e){return e.update(function(r){return r.replace(/^\W+/,"").replace(/\W+$/,"")})},t.Pipeline.registerFunction(t.trimmer,"trimmer");t.TokenSet=function(){this.final=!1,this.edges={},this.id=t.TokenSet._nextId,t.TokenSet._nextId+=1},t.TokenSet._nextId=1,t.TokenSet.fromArray=function(e){for(var r=new t.TokenSet.Builder,n=0,i=e.length;n<i;n++)r.insert(e[n]);return r.finish(),r.root},t.TokenSet.fromClause=function(e){return"editDistance"in e?t.TokenSet.fromFuzzyString(e.term,e.editDistance):t.TokenSet.fromString(e.term)},t.TokenSet.fromFuzzyString=function(e,r){for(var n=new t.TokenSet,i=[{node:n,editsRemaining:r,str:e}];i.length;){var s=i.pop();if(s.str.length>0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var h=s.str.charAt(0),f=s.str.charAt(1),p;f in s.node.edges?p=s.node.edges[f]:(p=new t.TokenSet,s.node.edges[f]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:h+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i<s;i++){var o=e[i],a=i==s-1;if(o=="*")r.edges[o]=r,r.final=a;else{var l=new t.TokenSet;l.final=a,r.edges[o]=l,r=l}}return n},t.TokenSet.prototype.toArray=function(){for(var e=[],r=[{prefix:"",node:this}];r.length;){var n=r.pop(),i=Object.keys(n.node.edges),s=i.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var o=0;o<s;o++){var a=i[o];r.push({prefix:n.prefix.concat(a),node:n.node.edges[a]})}}return e},t.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",r=Object.keys(this.edges).sort(),n=r.length,i=0;i<n;i++){var s=r[i],o=this.edges[s];e=e+s+o.id}return e},t.TokenSet.prototype.intersect=function(e){for(var r=new t.TokenSet,n=void 0,i=[{qNode:e,output:r,node:this}];i.length;){n=i.pop();for(var s=Object.keys(n.qNode.edges),o=s.length,a=Object.keys(n.node.edges),l=a.length,u=0;u<o;u++)for(var h=s[u],f=0;f<l;f++){var p=a[f];if(p==h||h=="*"){var E=n.node.edges[p],y=n.qNode.edges[h],b=E.final&&y.final,m=void 0;p in n.output.edges?(m=n.output.edges[p],m.final=m.final||b):(m=new t.TokenSet,m.final=b,n.output.edges[p]=m),i.push({qNode:y,output:m,node:E})}}}return r},t.TokenSet.Builder=function(){this.previousWord="",this.root=new t.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},t.TokenSet.Builder.prototype.insert=function(e){var r,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var i=0;i<e.length&&i<this.previousWord.length&&e[i]==this.previousWord[i];i++)n++;this.minimize(n),this.uncheckedNodes.length==0?r=this.root:r=this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(var i=n;i<e.length;i++){var s=new t.TokenSet,o=e[i];r.edges[o]=s,this.uncheckedNodes.push({parent:r,char:o,child:s}),r=s}r.final=!0,this.previousWord=e},t.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},t.TokenSet.Builder.prototype.minimize=function(e){for(var r=this.uncheckedNodes.length-1;r>=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l<this.fields.length;l++)i[this.fields[l]]=new t.Vector;e.call(r,r);for(var l=0;l<r.clauses.length;l++){var u=r.clauses[l],h=null,f=t.Set.empty;u.usePipeline?h=this.pipeline.runString(u.term,{fields:u.fields}):h=[u.term];for(var p=0;p<h.length;p++){var E=h[p];u.term=E;var y=t.TokenSet.fromClause(u),b=this.tokenSet.intersect(y).toArray();if(b.length===0&&u.presence===t.Query.presence.REQUIRED){for(var m=0;m<u.fields.length;m++){var v=u.fields[m];o[v]=t.Set.empty}break}for(var T=0;T<b.length;T++)for(var w=b[T],I=this.invertedIndex[w],M=I._index,m=0;m<u.fields.length;m++){var v=u.fields[m],B=I[v],V=Object.keys(B),q=w+"/"+v,$=new t.Set(V);if(u.presence==t.Query.presence.REQUIRED&&(f=f.union($),o[v]===void 0&&(o[v]=t.Set.complete)),u.presence==t.Query.presence.PROHIBITED){a[v]===void 0&&(a[v]=t.Set.empty),a[v]=a[v].union($);continue}if(i[v].upsert(M,u.boost,function(Qe,Ie){return Qe+Ie}),!s[q]){for(var H=0;H<V.length;H++){var W=V[H],P=new t.FieldRef(W,v),U=B[W],G;(G=n[P])===void 0?n[P]=new t.MatchData(w,v,U):G.add(w,v,U)}s[q]=!0}}}if(u.presence===t.Query.presence.REQUIRED)for(var m=0;m<u.fields.length;m++){var v=u.fields[m];o[v]=o[v].intersect(f)}}for(var z=t.Set.complete,D=t.Set.empty,l=0;l<this.fields.length;l++){var v=this.fields[l];o[v]&&(z=z.intersect(o[v])),a[v]&&(D=D.union(a[v]))}var c=Object.keys(n),g=[],O=Object.create(null);if(r.isNegated()){c=Object.keys(this.fieldVectors);for(var l=0;l<c.length;l++){var P=c[l],S=t.FieldRef.fromString(P);n[P]=new t.MatchData}}for(var l=0;l<c.length;l++){var S=t.FieldRef.fromString(c[l]),d=S.docRef;if(!!z.contains(d)&&!D.contains(d)){var x=this.fieldVectors[S],R=i[S.fieldName].similarity(x),F;if((F=O[d])!==void 0)F.score+=R,F.matchData.combine(n[S]);else{var L={ref:d,score:R,matchData:n[S]};O[d]=L,g.push(L)}}}return g.sort(function(Se,ke){return ke.score-Se.score})},t.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map(function(n){return[n,this.invertedIndex[n]]},this),r=Object.keys(this.fieldVectors).map(function(n){return[n,this.fieldVectors[n].toJSON()]},this);return{version:t.version,fields:this.fields,fieldVectors:r,invertedIndex:e,pipeline:this.pipeline.toJSON()}},t.Index.load=function(e){var r={},n={},i=e.fieldVectors,s=Object.create(null),o=e.invertedIndex,a=new t.TokenSet.Builder,l=t.Pipeline.load(e.pipeline);e.version!=t.version&&t.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+t.version+"' does not match serialized index '"+e.version+"'");for(var u=0;u<i.length;u++){var h=i[u],f=h[0],p=h[1];n[f]=new t.Vector(p)}for(var u=0;u<o.length;u++){var h=o[u],E=h[0],y=h[1];a.insert(E),s[E]=y}return a.finish(),r.fields=e.fields,r.fieldVectors=n,r.invertedIndex=s,r.tokenSet=a.root,r.pipeline=l,new t.Index(r)};t.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=t.tokenizer,this.pipeline=new t.Pipeline,this.searchPipeline=new t.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},t.Builder.prototype.ref=function(e){this._ref=e},t.Builder.prototype.field=function(e,r){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=r||{}},t.Builder.prototype.b=function(e){e<0?this._b=0:e>1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s<i.length;s++){var o=i[s],a=this._fields[o].extractor,l=a?a(e):e[o],u=this.tokenizer(l,{fields:[o]}),h=this.pipeline.run(u),f=new t.FieldRef(n,o),p=Object.create(null);this.fieldTermFrequencies[f]=p,this.fieldLengths[f]=0,this.fieldLengths[f]+=h.length;for(var E=0;E<h.length;E++){var y=h[E];if(p[y]==null&&(p[y]=0),p[y]+=1,this.invertedIndex[y]==null){var b=Object.create(null);b._index=this.termIndex,this.termIndex+=1;for(var m=0;m<i.length;m++)b[i[m]]=Object.create(null);this.invertedIndex[y]=b}this.invertedIndex[y][o][n]==null&&(this.invertedIndex[y][o][n]=Object.create(null));for(var v=0;v<this.metadataWhitelist.length;v++){var T=this.metadataWhitelist[v],w=y.metadata[T];this.invertedIndex[y][o][n][T]==null&&(this.invertedIndex[y][o][n][T]=[]),this.invertedIndex[y][o][n][T].push(w)}}}},t.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),r=e.length,n={},i={},s=0;s<r;s++){var o=t.FieldRef.fromString(e[s]),a=o.fieldName;i[a]||(i[a]=0),i[a]+=1,n[a]||(n[a]=0),n[a]+=this.fieldLengths[o]}for(var l=Object.keys(this._fields),s=0;s<l.length;s++){var u=l[s];n[u]=n[u]/i[u]}this.averageFieldLength=n},t.Builder.prototype.createFieldVectors=function(){for(var e={},r=Object.keys(this.fieldTermFrequencies),n=r.length,i=Object.create(null),s=0;s<n;s++){for(var o=t.FieldRef.fromString(r[s]),a=o.fieldName,l=this.fieldLengths[o],u=new t.Vector,h=this.fieldTermFrequencies[o],f=Object.keys(h),p=f.length,E=this._fields[a].boost||1,y=this._documents[o.docRef].boost||1,b=0;b<p;b++){var m=f[b],v=h[m],T=this.invertedIndex[m]._index,w,I,M;i[m]===void 0?(w=t.idf(this.invertedIndex[m],this.documentCount),i[m]=w):w=i[m],I=w*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[a]))+v),I*=E,I*=y,M=Math.round(I*1e3)/1e3,u.insert(T,M)}e[o]=u}this.fieldVectors=e},t.Builder.prototype.createTokenSet=function(){this.tokenSet=t.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},t.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new t.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},t.Builder.prototype.use=function(e){var r=Array.prototype.slice.call(arguments,1);r.unshift(this),e.apply(this,r)},t.MatchData=function(e,r,n){for(var i=Object.create(null),s=Object.keys(n||{}),o=0;o<s.length;o++){var a=s[o];i[a]=n[a].slice()}this.metadata=Object.create(null),e!==void 0&&(this.metadata[e]=Object.create(null),this.metadata[e][r]=i)},t.MatchData.prototype.combine=function(e){for(var r=Object.keys(e.metadata),n=0;n<r.length;n++){var i=r[n],s=Object.keys(e.metadata[i]);this.metadata[i]==null&&(this.metadata[i]=Object.create(null));for(var o=0;o<s.length;o++){var a=s[o],l=Object.keys(e.metadata[i][a]);this.metadata[i][a]==null&&(this.metadata[i][a]=Object.create(null));for(var u=0;u<l.length;u++){var h=l[u];this.metadata[i][a][h]==null?this.metadata[i][a][h]=e.metadata[i][a][h]:this.metadata[i][a][h]=this.metadata[i][a][h].concat(e.metadata[i][a][h])}}}},t.MatchData.prototype.add=function(e,r,n){if(!(e in this.metadata)){this.metadata[e]=Object.create(null),this.metadata[e][r]=n;return}if(!(r in this.metadata[e])){this.metadata[e][r]=n;return}for(var i=Object.keys(n),s=0;s<i.length;s++){var o=i[s];o in this.metadata[e][r]?this.metadata[e][r][o]=this.metadata[e][r][o].concat(n[o]):this.metadata[e][r][o]=n[o]}},t.Query=function(e){this.clauses=[],this.allFields=e},t.Query.wildcard=new String("*"),t.Query.wildcard.NONE=0,t.Query.wildcard.LEADING=1,t.Query.wildcard.TRAILING=2,t.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},t.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=t.Query.wildcard.NONE),e.wildcard&t.Query.wildcard.LEADING&&e.term.charAt(0)!=t.Query.wildcard&&(e.term="*"+e.term),e.wildcard&t.Query.wildcard.TRAILING&&e.term.slice(-1)!=t.Query.wildcard&&(e.term=""+e.term+"*"),"presence"in e||(e.presence=t.Query.presence.OPTIONAL),this.clauses.push(e),this},t.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=t.Query.presence.PROHIBITED)return!1;return!0},t.Query.prototype.term=function(e,r){if(Array.isArray(e))return e.forEach(function(i){this.term(i,t.utils.clone(r))},this),this;var n=r||{};return n.term=e.toString(),this.clause(n),this},t.QueryParseError=function(e,r,n){this.name="QueryParseError",this.message=e,this.start=r,this.end=n},t.QueryParseError.prototype=new Error,t.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},t.QueryLexer.prototype.run=function(){for(var e=t.QueryLexer.lexText;e;)e=e(this)},t.QueryLexer.prototype.sliceString=function(){for(var e=[],r=this.start,n=this.pos,i=0;i<this.escapeCharPositions.length;i++)n=this.escapeCharPositions[i],e.push(this.str.slice(r,n)),r=n+1;return e.push(this.str.slice(r,this.pos)),this.escapeCharPositions.length=0,e.join("")},t.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},t.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},t.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos<this.length},t.QueryLexer.EOS="EOS",t.QueryLexer.FIELD="FIELD",t.QueryLexer.TERM="TERM",t.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",t.QueryLexer.BOOST="BOOST",t.QueryLexer.PRESENCE="PRESENCE",t.QueryLexer.lexField=function(e){return e.backup(),e.emit(t.QueryLexer.FIELD),e.ignore(),t.QueryLexer.lexText},t.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n="expecting term or field, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define=="function"&&define.amd?define(r):typeof de=="object"?fe.exports=r():e.lunr=r()}(this,function(){return t})})()});var ce=[];function N(t,e){ce.push({selector:e,constructor:t})}var Y=class{constructor(){this.createComponents(document.body)}createComponents(e){ce.forEach(r=>{e.querySelectorAll(r.selector).forEach(n=>{n.dataset.hasInstance||(new r.constructor({el:n}),n.dataset.hasInstance=String(!0))})})}};var k=class{constructor(e){this.el=e.el}};var J=class{constructor(){this.listeners={}}addEventListener(e,r){e in this.listeners||(this.listeners[e]=[]),this.listeners[e].push(r)}removeEventListener(e,r){if(!(e in this.listeners))return;let n=this.listeners[e];for(let i=0,s=n.length;i<s;i++)if(n[i]===r){n.splice(i,1);return}}dispatchEvent(e){if(!(e.type in this.listeners))return!0;let r=this.listeners[e.type].slice();for(let n=0,i=r.length;n<i;n++)r[n].call(this,e);return!e.defaultPrevented}};var ne=(t,e=100)=>{let r=Date.now();return(...n)=>{r+e-Date.now()<0&&(t(...n),r=Date.now())}};var ie=class extends J{constructor(){super();this.scrollTop=0;this.lastY=0;this.width=0;this.height=0;this.showToolbar=!0;this.toolbar=document.querySelector(".tsd-page-toolbar"),this.secondaryNav=document.querySelector(".tsd-navigation.secondary"),window.addEventListener("scroll",ne(()=>this.onScroll(),10)),window.addEventListener("resize",ne(()=>this.onResize(),10)),this.onResize(),this.onScroll()}triggerResize(){let r=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(r)}onResize(){this.width=window.innerWidth||0,this.height=window.innerHeight||0;let r=new CustomEvent("resize",{detail:{width:this.width,height:this.height}});this.dispatchEvent(r)}onScroll(){this.scrollTop=window.scrollY||0;let r=new CustomEvent("scroll",{detail:{scrollTop:this.scrollTop}});this.dispatchEvent(r),this.hideShowToolbar()}hideShowToolbar(){var n;let r=this.showToolbar;this.showToolbar=this.lastY>=this.scrollTop||this.scrollTop<=0,r!==this.showToolbar&&(this.toolbar.classList.toggle("tsd-page-toolbar--hide"),(n=this.secondaryNav)==null||n.classList.toggle("tsd-navigation--toolbar-hide")),this.lastY=this.scrollTop}},Q=ie;Q.instance=new ie;var X=class extends k{constructor(r){super(r);this.anchors=[];this.index=-1;Q.instance.addEventListener("resize",()=>this.onResize()),Q.instance.addEventListener("scroll",n=>this.onScroll(n)),this.createAnchors()}createAnchors(){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substr(0,r.indexOf("#"))),this.el.querySelectorAll("a").forEach(n=>{let i=n.href;if(i.indexOf("#")==-1||i.substr(0,r.length)!=r)return;let s=i.substr(i.indexOf("#")+1),o=document.querySelector("a.tsd-anchor[name="+s+"]"),a=n.parentNode;!o||!a||this.anchors.push({link:a,anchor:o,position:0})}),this.onResize()}onResize(){let r;for(let i=0,s=this.anchors.length;i<s;i++){r=this.anchors[i];let o=r.anchor.getBoundingClientRect();r.position=o.top+document.body.scrollTop}this.anchors.sort((i,s)=>i.position-s.position);let n=new CustomEvent("scroll",{detail:{scrollTop:Q.instance.scrollTop}});this.onScroll(n)}onScroll(r){let n=r.detail.scrollTop+5,i=this.anchors,s=i.length-1,o=this.index;for(;o>-1&&i[o].position>n;)o-=1;for(;o<s&&i[o+1].position<n;)o+=1;this.index!=o&&(this.index>-1&&this.anchors[this.index].link.classList.remove("focus"),this.index=o,this.index>-1&&this.anchors[this.index].link.classList.add("focus"))}};var he=(t,e=100)=>{let r;return(...n)=>{clearTimeout(r),r=setTimeout(()=>t(n),e)}};var ge=Fe(pe());function ye(){let t=document.getElementById("tsd-search");if(!t)return;let e=document.getElementById("search-script");t.classList.add("loading"),e&&(e.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),e.addEventListener("load",()=>{t.classList.remove("loading"),t.classList.add("ready")}),window.searchData&&t.classList.remove("loading"));let r=document.querySelector("#tsd-search input"),n=document.querySelector("#tsd-search .results");if(!r||!n)throw new Error("The input field or the result list wrapper was not found");let i=!1;n.addEventListener("mousedown",()=>i=!0),n.addEventListener("mouseup",()=>{i=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{i||(i=!1,t.classList.remove("has-focus"))});let s={base:t.dataset.base+"/"};Ae(t,n,r,s)}function Ae(t,e,r,n){r.addEventListener("input",he(()=>{He(t,e,r,n)},200));let i=!1;r.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?ze(e,r):s.key=="Escape"?r.blur():s.key=="ArrowUp"?me(e,-1):s.key==="ArrowDown"?me(e,1):i=!1}),r.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!r.matches(":focus")&&s.key==="/"&&(r.focus(),s.preventDefault())})}function Ve(t,e){t.index||window.searchData&&(e.classList.remove("loading"),e.classList.add("ready"),t.data=window.searchData,t.index=ge.Index.load(window.searchData.index))}function He(t,e,r,n){var o,a;if(Ve(n,t),!n.index||!n.data)return;e.textContent="";let i=r.value.trim(),s=i?n.index.search(`*${i}*`):[];for(let l=0;l<s.length;l++){let u=s[l],h=n.data.rows[Number(u.ref)],f=1;h.name.toLowerCase().startsWith(i.toLowerCase())&&(f*=1+1/(Math.abs(h.name.length-i.length)*10)),f*=(o=h.boost)!=null?o:1,u.score*=f}s.sort((l,u)=>u.score-l.score);for(let l=0,u=Math.min(10,s.length);l<u;l++){let h=n.data.rows[Number(s[l].ref)],f=ve(h.name,i);h.parent&&(f=`<span class="parent">${ve(h.parent,i)}.</span>${f}`);let p=document.createElement("li");p.classList.value=(a=h.classes)!=null?a:"";let E=document.createElement("a");E.href=n.base+h.url,E.classList.add("tsd-kind-icon"),E.innerHTML=f,p.append(E),e.appendChild(p)}}function me(t,e){var n,i;let r=t.querySelector(".current");if(!r)r=t.querySelector(e==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let s=r;if(e===1)do s=(n=s.nextElementSibling)!=null?n:void 0;while(s instanceof HTMLElement&&s.offsetParent==null);else do s=(i=s.previousElementSibling)!=null?i:void 0;while(s instanceof HTMLElement&&s.offsetParent==null);s&&(r.classList.remove("current"),s.classList.add("current"))}}function ze(t,e){let r=t.querySelector(".current");if(r||(r=t.querySelector("li:first-child")),r){let n=r.querySelector("a");n&&(window.location.href=n.href),e.blur()}}function ve(t,e){if(e==="")return t;let r=t.toLocaleLowerCase(),n=e.toLocaleLowerCase(),i=[],s=0,o=r.indexOf(n);for(;o!=-1;)i.push(se(t.substring(s,o)),`<b>${se(t.substring(o,o+n.length))}</b>`),s=o+n.length,o=r.indexOf(n,s);return i.push(se(t.substring(s))),i.join("")}var Ne={"&":"&amp;","<":"&lt;",">":"&gt;","'":"&#039;",'"':"&quot;"};function se(t){return t.replace(/[&<>"'"]/g,e=>Ne[e])}var oe=class{constructor(e,r){this.signature=e,this.description=r}addClass(e){return this.signature.classList.add(e),this.description.classList.add(e),this}removeClass(e){return this.signature.classList.remove(e),this.description.classList.remove(e),this}},Z=class extends k{constructor(r){super(r);this.groups=[];this.index=-1;this.createGroups(),this.container&&(this.el.classList.add("active"),Array.from(this.el.children).forEach(n=>{n.addEventListener("touchstart",i=>this.onClick(i)),n.addEventListener("click",i=>this.onClick(i))}),this.container.classList.add("active"),this.setIndex(0))}setIndex(r){if(r<0&&(r=0),r>this.groups.length-1&&(r=this.groups.length-1),this.index==r)return;let n=this.groups[r];if(this.index>-1){let i=this.groups[this.index];i.removeClass("current").addClass("fade-out"),n.addClass("current"),n.addClass("fade-in"),Q.instance.triggerResize(),setTimeout(()=>{i.removeClass("fade-out"),n.removeClass("fade-in")},300)}else n.addClass("current"),Q.instance.triggerResize();this.index=r}createGroups(){let r=this.el.children;if(r.length<2)return;this.container=this.el.nextElementSibling;let n=this.container.children;this.groups=[];for(let i=0;i<r.length;i++)this.groups.push(new oe(r[i],n[i]))}onClick(r){this.groups.forEach((n,i)=>{n.signature===r.currentTarget&&this.setIndex(i)})}};var C="mousedown",Le="mousemove",_="mouseup",K={x:0,y:0},xe=!1,ae=!1,je=!1,A=!1,Ee=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(Ee?"is-mobile":"not-mobile");Ee&&"ontouchstart"in document.documentElement&&(je=!0,C="touchstart",Le="touchmove",_="touchend");document.addEventListener(C,t=>{ae=!0,A=!1;let e=C=="touchstart"?t.targetTouches[0]:t;K.y=e.pageY||0,K.x=e.pageX||0});document.addEventListener(Le,t=>{if(!!ae&&!A){let e=C=="touchstart"?t.targetTouches[0]:t,r=K.x-(e.pageX||0),n=K.y-(e.pageY||0);A=Math.sqrt(r*r+n*n)>10}});document.addEventListener(_,()=>{ae=!1});document.addEventListener("click",t=>{xe&&(t.preventDefault(),t.stopImmediatePropagation(),xe=!1)});var ee=class extends k{constructor(r){super(r);this.className=this.el.dataset.toggle||"",this.el.addEventListener(_,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(C,n=>this.onDocumentPointerDown(n)),document.addEventListener(_,n=>this.onDocumentPointerUp(n))}setActive(r){if(this.active==r)return;this.active=r,document.documentElement.classList.toggle("has-"+this.className,r),this.el.classList.toggle("active",r);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(r){A||(this.setActive(!0),r.preventDefault())}onDocumentPointerDown(r){if(this.active){if(r.target.closest(".col-menu, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(r){if(!A&&this.active&&r.target.closest(".col-menu")){let n=r.target.closest("a");if(n){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substr(0,i.indexOf("#"))),n.href.substr(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te=class{constructor(e,r){this.key=e,this.value=r,this.defaultValue=r,this.initialize(),window.localStorage[this.key]&&this.setValue(this.fromLocalStorage(window.localStorage[this.key]))}initialize(){}setValue(e){if(this.value==e)return;let r=this.value;this.value=e,window.localStorage[this.key]=this.toLocalStorage(e),this.handleValueChange(r,e)}},re=class extends te{initialize(){let r=document.querySelector("#tsd-filter-"+this.key);!r||(this.checkbox=r,this.checkbox.addEventListener("change",()=>{this.setValue(this.checkbox.checked)}))}handleValueChange(r,n){!this.checkbox||(this.checkbox.checked=this.value,document.documentElement.classList.toggle("toggle-"+this.key,this.value!=this.defaultValue))}fromLocalStorage(r){return r=="true"}toLocalStorage(r){return r?"true":"false"}},le=class extends te{initialize(){document.documentElement.classList.add("toggle-"+this.key+this.value);let r=document.querySelector("#tsd-filter-"+this.key);if(!r)return;this.select=r;let n=()=>{this.select.classList.add("active")},i=()=>{this.select.classList.remove("active")};this.select.addEventListener(C,n),this.select.addEventListener("mouseover",n),this.select.addEventListener("mouseleave",i),this.select.querySelectorAll("li").forEach(s=>{s.addEventListener(_,o=>{r.classList.remove("active"),this.setValue(o.target.dataset.value||"")})}),document.addEventListener(C,s=>{this.select.contains(s.target)||this.select.classList.remove("active")})}handleValueChange(r,n){this.select.querySelectorAll("li.selected").forEach(o=>{o.classList.remove("selected")});let i=this.select.querySelector('li[data-value="'+n+'"]'),s=this.select.querySelector(".tsd-select-label");i&&s&&(i.classList.add("selected"),s.textContent=i.textContent),document.documentElement.classList.remove("toggle-"+r),document.documentElement.classList.add("toggle-"+n)}fromLocalStorage(r){return r}toLocalStorage(r){return r}},j=class extends k{constructor(r){super(r);this.optionVisibility=new le("visibility","private"),this.optionInherited=new re("inherited",!0),this.optionExternals=new re("externals",!0)}static isSupported(){try{return typeof window.localStorage!="undefined"}catch{return!1}}};function we(t){let e=localStorage.getItem("tsd-theme")||"os";t.value=e,be(e),t.addEventListener("change",()=>{localStorage.setItem("tsd-theme",t.value),be(t.value)})}function be(t){switch(t){case"os":document.body.classList.remove("light","dark");break;case"light":document.body.classList.remove("dark"),document.body.classList.add("light");break;case"dark":document.body.classList.remove("light"),document.body.classList.add("dark");break}}ye();N(X,".menu-highlight");N(Z,".tsd-signatures");N(ee,"a[data-toggle]");j.isSupported()?N(j,"#tsd-filter"):document.documentElement.classList.add("no-filter");var Te=document.getElementById("theme");Te&&we(Te);var Be=new Y;Object.defineProperty(window,"app",{value:Be});})();
3
- /*!
4
- * lunr.Builder
5
- * Copyright (C) 2020 Oliver Nightingale
6
- */
7
- /*!
8
- * lunr.Index
9
- * Copyright (C) 2020 Oliver Nightingale
10
- */
11
- /*!
12
- * lunr.Pipeline
13
- * Copyright (C) 2020 Oliver Nightingale
14
- */
15
- /*!
16
- * lunr.Set
17
- * Copyright (C) 2020 Oliver Nightingale
18
- */
19
- /*!
20
- * lunr.TokenSet
21
- * Copyright (C) 2020 Oliver Nightingale
22
- */
23
- /*!
24
- * lunr.Vector
25
- * Copyright (C) 2020 Oliver Nightingale
26
- */
27
- /*!
28
- * lunr.stemmer
29
- * Copyright (C) 2020 Oliver Nightingale
30
- * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
31
- */
32
- /*!
33
- * lunr.stopWordFilter
34
- * Copyright (C) 2020 Oliver Nightingale
35
- */
36
- /*!
37
- * lunr.tokenizer
38
- * Copyright (C) 2020 Oliver Nightingale
39
- */
40
- /*!
41
- * lunr.trimmer
42
- * Copyright (C) 2020 Oliver Nightingale
43
- */
44
- /*!
45
- * lunr.utils
46
- * Copyright (C) 2020 Oliver Nightingale
47
- */
48
- /**
49
- * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
50
- * Copyright (C) 2020 Oliver Nightingale
51
- * @license MIT
52
- */
@@ -1 +0,0 @@
1
- window.searchData = JSON.parse("{\"kinds\":{\"128\":\"Class\",\"256\":\"Interface\",\"512\":\"Constructor\",\"1024\":\"Property\",\"2048\":\"Method\"},\"rows\":[{\"id\":0,\"kind\":256,\"name\":\"IWasmAPI\",\"url\":\"interfaces/IWasmAPI.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":1,\"kind\":2048,\"name\":\"init\",\"url\":\"interfaces/IWasmAPI.html#init\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"IWasmAPI\"},{\"id\":2,\"kind\":2048,\"name\":\"getImports\",\"url\":\"interfaces/IWasmAPI.html#getImports\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"IWasmAPI\"},{\"id\":3,\"kind\":256,\"name\":\"CoreAPI\",\"url\":\"interfaces/CoreAPI.html\",\"classes\":\"tsd-kind-interface\"},{\"id\":4,\"kind\":1024,\"name\":\"printI8\",\"url\":\"interfaces/CoreAPI.html#printI8\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":5,\"kind\":1024,\"name\":\"printU8\",\"url\":\"interfaces/CoreAPI.html#printU8\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":6,\"kind\":1024,\"name\":\"printU8Hex\",\"url\":\"interfaces/CoreAPI.html#printU8Hex\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":7,\"kind\":1024,\"name\":\"printI16\",\"url\":\"interfaces/CoreAPI.html#printI16\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":8,\"kind\":1024,\"name\":\"printU16\",\"url\":\"interfaces/CoreAPI.html#printU16\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":9,\"kind\":1024,\"name\":\"printU16Hex\",\"url\":\"interfaces/CoreAPI.html#printU16Hex\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":10,\"kind\":1024,\"name\":\"printI32\",\"url\":\"interfaces/CoreAPI.html#printI32\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":11,\"kind\":1024,\"name\":\"printU32\",\"url\":\"interfaces/CoreAPI.html#printU32\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":12,\"kind\":1024,\"name\":\"printU32Hex\",\"url\":\"interfaces/CoreAPI.html#printU32Hex\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":13,\"kind\":1024,\"name\":\"printF32\",\"url\":\"interfaces/CoreAPI.html#printF32\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":14,\"kind\":1024,\"name\":\"printF64\",\"url\":\"interfaces/CoreAPI.html#printF64\",\"classes\":\"tsd-kind-property tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":15,\"kind\":2048,\"name\":\"_printI8Array\",\"url\":\"interfaces/CoreAPI.html#_printI8Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":16,\"kind\":2048,\"name\":\"_printU8Array\",\"url\":\"interfaces/CoreAPI.html#_printU8Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":17,\"kind\":2048,\"name\":\"_printI16Array\",\"url\":\"interfaces/CoreAPI.html#_printI16Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":18,\"kind\":2048,\"name\":\"_printU16Array\",\"url\":\"interfaces/CoreAPI.html#_printU16Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":19,\"kind\":2048,\"name\":\"_printI32Array\",\"url\":\"interfaces/CoreAPI.html#_printI32Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":20,\"kind\":2048,\"name\":\"_printU32Array\",\"url\":\"interfaces/CoreAPI.html#_printU32Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":21,\"kind\":2048,\"name\":\"_printF32Array\",\"url\":\"interfaces/CoreAPI.html#_printF32Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":22,\"kind\":2048,\"name\":\"_printF64Array\",\"url\":\"interfaces/CoreAPI.html#_printF64Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":23,\"kind\":2048,\"name\":\"_printStr0\",\"url\":\"interfaces/CoreAPI.html#_printStr0\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":24,\"kind\":2048,\"name\":\"_printStr\",\"url\":\"interfaces/CoreAPI.html#_printStr\",\"classes\":\"tsd-kind-method tsd-parent-kind-interface\",\"parent\":\"CoreAPI\"},{\"id\":25,\"kind\":128,\"name\":\"WasmBridge\",\"url\":\"classes/WasmBridge.html\",\"classes\":\"tsd-kind-class\"},{\"id\":26,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/WasmBridge.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":27,\"kind\":1024,\"name\":\"i8\",\"url\":\"classes/WasmBridge.html#i8\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":28,\"kind\":1024,\"name\":\"u8\",\"url\":\"classes/WasmBridge.html#u8\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":29,\"kind\":1024,\"name\":\"i16\",\"url\":\"classes/WasmBridge.html#i16\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":30,\"kind\":1024,\"name\":\"u16\",\"url\":\"classes/WasmBridge.html#u16\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":31,\"kind\":1024,\"name\":\"i32\",\"url\":\"classes/WasmBridge.html#i32\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":32,\"kind\":1024,\"name\":\"u32\",\"url\":\"classes/WasmBridge.html#u32\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":33,\"kind\":1024,\"name\":\"f32\",\"url\":\"classes/WasmBridge.html#f32\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":34,\"kind\":1024,\"name\":\"f64\",\"url\":\"classes/WasmBridge.html#f64\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":35,\"kind\":1024,\"name\":\"utf8Decoder\",\"url\":\"classes/WasmBridge.html#utf8Decoder\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":36,\"kind\":1024,\"name\":\"utf8Encoder\",\"url\":\"classes/WasmBridge.html#utf8Encoder\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":37,\"kind\":1024,\"name\":\"core\",\"url\":\"classes/WasmBridge.html#core\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":38,\"kind\":1024,\"name\":\"logger\",\"url\":\"classes/WasmBridge.html#logger\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":39,\"kind\":1024,\"name\":\"children\",\"url\":\"classes/WasmBridge.html#children\",\"classes\":\"tsd-kind-property tsd-parent-kind-class tsd-is-protected\",\"parent\":\"WasmBridge\"},{\"id\":40,\"kind\":2048,\"name\":\"init\",\"url\":\"classes/WasmBridge.html#init\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":41,\"kind\":2048,\"name\":\"getImports\",\"url\":\"classes/WasmBridge.html#getImports\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":42,\"kind\":2048,\"name\":\"getI8Array\",\"url\":\"classes/WasmBridge.html#getI8Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":43,\"kind\":2048,\"name\":\"getU8Array\",\"url\":\"classes/WasmBridge.html#getU8Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":44,\"kind\":2048,\"name\":\"getI16Array\",\"url\":\"classes/WasmBridge.html#getI16Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":45,\"kind\":2048,\"name\":\"getU16Array\",\"url\":\"classes/WasmBridge.html#getU16Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":46,\"kind\":2048,\"name\":\"getI32Array\",\"url\":\"classes/WasmBridge.html#getI32Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":47,\"kind\":2048,\"name\":\"getU32Array\",\"url\":\"classes/WasmBridge.html#getU32Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":48,\"kind\":2048,\"name\":\"getF32Array\",\"url\":\"classes/WasmBridge.html#getF32Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":49,\"kind\":2048,\"name\":\"getF64Array\",\"url\":\"classes/WasmBridge.html#getF64Array\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":50,\"kind\":2048,\"name\":\"derefI8\",\"url\":\"classes/WasmBridge.html#derefI8\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":51,\"kind\":2048,\"name\":\"derefU8\",\"url\":\"classes/WasmBridge.html#derefU8\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":52,\"kind\":2048,\"name\":\"derefI16\",\"url\":\"classes/WasmBridge.html#derefI16\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":53,\"kind\":2048,\"name\":\"derefU16\",\"url\":\"classes/WasmBridge.html#derefU16\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":54,\"kind\":2048,\"name\":\"derefI32\",\"url\":\"classes/WasmBridge.html#derefI32\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":55,\"kind\":2048,\"name\":\"derefU32\",\"url\":\"classes/WasmBridge.html#derefU32\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":56,\"kind\":2048,\"name\":\"derefF32\",\"url\":\"classes/WasmBridge.html#derefF32\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":57,\"kind\":2048,\"name\":\"derefF64\",\"url\":\"classes/WasmBridge.html#derefF64\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":58,\"kind\":2048,\"name\":\"getString\",\"url\":\"classes/WasmBridge.html#getString\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":59,\"kind\":2048,\"name\":\"getElementById\",\"url\":\"classes/WasmBridge.html#getElementById\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":60,\"kind\":2048,\"name\":\"setString\",\"url\":\"classes/WasmBridge.html#setString\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"WasmBridge\"},{\"id\":61,\"kind\":128,\"name\":\"ObjectIndex\",\"url\":\"classes/ObjectIndex.html\",\"classes\":\"tsd-kind-class tsd-has-type-parameter\"},{\"id\":62,\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ObjectIndex.html#constructor\",\"classes\":\"tsd-kind-constructor tsd-parent-kind-class tsd-has-type-parameter\",\"parent\":\"ObjectIndex\"},{\"id\":63,\"kind\":1024,\"name\":\"name\",\"url\":\"classes/ObjectIndex.html#name\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"ObjectIndex\"},{\"id\":64,\"kind\":1024,\"name\":\"items\",\"url\":\"classes/ObjectIndex.html#items\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"ObjectIndex\"},{\"id\":65,\"kind\":1024,\"name\":\"logger\",\"url\":\"classes/ObjectIndex.html#logger\",\"classes\":\"tsd-kind-property tsd-parent-kind-class\",\"parent\":\"ObjectIndex\"},{\"id\":66,\"kind\":2048,\"name\":\"add\",\"url\":\"classes/ObjectIndex.html#add\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"ObjectIndex\"},{\"id\":67,\"kind\":2048,\"name\":\"removeID\",\"url\":\"classes/ObjectIndex.html#removeID\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"ObjectIndex\"},{\"id\":68,\"kind\":2048,\"name\":\"getID\",\"url\":\"classes/ObjectIndex.html#getID\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"ObjectIndex\"},{\"id\":69,\"kind\":2048,\"name\":\"findID\",\"url\":\"classes/ObjectIndex.html#findID\",\"classes\":\"tsd-kind-method tsd-parent-kind-class\",\"parent\":\"ObjectIndex\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"parent\"],\"fieldVectors\":[[\"name/0\",[0,30.099]],[\"parent/0\",[]],[\"name/1\",[1,33.464]],[\"parent/1\",[0,2.937]],[\"name/2\",[2,33.464]],[\"parent/2\",[0,2.937]],[\"name/3\",[3,11.492]],[\"parent/3\",[]],[\"name/4\",[4,38.572]],[\"parent/4\",[3,1.121]],[\"name/5\",[5,38.572]],[\"parent/5\",[3,1.121]],[\"name/6\",[6,38.572]],[\"parent/6\",[3,1.121]],[\"name/7\",[7,38.572]],[\"parent/7\",[3,1.121]],[\"name/8\",[8,38.572]],[\"parent/8\",[3,1.121]],[\"name/9\",[9,38.572]],[\"parent/9\",[3,1.121]],[\"name/10\",[10,38.572]],[\"parent/10\",[3,1.121]],[\"name/11\",[11,38.572]],[\"parent/11\",[3,1.121]],[\"name/12\",[12,38.572]],[\"parent/12\",[3,1.121]],[\"name/13\",[13,38.572]],[\"parent/13\",[3,1.121]],[\"name/14\",[14,38.572]],[\"parent/14\",[3,1.121]],[\"name/15\",[15,38.572]],[\"parent/15\",[3,1.121]],[\"name/16\",[16,38.572]],[\"parent/16\",[3,1.121]],[\"name/17\",[17,38.572]],[\"parent/17\",[3,1.121]],[\"name/18\",[18,38.572]],[\"parent/18\",[3,1.121]],[\"name/19\",[19,38.572]],[\"parent/19\",[3,1.121]],[\"name/20\",[20,38.572]],[\"parent/20\",[3,1.121]],[\"name/21\",[21,38.572]],[\"parent/21\",[3,1.121]],[\"name/22\",[22,38.572]],[\"parent/22\",[3,1.121]],[\"name/23\",[23,38.572]],[\"parent/23\",[3,1.121]],[\"name/24\",[24,38.572]],[\"parent/24\",[3,1.121]],[\"name/25\",[25,6.654]],[\"parent/25\",[]],[\"name/26\",[26,33.464]],[\"parent/26\",[25,0.649]],[\"name/27\",[27,38.572]],[\"parent/27\",[25,0.649]],[\"name/28\",[28,38.572]],[\"parent/28\",[25,0.649]],[\"name/29\",[29,38.572]],[\"parent/29\",[25,0.649]],[\"name/30\",[30,38.572]],[\"parent/30\",[25,0.649]],[\"name/31\",[31,38.572]],[\"parent/31\",[25,0.649]],[\"name/32\",[32,38.572]],[\"parent/32\",[25,0.649]],[\"name/33\",[33,38.572]],[\"parent/33\",[25,0.649]],[\"name/34\",[34,38.572]],[\"parent/34\",[25,0.649]],[\"name/35\",[35,38.572]],[\"parent/35\",[25,0.649]],[\"name/36\",[36,38.572]],[\"parent/36\",[25,0.649]],[\"name/37\",[37,38.572]],[\"parent/37\",[25,0.649]],[\"name/38\",[38,33.464]],[\"parent/38\",[25,0.649]],[\"name/39\",[39,38.572]],[\"parent/39\",[25,0.649]],[\"name/40\",[1,33.464]],[\"parent/40\",[25,0.649]],[\"name/41\",[2,33.464]],[\"parent/41\",[25,0.649]],[\"name/42\",[40,38.572]],[\"parent/42\",[25,0.649]],[\"name/43\",[41,38.572]],[\"parent/43\",[25,0.649]],[\"name/44\",[42,38.572]],[\"parent/44\",[25,0.649]],[\"name/45\",[43,38.572]],[\"parent/45\",[25,0.649]],[\"name/46\",[44,38.572]],[\"parent/46\",[25,0.649]],[\"name/47\",[45,38.572]],[\"parent/47\",[25,0.649]],[\"name/48\",[46,38.572]],[\"parent/48\",[25,0.649]],[\"name/49\",[47,38.572]],[\"parent/49\",[25,0.649]],[\"name/50\",[48,38.572]],[\"parent/50\",[25,0.649]],[\"name/51\",[49,38.572]],[\"parent/51\",[25,0.649]],[\"name/52\",[50,38.572]],[\"parent/52\",[25,0.649]],[\"name/53\",[51,38.572]],[\"parent/53\",[25,0.649]],[\"name/54\",[52,38.572]],[\"parent/54\",[25,0.649]],[\"name/55\",[53,38.572]],[\"parent/55\",[25,0.649]],[\"name/56\",[54,38.572]],[\"parent/56\",[25,0.649]],[\"name/57\",[55,38.572]],[\"parent/57\",[25,0.649]],[\"name/58\",[56,38.572]],[\"parent/58\",[25,0.649]],[\"name/59\",[57,38.572]],[\"parent/59\",[25,0.649]],[\"name/60\",[58,38.572]],[\"parent/60\",[25,0.649]],[\"name/61\",[59,20.114]],[\"parent/61\",[]],[\"name/62\",[26,33.464]],[\"parent/62\",[59,1.963]],[\"name/63\",[60,38.572]],[\"parent/63\",[59,1.963]],[\"name/64\",[61,38.572]],[\"parent/64\",[59,1.963]],[\"name/65\",[38,33.464]],[\"parent/65\",[59,1.963]],[\"name/66\",[62,38.572]],[\"parent/66\",[59,1.963]],[\"name/67\",[63,38.572]],[\"parent/67\",[59,1.963]],[\"name/68\",[64,38.572]],[\"parent/68\",[59,1.963]],[\"name/69\",[65,38.572]],[\"parent/69\",[59,1.963]]],\"invertedIndex\":[[\"_printf32array\",{\"_index\":21,\"name\":{\"21\":{}},\"parent\":{}}],[\"_printf64array\",{\"_index\":22,\"name\":{\"22\":{}},\"parent\":{}}],[\"_printi16array\",{\"_index\":17,\"name\":{\"17\":{}},\"parent\":{}}],[\"_printi32array\",{\"_index\":19,\"name\":{\"19\":{}},\"parent\":{}}],[\"_printi8array\",{\"_index\":15,\"name\":{\"15\":{}},\"parent\":{}}],[\"_printstr\",{\"_index\":24,\"name\":{\"24\":{}},\"parent\":{}}],[\"_printstr0\",{\"_index\":23,\"name\":{\"23\":{}},\"parent\":{}}],[\"_printu16array\",{\"_index\":18,\"name\":{\"18\":{}},\"parent\":{}}],[\"_printu32array\",{\"_index\":20,\"name\":{\"20\":{}},\"parent\":{}}],[\"_printu8array\",{\"_index\":16,\"name\":{\"16\":{}},\"parent\":{}}],[\"add\",{\"_index\":62,\"name\":{\"66\":{}},\"parent\":{}}],[\"children\",{\"_index\":39,\"name\":{\"39\":{}},\"parent\":{}}],[\"constructor\",{\"_index\":26,\"name\":{\"26\":{},\"62\":{}},\"parent\":{}}],[\"core\",{\"_index\":37,\"name\":{\"37\":{}},\"parent\":{}}],[\"coreapi\",{\"_index\":3,\"name\":{\"3\":{}},\"parent\":{\"4\":{},\"5\":{},\"6\":{},\"7\":{},\"8\":{},\"9\":{},\"10\":{},\"11\":{},\"12\":{},\"13\":{},\"14\":{},\"15\":{},\"16\":{},\"17\":{},\"18\":{},\"19\":{},\"20\":{},\"21\":{},\"22\":{},\"23\":{},\"24\":{}}}],[\"dereff32\",{\"_index\":54,\"name\":{\"56\":{}},\"parent\":{}}],[\"dereff64\",{\"_index\":55,\"name\":{\"57\":{}},\"parent\":{}}],[\"derefi16\",{\"_index\":50,\"name\":{\"52\":{}},\"parent\":{}}],[\"derefi32\",{\"_index\":52,\"name\":{\"54\":{}},\"parent\":{}}],[\"derefi8\",{\"_index\":48,\"name\":{\"50\":{}},\"parent\":{}}],[\"derefu16\",{\"_index\":51,\"name\":{\"53\":{}},\"parent\":{}}],[\"derefu32\",{\"_index\":53,\"name\":{\"55\":{}},\"parent\":{}}],[\"derefu8\",{\"_index\":49,\"name\":{\"51\":{}},\"parent\":{}}],[\"f32\",{\"_index\":33,\"name\":{\"33\":{}},\"parent\":{}}],[\"f64\",{\"_index\":34,\"name\":{\"34\":{}},\"parent\":{}}],[\"findid\",{\"_index\":65,\"name\":{\"69\":{}},\"parent\":{}}],[\"getelementbyid\",{\"_index\":57,\"name\":{\"59\":{}},\"parent\":{}}],[\"getf32array\",{\"_index\":46,\"name\":{\"48\":{}},\"parent\":{}}],[\"getf64array\",{\"_index\":47,\"name\":{\"49\":{}},\"parent\":{}}],[\"geti16array\",{\"_index\":42,\"name\":{\"44\":{}},\"parent\":{}}],[\"geti32array\",{\"_index\":44,\"name\":{\"46\":{}},\"parent\":{}}],[\"geti8array\",{\"_index\":40,\"name\":{\"42\":{}},\"parent\":{}}],[\"getid\",{\"_index\":64,\"name\":{\"68\":{}},\"parent\":{}}],[\"getimports\",{\"_index\":2,\"name\":{\"2\":{},\"41\":{}},\"parent\":{}}],[\"getstring\",{\"_index\":56,\"name\":{\"58\":{}},\"parent\":{}}],[\"getu16array\",{\"_index\":43,\"name\":{\"45\":{}},\"parent\":{}}],[\"getu32array\",{\"_index\":45,\"name\":{\"47\":{}},\"parent\":{}}],[\"getu8array\",{\"_index\":41,\"name\":{\"43\":{}},\"parent\":{}}],[\"i16\",{\"_index\":29,\"name\":{\"29\":{}},\"parent\":{}}],[\"i32\",{\"_index\":31,\"name\":{\"31\":{}},\"parent\":{}}],[\"i8\",{\"_index\":27,\"name\":{\"27\":{}},\"parent\":{}}],[\"init\",{\"_index\":1,\"name\":{\"1\":{},\"40\":{}},\"parent\":{}}],[\"items\",{\"_index\":61,\"name\":{\"64\":{}},\"parent\":{}}],[\"iwasmapi\",{\"_index\":0,\"name\":{\"0\":{}},\"parent\":{\"1\":{},\"2\":{}}}],[\"logger\",{\"_index\":38,\"name\":{\"38\":{},\"65\":{}},\"parent\":{}}],[\"name\",{\"_index\":60,\"name\":{\"63\":{}},\"parent\":{}}],[\"objectindex\",{\"_index\":59,\"name\":{\"61\":{}},\"parent\":{\"62\":{},\"63\":{},\"64\":{},\"65\":{},\"66\":{},\"67\":{},\"68\":{},\"69\":{}}}],[\"printf32\",{\"_index\":13,\"name\":{\"13\":{}},\"parent\":{}}],[\"printf64\",{\"_index\":14,\"name\":{\"14\":{}},\"parent\":{}}],[\"printi16\",{\"_index\":7,\"name\":{\"7\":{}},\"parent\":{}}],[\"printi32\",{\"_index\":10,\"name\":{\"10\":{}},\"parent\":{}}],[\"printi8\",{\"_index\":4,\"name\":{\"4\":{}},\"parent\":{}}],[\"printu16\",{\"_index\":8,\"name\":{\"8\":{}},\"parent\":{}}],[\"printu16hex\",{\"_index\":9,\"name\":{\"9\":{}},\"parent\":{}}],[\"printu32\",{\"_index\":11,\"name\":{\"11\":{}},\"parent\":{}}],[\"printu32hex\",{\"_index\":12,\"name\":{\"12\":{}},\"parent\":{}}],[\"printu8\",{\"_index\":5,\"name\":{\"5\":{}},\"parent\":{}}],[\"printu8hex\",{\"_index\":6,\"name\":{\"6\":{}},\"parent\":{}}],[\"removeid\",{\"_index\":63,\"name\":{\"67\":{}},\"parent\":{}}],[\"setstring\",{\"_index\":58,\"name\":{\"60\":{}},\"parent\":{}}],[\"u16\",{\"_index\":30,\"name\":{\"30\":{}},\"parent\":{}}],[\"u32\",{\"_index\":32,\"name\":{\"32\":{}},\"parent\":{}}],[\"u8\",{\"_index\":28,\"name\":{\"28\":{}},\"parent\":{}}],[\"utf8decoder\",{\"_index\":35,\"name\":{\"35\":{}},\"parent\":{}}],[\"utf8encoder\",{\"_index\":36,\"name\":{\"36\":{}},\"parent\":{}}],[\"wasmbridge\",{\"_index\":25,\"name\":{\"25\":{}},\"parent\":{\"26\":{},\"27\":{},\"28\":{},\"29\":{},\"30\":{},\"31\":{},\"32\":{},\"33\":{},\"34\":{},\"35\":{},\"36\":{},\"37\":{},\"38\":{},\"39\":{},\"40\":{},\"41\":{},\"42\":{},\"43\":{},\"44\":{},\"45\":{},\"46\":{},\"47\":{},\"48\":{},\"49\":{},\"50\":{},\"51\":{},\"52\":{},\"53\":{},\"54\":{},\"55\":{},\"56\":{},\"57\":{},\"58\":{},\"59\":{},\"60\":{}}}]],\"pipeline\":[]}}");