import { ByteBuffer } from "peechy/bb"; import { Loader as BunLoader, TestKind, decodeGetTestsResponse, decodeScanResult, decodeTransformResponse, encodeGetTestsRequest, encodeScan, encodeTransform, type ScanResult, type TransformResponse, } from "./schema.js"; export enum Loader { jsx = BunLoader.jsx, js = BunLoader.js, tsx = BunLoader.tsx, ts = BunLoader.ts, } export interface TestReference { name: string, byteOffset: number, kind: 'test' | 'describe', } export type { ScanResult, TransformResponse }; const testKindMap = { [TestKind.describe_fn]: "describe", [TestKind.test_fn]: "test", }; const capturedErrors: string[] = []; let captureErrors = false; function normalizeLoader(file_name: string, loader?: keyof typeof Loader): BunLoader { return ( (loader ? { jsx: BunLoader.jsx, tsx: BunLoader.tsx, ts: BunLoader.ts, js: BunLoader.js, }[loader] : null) || { ".jsx": BunLoader.jsx, ".tsx": BunLoader.tsx, ".ts": BunLoader.ts, ".js": BunLoader.js, }[file_name.substring(file_name.lastIndexOf("."))] || BunLoader.js ); } interface WebAssemblyModule { init(heapSize: 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 Wasi = { clock_time_get(clk_id: unknown, tp: unknown) { return Date.now(); }, environ_sizes_get() { debugger; return 0; }, environ_get(__environ: unknown, environ_buf: unknown) { debugger; return 0; }, fd_close(fd: number) { debugger; return 0; }, proc_exit() {}, fd_seek(fd: number, offset_bigint: bigint, whence: unknown, newOffset: unknown) { debugger; }, fd_write(fd: unknown, iov: unknown, iovcnt: unknown, pnum: unknown) { debugger; }, }; const env = { console_log(slice: bigint) { // @ts-expect-error const text = Bun._wasmPtrLenToString(slice); if (captureErrors) { capturedErrors.push(text); return; } console.log(text); }, console_error(slice: bigint) { // @ts-expect-error const text = Bun._wasmPtrLenToString(slice); if (captureErrors) { capturedErrors.push(text); return; } console.error(text); }, console_warn(slice: bigint) { // @ts-expect-error console.warn(Bun._wasmPtrLenToString(slice)); }, console_info(slice: bigint) { // @ts-expect-error console.info(Bun._wasmPtrLenToString(slice)); }, __indirect_function_table: new WebAssembly.Table({ initial: 0, element: "anyfunc", }), __stack_pointer: new WebAssembly.Global({ mutable: true, value: "i32", }), __multi3(one: number, two: number) { return Math.imul(one | 0, two | 0); }, fmod(one: number, two: number) { return one % two; }, memset(ptr: number, value: number, len: number) { // @ts-expect-error Bun.memory_array.fill(value, ptr, ptr + len); }, memcpy(ptr: number, value: number, len: number) { // @ts-expect-error Bun.memory_array.copyWithin(ptr, value, value + len); }, // These functions convert a to an unsigned long long, rounding toward zero. Negative values all become zero. __fixunsdfti(a: number) { return Math.floor(a); }, // These functions return the remainder of the unsigned division of a and b. __umodti3(a: number, b: number) { return (a | 0) % (b | 0); }, // These functions return the quotient of the unsigned division of a and b. __udivti3(a: number, b: number) { return (a | 0) / (b | 0); }, // These functions return the result of shifting a left by b bits. __ashlti3(a: number, b: number) { return (a | 0) >> (b | 0); }, /* Returns: convert a to a double, rounding toward even. */ __floatuntidf(a: number) { const mod = a % 2; if (mod === 0) { return Math.ceil(a); } else if (mod === 1) { return Math.floor(a); } }, emscripten_notify_memory_growth() {}, }; export class Bun { private static has_initialized = false; private static wasm_source: WebAssembly.WebAssemblyInstantiatedSource; private static get wasm_exports(): WebAssemblyModule { return Bun.wasm_source.instance.exports as unknown as WebAssemblyModule; } private static get memory(): WebAssembly.Memory { 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 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: bigint) { if (!Bun._decoder) { Bun._decoder = new TextDecoder("utf8"); } const region = Bun._wasmPtrToSlice(slice); return Bun._decoder.decode(region); } 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); if (typeof process === "undefined") { if (globalThis.WebAssembly.instantiateStreaming) { Bun.wasm_source = await globalThis.WebAssembly.instantiateStreaming(fetch(url), { env: env, wasi_snapshot_preview1: Wasi, }); } else if (typeof window !== "undefined") { const resp = await fetch(url); Bun.wasm_source = await globalThis.WebAssembly.instantiate(await resp.arrayBuffer(), { env: env, wasi_snapshot_preview1: Wasi, }); // is it node? } } else { const fs = await import("fs"); if (typeof url === 'string' && url.startsWith('file://')) { url = new URL(url); // fs.readFileSync cannot consume URL strings, only URL objects } Bun.wasm_source = await globalThis.WebAssembly.instantiate(fs.readFileSync(url), { env: env, wasi_snapshot_preview1: Wasi, }); } const res = Bun.wasm_exports.init(heapSize); if (res < 0) { throw new Error(`[Bun] Failed to initialize WASM module: code ${res}`); } Bun.has_initialized = true; } static getTests(content: Uint8Array, filename = "my.test.tsx") { const bb = new ByteBuffer(Bun.scratch); bb.length = 0; bb.index = 0; const contents_buffer = content; encodeGetTestsRequest( { contents: contents_buffer, path: filename, }, bb, ); const data = bb.toUint8Array(); const input_ptr = Bun.wasm_exports.bun_malloc(data.length); var buffer = Bun._wasmPtrToSlice(input_ptr); buffer.set(data); captureErrors = true; try { var resp_ptr = Bun.wasm_exports.getTests(input_ptr); } catch (e) { throw e; } finally { captureErrors = false; Bun.wasm_exports.bun_free(input_ptr); } if (Number(resp_ptr) === 0) { if (capturedErrors.length) { const err = capturedErrors.slice(); capturedErrors.length = 0; throw new Error(err.join("\n").trim()); } throw new Error("Failed to parse"); } if (capturedErrors.length) { Bun.wasm_exports.bun_free(resp_ptr); const err = capturedErrors.slice(); capturedErrors.length = 0; throw new Error(err.join("\n").trim()); } var _bb = new ByteBuffer(Bun._wasmPtrToSlice(resp_ptr)); const response = decodeGetTestsResponse(_bb); var tests: TestReference[] = new Array(response.tests.length); for (var i = 0; i < response.tests.length; i++) { tests[i] = { name: new TextDecoder().decode( response.contents.subarray( response.tests[i].label.offset, response.tests[i].label.offset + response.tests[i].label.length, ), ), byteOffset: response.tests[i].byteOffset, kind: testKindMap[response.tests[i].kind] as 'test' | 'describe', }; } Bun.wasm_exports.bun_free(resp_ptr); return tests; } static transformSync(content: Uint8Array | string, file_name: string, loader?: keyof typeof Loader): TransformResponse { const bb = new ByteBuffer(Bun.scratch); bb.length = 0; bb.index = 0; var contents_buffer; if (typeof content === "string") { contents_buffer = Bun._encoder.encode(content); } else { contents_buffer = content; } encodeTransform( { contents: contents_buffer, path: file_name, loader: normalizeLoader(file_name, loader), }, bb, ); const data = bb.toUint8Array(); const input_ptr = Bun.wasm_exports.bun_malloc(data.length); var buffer = Bun._wasmPtrToSlice(input_ptr); buffer.set(data); const resp_ptr = Bun.wasm_exports.transform(input_ptr); var _bb = new ByteBuffer(Bun._wasmPtrToSlice(resp_ptr)); const response = decodeTransformResponse(_bb); Bun.wasm_exports.bun_free(input_ptr); Bun.scratch = bb.data; return response; } static scan(content: Uint8Array | string, file_name: string, loader?: keyof typeof Loader): ScanResult { const bb = new ByteBuffer(Bun.scratch); bb.length = 0; bb.index = 0; var contents_buffer; if (typeof content === "string") { contents_buffer = Bun._encoder.encode(content); } else { contents_buffer = content; } encodeScan( { contents: contents_buffer, path: file_name, loader: normalizeLoader(file_name, loader), }, bb, ); const data = bb.toUint8Array(); const input_ptr = Bun.wasm_exports.bun_malloc(data.length); var buffer = Bun._wasmPtrToSlice(input_ptr); buffer.set(data); 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); Bun.scratch = bb.data; return response; } } export const transformSync = Bun.transformSync; export const scan = Bun.scan; export const init = Bun.init; export const getTests = Bun.getTests; export default Bun; ey Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/packages/astro (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2022-03-01fix vite version (#2694)Gravatar Fred K. Schott 2-5/+5
2022-03-01fix: disable HMR during build (#2684)Gravatar Nate Moore 2-0/+6
2022-03-01[ci] update smoke tests (remote) (#2690)Gravatar github-actions[bot] 2-6/+4
2022-03-01[ci] collect statsGravatar FredKSchott 1-0/+1
2022-02-28[ci] update smoke tests (remote) (#2686)Gravatar github-actions[bot] 96-3363/+8217
2022-02-28[ci] update lockfile (#2687)Gravatar Fred K. Schott 1-101/+75
2022-03-01[ci] collect statsGravatar FredKSchott 1-0/+1
2022-02-28update ci branch nameGravatar Fred K. Schott 1-0/+2
2022-02-28Make smoke tests more deterministic (#2618)Gravatar Fred K. Schott 336-147/+34315
2022-02-28[ci] yarn formatGravatar natemoo-re 1-20/+20
2022-02-28[ci] release (#2683)astro@0.23.3Gravatar github-actions[bot] 31-54/+55
2022-02-28Fix typo (#2674)Gravatar Robin Millette 1-1/+1
2022-02-28[ci] update lockfile (#2676)Gravatar Fred K. Schott 1-6/+6
2022-02-28fix(runtime): do not render empty Fragment (#2667)Gravatar Mateus Esdras 1-0/+3
2022-02-28fix(hmr): HMR regression related to .astro updates (#2681)Gravatar Nate Moore 6-7/+24
2022-02-28Fix HTMLElement expression warning (#2675)Gravatar Jonathan Neal 1-1/+1
2022-02-28[ci] collect statsGravatar FredKSchott 1-0/+1
2022-02-27[ci] update lockfile (#2668)Gravatar Fred K. Schott 1-80/+80
2022-02-27[ci] collect statsGravatar FredKSchott 1-0/+1
2022-02-26[ci] collect statsGravatar FredKSchott 1-0/+1
2022-02-25[ci] yarn formatGravatar natemoo-re 1-20/+20
2022-02-25[ci] release (#2666)astro@0.23.2Gravatar github-actions[bot] 32-59/+57
2022-02-25[ci] yarn formatGravatar natemoo-re 2-12/+6
2022-02-25fix astro scoping of "@import" inside of style tags (#2656)Gravatar Fred K. Schott 3-6/+35
2022-02-25[ci] update lockfile (#2659)Gravatar Fred K. Schott 1-20/+20
2022-02-25feat: improve third-party Astro package compatability (#2665)Gravatar Nate Moore 3-6/+100
2022-02-25get new example working during buildGravatar Fred K. Schott 4-16/+21
2022-02-25[ci] yarn formatGravatar FredKSchott 1-7/+6
2022-02-25Add Non-HTML Pages example (#2637)Gravatar Joel Kuzmarski 11-0/+136
2022-02-25[ci] collect statsGravatar FredKSchott 1-0/+1
2022-02-24[ci] yarn formatGravatar natemoo-re 2-24/+24
2022-02-24[ci] release (#2641)astro@0.23.1@astrojs/markdown-remark@0.6.2Gravatar github-actions[bot] 38-90/+81
2022-02-24ensure utf8 encoding when serving html (#2654)Gravatar Fred K. Schott 3-4/+9
2022-02-24fix(core): Issue #2625. error with process.env.LANG larger than 5 (#2645)Gravatar Javier Cortés 2-1/+6
2022-02-24[ci] update lockfile (#2646)Gravatar Fred K. Schott 1-130/+124
2022-02-24chore: upgrade compiler (#2653)Gravatar Nate Moore 3-11/+11
2022-02-24[ci] yarn formatGravatar natemoo-re 2-5/+5
2022-02-24Add fine-grained HMR support (#2649)Gravatar Nate Moore 7-36/+37
2022-02-24[ci] collect statsGravatar FredKSchott 1-0/+1
2022-02-23Fixed incorrect types and imports (#2630)Gravatar Juan Martín Seery 27-35/+37
2022-02-23Add sass dev dep to blog-multiple-authors example (#2643)Gravatar Joel Kuzmarski 1-1/+2
2022-02-23Fix(component): align starting position in Markdown slot (#2631)Gravatar Shinobu Hayashi 4-6/+61
2022-02-23[ci] yarn formatGravatar matthewp 1-1/+1
2022-02-23Run all smoke tests with the static build (#2609)Gravatar Matthew Phillips 2-26/+32
2022-02-23[ci] collect statsGravatar FredKSchott 1-0/+1
2022-02-22[ci] update lockfile (#2624)Gravatar Fred K. Schott 1-171/+201
2022-02-22Fixed shiki import to work with "type": "module" (#2628)Gravatar Juan Martín Seery 3-5/+13