aboutsummaryrefslogtreecommitdiff
path: root/packages/bun-wasm/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/bun-wasm/index.ts')
-rw-r--r--packages/bun-wasm/index.ts82
1 files changed, 32 insertions, 50 deletions
diff --git a/packages/bun-wasm/index.ts b/packages/bun-wasm/index.ts
index 72eed5220..9802d537e 100644
--- a/packages/bun-wasm/index.ts
+++ b/packages/bun-wasm/index.ts
@@ -10,7 +10,7 @@ import {
encodeTransform,
type ScanResult,
type TransformResponse,
-} from "./schema";
+} from "./schema.js";
export enum Loader {
jsx = BunLoader.jsx,
@@ -54,17 +54,13 @@ function normalizeLoader(file_name: string, loader?: keyof typeof Loader): BunLo
interface WebAssemblyModule {
init(heapSize: number): number;
- transform(a: number): number;
- bun_malloc(a: number): number;
- bun_free(a: number): number;
- scan(a: number): number;
- getTests(a: number): number;
+ transform(a: bigint): bigint;
+ bun_malloc(a: number | bigint): bigint;
+ bun_free(a: bigint): void;
+ scan(a: bigint): bigint;
+ getTests(a: bigint): bigint;
}
-const ptr_converter = new ArrayBuffer(16);
-const ptr_float = new BigUint64Array(ptr_converter);
-const slice = new Uint32Array(ptr_converter);
-
const Wasi = {
clock_time_get(clk_id: unknown, tp: unknown) {
return Date.now();
@@ -92,11 +88,8 @@ const Wasi = {
},
};
-var scratch: Uint8Array;
-var scratch2: Uint8Array;
-
const env = {
- console_log(slice: number) {
+ console_log(slice: bigint) {
// @ts-expect-error
const text = Bun._wasmPtrLenToString(slice);
if (captureErrors) {
@@ -105,7 +98,7 @@ const env = {
}
console.log(text);
},
- console_error(slice: number) {
+ console_error(slice: bigint) {
// @ts-expect-error
const text = Bun._wasmPtrLenToString(slice);
if (captureErrors) {
@@ -114,11 +107,11 @@ const env = {
}
console.error(text);
},
- console_warn(slice: number) {
+ console_warn(slice: bigint) {
// @ts-expect-error
console.warn(Bun._wasmPtrLenToString(slice));
},
- console_info(slice: number) {
+ console_info(slice: bigint) {
// @ts-expect-error
console.info(Bun._wasmPtrLenToString(slice));
},
@@ -171,6 +164,7 @@ const env = {
},
emscripten_notify_memory_growth() {},
};
+
export class Bun {
private static has_initialized = false;
private static wasm_source: WebAssembly.WebAssemblyInstantiatedSource;
@@ -182,16 +176,22 @@ export class Bun {
return Bun.wasm_source.instance.exports.memory as WebAssembly.Memory;
}
+ private static scratch: Uint8Array = new Uint8Array(8096);
private static memory_array: Uint8Array;
private static _decoder: TextDecoder;
+ private static _encoder: TextEncoder = new TextEncoder();
- private static _wasmPtrToSlice(offset: number | bigint) {
- ptr_float[0] = typeof offset === "number" ? BigInt(offset) : offset;
- return new Uint8Array(Bun.memory.buffer, slice[0], slice[1]);
+ private static ptr_converter = new ArrayBuffer(16);
+ private static ptr_float = new BigUint64Array(Bun.ptr_converter);
+ private static ptr_slice = new Uint32Array(Bun.ptr_converter);
+
+ private static _wasmPtrToSlice(offset: bigint) {
+ Bun.ptr_float[0] = typeof offset === "number" ? BigInt(offset) : offset;
+ return new Uint8Array(Bun.memory.buffer, Bun.ptr_slice[0], Bun.ptr_slice[1]);
}
- private static _wasmPtrLenToString(slice: number) {
+ private static _wasmPtrLenToString(slice: bigint) {
if (!Bun._decoder) {
Bun._decoder = new TextDecoder("utf8");
}
@@ -201,14 +201,11 @@ export class Bun {
}
static async init(url?: URL | string | null, heapSize = 64_000_000, fetch = globalThis.fetch) {
+ if (Bun.has_initialized) return;
url ??= new URL("./bun.wasm", import.meta.url);
- scratch = new Uint8Array(8096);
- if (Bun.has_initialized) {
- return;
- }
if (typeof process === "undefined") {
- if (globalThis?.WebAssembly?.instantiateStreaming) {
+ if (globalThis.WebAssembly.instantiateStreaming) {
Bun.wasm_source = await globalThis.WebAssembly.instantiateStreaming(fetch(url), {
env: env,
wasi_snapshot_preview1: Wasi,
@@ -244,7 +241,7 @@ export class Bun {
}
static getTests(content: Uint8Array, filename = "my.test.tsx") {
- const bb = new ByteBuffer(scratch);
+ const bb = new ByteBuffer(Bun.scratch);
bb.length = 0;
bb.index = 0;
const contents_buffer = content;
@@ -313,25 +310,12 @@ export class Bun {
}
static transformSync(content: Uint8Array | string, file_name: string, loader?: keyof typeof Loader): TransformResponse {
- const bb = new ByteBuffer(scratch);
+ const bb = new ByteBuffer(Bun.scratch);
bb.length = 0;
bb.index = 0;
var contents_buffer;
if (typeof content === "string") {
- if (!scratch2) {
- scratch2 = new Uint8Array(content.length * 2);
- }
-
- let i = 0;
- for (; i < content.length; i++) {
- if (i > scratch2.length) {
- var scratch3 = new Uint8Array(scratch2.length * 2);
- scratch3.set(scratch2);
- scratch2 = scratch3;
- }
- scratch2[i] = content.charCodeAt(i);
- }
- contents_buffer = scratch2.subarray(0, i);
+ contents_buffer = Bun._encoder.encode(content);
} else {
contents_buffer = content;
}
@@ -353,21 +337,17 @@ export class Bun {
var _bb = new ByteBuffer(Bun._wasmPtrToSlice(resp_ptr));
const response = decodeTransformResponse(_bb);
Bun.wasm_exports.bun_free(input_ptr);
- scratch = bb.data;
+ Bun.scratch = bb.data;
return response;
}
static scan(content: Uint8Array | string, file_name: string, loader?: keyof typeof Loader): ScanResult {
- const bb = new ByteBuffer(scratch);
+ const bb = new ByteBuffer(Bun.scratch);
bb.length = 0;
bb.index = 0;
var contents_buffer;
if (typeof content === "string") {
- if (!scratch2) {
- scratch2 = new Uint8Array(content.length * 2);
- }
- const encode_into = new TextEncoder().encodeInto(content, scratch2);
- contents_buffer = scratch2.subarray(0, encode_into.written);
+ contents_buffer = Bun._encoder.encode(content);
} else {
contents_buffer = content;
}
@@ -388,9 +368,11 @@ export class Bun {
const resp_ptr = Bun.wasm_exports.scan(input_ptr);
var _bb = new ByteBuffer(Bun._wasmPtrToSlice(resp_ptr));
+ //console.log(resp_ptr, Bun.ptr_slice[0], Bun.ptr_slice[1], new Uint8Array(Bun.memory.buffer, Bun.ptr_slice[0], Bun.ptr_slice[1] + 82));
+ //console.log(_bb);
const response = decodeScanResult(_bb);
Bun.wasm_exports.bun_free(input_ptr);
- scratch = bb.data;
+ Bun.scratch = bb.data;
return response;
}
}