@vulfram/transport-browser 0.19.2-alpha

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.
Binary file
@@ -0,0 +1,24 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ export const memory: WebAssembly.Memory;
4
+ export const __wbg_bufferresult_free: (a: number, b: number) => void;
5
+ export const bufferresult_result: (a: number) => number;
6
+ export const bufferresult_takeBuffer: (a: number, b: number) => void;
7
+ export const vulfram_dispose: () => number;
8
+ export const vulfram_get_profiling: () => number;
9
+ export const vulfram_init: () => number;
10
+ export const vulfram_receive_events: () => number;
11
+ export const vulfram_receive_queue: () => number;
12
+ export const vulfram_send_queue: (a: number, b: number) => number;
13
+ export const vulfram_tick: (a: number, b: number) => number;
14
+ export const vulfram_upload_buffer: (a: bigint, b: number, c: number, d: number) => number;
15
+ export const __wasm_bindgen_func_elem_1531: (a: number, b: number) => void;
16
+ export const __wasm_bindgen_func_elem_1533: (a: number, b: number, c: number) => void;
17
+ export const __wasm_bindgen_func_elem_3378: (a: number, b: number, c: number, d: number) => void;
18
+ export const __wasm_bindgen_func_elem_1532: (a: number, b: number, c: number) => void;
19
+ export const __wasm_bindgen_func_elem_1532_3: (a: number, b: number, c: number) => void;
20
+ export const __wbindgen_export: (a: number, b: number) => number;
21
+ export const __wbindgen_export2: (a: number, b: number, c: number, d: number) => number;
22
+ export const __wbindgen_export3: (a: number) => void;
23
+ export const __wbindgen_add_to_stack_pointer: (a: number) => number;
24
+ export const __wbindgen_export4: (a: number, b: number, c: number) => void;
package/package.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "@vulfram/transport-browser",
3
+ "version": "0.19.2-alpha",
4
+ "module": "src/index.ts",
5
+ "main": "src/index.ts",
6
+ "types": "src/index.ts",
7
+ "type": "module",
8
+ "publishConfig": {
9
+ "access": "public"
10
+ },
11
+ "dependencies": {
12
+ "@vulfram/transport-types": "^0.3.0"
13
+ },
14
+ "devDependencies": {
15
+ "@types/bun": "^1.3.10"
16
+ }
17
+ }
package/src/index.ts ADDED
@@ -0,0 +1,148 @@
1
+ import type { EngineTransport, EngineTransportFactory } from '@vulfram/transport-types';
2
+ import {
3
+ VULFRAM_R2_DEFAULT_BASE_URL,
4
+ buildArtifactUrl,
5
+ parsePackageArtifactTarget,
6
+ } from '@vulfram/transport-types';
7
+
8
+ import pkg from '../package.json' with { type: 'json' };
9
+
10
+ export type InitInput = unknown | Promise<unknown>;
11
+
12
+ type WasmBufferResult = {
13
+ result: number;
14
+ takeBuffer: () => Uint8Array;
15
+ free: () => void;
16
+ };
17
+
18
+ type WasmBindings = {
19
+ default: (moduleOrPath?: InitInput) => Promise<unknown>;
20
+ vulfram_dispose: () => number;
21
+ vulfram_get_profiling: () => WasmBufferResult;
22
+ vulfram_init: () => number;
23
+ vulfram_receive_events: () => WasmBufferResult;
24
+ vulfram_receive_queue: () => WasmBufferResult;
25
+ vulfram_send_queue: (data: Uint8Array) => number;
26
+ vulfram_tick: (timeMs: number, deltaMs: number) => number;
27
+ vulfram_upload_buffer: (
28
+ id: bigint,
29
+ uploadType: number,
30
+ data: Uint8Array,
31
+ ) => number;
32
+ };
33
+
34
+ const packageVersion = (pkg as { version?: string }).version ?? '0.0.0';
35
+ const { channel, artifactVersion } = parsePackageArtifactTarget(packageVersion);
36
+
37
+ let initialized = false;
38
+ let bindings: WasmBindings | null = null;
39
+
40
+ function resolveBrowserArtifactUrl(artifact: string): string {
41
+ return buildArtifactUrl({
42
+ baseUrl: VULFRAM_R2_DEFAULT_BASE_URL,
43
+ channel,
44
+ artifactVersion,
45
+ binding: 'wasm',
46
+ platform: 'browser',
47
+ artifact,
48
+ });
49
+ }
50
+
51
+ async function loadBindings(): Promise<WasmBindings> {
52
+ if (bindings) return bindings;
53
+
54
+ try {
55
+ const localModulePath = '../lib/vulfram_core.js';
56
+ bindings = (await import(
57
+ /* @vite-ignore */ localModulePath
58
+ )) as WasmBindings;
59
+ return bindings;
60
+ } catch {
61
+ const remoteModule = resolveBrowserArtifactUrl('vulfram_core.js');
62
+ bindings = (await import(
63
+ /* @vite-ignore */ remoteModule
64
+ )) as WasmBindings;
65
+ return bindings;
66
+ }
67
+ }
68
+
69
+ function ensureInitialized(): void {
70
+ if (!initialized || !bindings) {
71
+ throw new Error(
72
+ 'Browser transport not initialized. Call initBrowserTransport() first.',
73
+ );
74
+ }
75
+ }
76
+
77
+ function unwrapBufferResult(result: WasmBufferResult): {
78
+ buffer: Uint8Array;
79
+ result: number;
80
+ } {
81
+ const buffer = result.takeBuffer();
82
+ const code = result.result;
83
+ result.free();
84
+ return { buffer, result: code };
85
+ }
86
+
87
+ export async function initBrowserTransport(
88
+ moduleOrPath?: InitInput,
89
+ ): Promise<void> {
90
+ if (initialized) return;
91
+ const wasm = await loadBindings();
92
+
93
+ try {
94
+ await wasm.default(moduleOrPath);
95
+ } catch (error) {
96
+ if (moduleOrPath !== undefined) {
97
+ throw error;
98
+ }
99
+
100
+ const fallbackWasmUrl = resolveBrowserArtifactUrl('vulfram_core_bg.wasm');
101
+ await wasm.default(fallbackWasmUrl);
102
+ }
103
+
104
+ initialized = true;
105
+ }
106
+
107
+ const transportImpl: EngineTransport = {
108
+ vulframInit: () => {
109
+ ensureInitialized();
110
+ return bindings!.vulfram_init();
111
+ },
112
+ vulframDispose: () => {
113
+ ensureInitialized();
114
+ return bindings!.vulfram_dispose();
115
+ },
116
+ vulframSendQueue: (buffer) => {
117
+ ensureInitialized();
118
+ return bindings!.vulfram_send_queue(buffer);
119
+ },
120
+ vulframReceiveQueue: () => {
121
+ ensureInitialized();
122
+ return unwrapBufferResult(bindings!.vulfram_receive_queue());
123
+ },
124
+ vulframReceiveEvents: () => {
125
+ ensureInitialized();
126
+ return unwrapBufferResult(bindings!.vulfram_receive_events());
127
+ },
128
+ vulframUploadBuffer: (id, uploadType, buffer) => {
129
+ ensureInitialized();
130
+ return bindings!.vulfram_upload_buffer(BigInt(id), uploadType, buffer);
131
+ },
132
+ vulframTick: (timeMs, deltaMs) => {
133
+ ensureInitialized();
134
+ return bindings!.vulfram_tick(timeMs, deltaMs);
135
+ },
136
+ vulframGetProfiling: () => {
137
+ ensureInitialized();
138
+ return unwrapBufferResult(bindings!.vulfram_get_profiling());
139
+ },
140
+ };
141
+
142
+ export const transportBrowser: EngineTransportFactory = () => {
143
+ ensureInitialized();
144
+ return transportImpl;
145
+ };
146
+
147
+ export const initWasmTransport = initBrowserTransport;
148
+ export const transportWasm = transportBrowser;
package/tsconfig.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "compilerOptions": {
3
+ // Environment setup & latest features
4
+ "lib": ["ESNext"],
5
+ "target": "ESNext",
6
+ "module": "Preserve",
7
+ "moduleDetection": "force",
8
+ "jsx": "react-jsx",
9
+ "allowJs": true,
10
+
11
+ // Bundler mode
12
+ "moduleResolution": "bundler",
13
+ "allowImportingTsExtensions": true,
14
+ "verbatimModuleSyntax": true,
15
+ "noEmit": true,
16
+
17
+ // Best practices
18
+ "strict": true,
19
+ "skipLibCheck": true,
20
+ "noFallthroughCasesInSwitch": true,
21
+ "noUncheckedIndexedAccess": true,
22
+ "noImplicitOverride": true,
23
+
24
+ // Some stricter flags (disabled by default)
25
+ "noUnusedLocals": false,
26
+ "noUnusedParameters": false,
27
+ "noPropertyAccessFromIndexSignature": false
28
+ }
29
+ }