// --- FFIType --- var ffi = globalThis.Bun.FFI; export const ptr = (arg1, arg2) => (typeof arg2 === "undefined" ? ffi.ptr(arg1) : ffi.ptr(arg1, arg2)); export const toBuffer = ffi.toBuffer; export const toArrayBuffer = ffi.toArrayBuffer; export const viewSource = ffi.viewSource; const BunCString = ffi.CString; const nativeLinkSymbols = ffi.linkSymbols; const nativeDLOpen = ffi.dlopen; const nativeCallback = ffi.callback; const closeCallback = ffi.closeCallback; delete ffi.callback; delete ffi.closeCallback; export class JSCallback { constructor(cb, options) { const { ctx, ptr } = nativeCallback(options, cb); this.#ctx = ctx; this.ptr = ptr; this.#threadsafe = !!options?.threadsafe; } ptr; #ctx; #threadsafe; get threadsafe() { return this.#threadsafe; } [Symbol.toPrimitive]() { const { ptr } = this; return typeof ptr === "number" ? ptr : 0; } close() { const ctx = this.#ctx; this.ptr = null; this.#ctx = null; if (ctx) { closeCallback(ctx); } } } export class CString extends String { constructor(ptr, byteOffset, byteLength) { super( ptr ? typeof byteLength === "number" && Number.isSafeInteger(byteLength) ? new BunCString(ptr, byteOffset || 0, byteLength) : new BunCString(ptr) : "", ); this.ptr = typeof ptr === "number" ? ptr : 0; if (typeof byteOffset !== "undefined") { this.byteOffset = byteOffset; } if (typeof byteLength !== "undefined") { this.byteLength = byteLength; } } ptr; byteOffset; byteLength; #cachedArrayBuffer; get arrayBuffer() { if (this.#cachedArrayBuffer) { return this.#cachedArrayBuffer; } if (!this.ptr) { return (this.#cachedArrayBuffer = new ArrayBuffer(0)); } return (this.#cachedArrayBuffer = toArrayBuffer(this.ptr, this.byteOffset, this.byteLength)); } } Object.defineProperty(globalThis, "__GlobalBunCString", { value: CString, enumerable: false, configurable: false, }); const ffiWrappers = new Array(18); var char = val => val | 0; ffiWrappers.fill(char); ffiWrappers[FFIType.uint8_t] = function uint8(val) { return val < 0 ? 0 : val >= 255 ? 255 : val | 0; }; ffiWrappers[FFIType.int16_t] = function int16(val) { return val <= -32768 ? -32768 : val >= 32768 ? 32768 : val | 0; }; ffiWrappers[FFIType.uint16_t] = function uint16(val) { return val <= 0 ? 0 : val >= 65536 ? 65536 : val | 0; }; ffiWrappers[FFIType.int32_t] = function int32(val) { return val | 0; }; // we never want to return NaN ffiWrappers[FFIType.uint32_t] = function uint32(val) { return val <= 0 ? 0 : val >= 0xffffffff ? 0xffffffff : +val || 0; }; ffiWrappers[FFIType.i64_fast] = function int64(val) { if (typeof val === "bigint") { if (val <= BigInt(Number.MAX_SAFE_INTEGER) && val >= BigInt(-Number.MAX_SAFE_INTEGER)) { return Number(val).valueOf() || 0; } return val; } return !val ? 0 : +val || 0; }; ffiWrappers[FFIType.u64_fast] = function u64_fast(val) { if (typeof val === "bigint") { if (val <= BigInt(Number.MAX_SAFE_INTEGER) && val >= 0) { return Number(val).valueOf() || 0; } return val; } return !val ? 0 : +val || 0; }; ffiWrappers[FFIType.int64_t] = function int64(val) { if (typeof val === "bigint") { return val; } if (typeof val === "number") { return BigInt(val || 0); } return BigInt(+val || 0); }; ffiWrappers[FFIType.uint64_t] = function uint64(val) { if (typeof val === "bigint") { return val; } if (typeof val === "number") { return val <= 0 ? BigInt(0) : BigInt(val || 0); } return BigInt(+val || 0); }; ffiWrappers[FFIType.u64_fast] = function u64_fast(val) { if (typeof val === "bigint") { if (val <= BigInt(Number.MAX_SAFE_INTEGER) && val >= BigInt(0)) return Number(val); return val; } return typeof val === "number" ? (val <= 0 ? 0 : +val || 0) : +val || 0; }; ffiWrappers[FFIType.uint16_t] = function uint16(val) { const ret = (typeof val === "bigint" ? Number(val) : val) | 0; return ret <= 0 ? 0 : ret > 0xffff ? 0xffff : ret; }; ffiWrappers[FFIType.double] = function double(val) { if (typeof val === "bigint") { if (val.valueOf() < BigInt(Number.MAX_VALUE)) { return Math.abs(Number(val).valueOf()) + 0.00000000000001 - 0.00000000000001; } } if (!val) { return 0 + 0.00000000000001 - 0.00000000000001; } return val + 0.00000000000001 - 0.00000000000001; }; ffiWrappers[FFIType.float] = ffiWrappers[10] = function float(val) { return Math.fround(val); }; ffiWrappers[FFIType.bool] = function bool(val) { return !!val; }; // This prevents an extra property getter in potentially hot code Object.defineProperty(globalThis, "__GlobalBunFFIPtrFunctionForWrapper", { value: ptr, enumerable: false, configurable: true, }); ffiWrappers[FFIType.cstring] = ffiWrappers[FFIType.pointer] = function pointer(val) { if (typeof val === "number") return val; if (!val) { return null; } if (ArrayBuffer.isView(val) || val instanceof ArrayBuffer) { return __GlobalBunFFIPtrFunctionForWrapper(val); } if (typeof val === "string") { throw new TypeError("To convert a string to a pointer, encode it as a buffer"); } throw new TypeError(`Unable to convert ${val} to a pointer`); }; function cstringReturnType(val) { return new __GlobalBunCString(val); } ffiWrappers[FFIType.function] = function functionType(val) { if (typeof val === "number") { return val; } if (typeof val === "bigint") { return Number(val); } var ptr = val && val.ptr; if (!ptr) { throw new TypeError("Expected function to be a JSCallback or a number"); } return ptr; }; function FFIBuilder(params, returnType, functionToCall, name) { const hasReturnType = typeof FFIType[returnType] === "number" && FFIType[returnType] !== FFIType.void; var paramNames = new Array(params.length); var args = new Array(params.length); for (let i = 0; i < params.length; i++) { paramNames[i] = `p${i}`; const wrapper = ffiWrappers[FFIType[params[i]]]; if (wrapper) { // doing this inline benchmarked about 4x faster than referencing args[i] = `(${wrapper.toString()})(p${i})`; } else { throw new TypeError(`Unsupported type ${params[i]}. Must be one of: ${Object.keys(FFIType).sort().join(", ")}`); } } var code = `functionToCall(${args.join(", ")})`; if (hasReturnType) { if (FFIType[returnType] === FFIType.cstring) { code = `return (${cstringReturnType.toString()})(${code})`; } else { code = `return ${code}`; } } var func = new Function("functionToCall", ...paramNames, code); Object.defineProperty(func, "name", { value: name, }); // variadic arguments can be expensive // most FFI functions are going to be < 5 arguments // so we just inline it var wrap; switch (paramNames.length) { case 0: wrap = () => func(functionToCall); break; case 1: wrap = arg1 => func(functionToCall, arg1); break; case 2: wrap = (arg1, arg2) => func(functionToCall, arg1, arg2); break; case 3: wrap = (arg1, arg2, arg3) => func(functionToCall, arg1, arg2, arg3); break; case 4: wrap = (arg1, arg2, arg3, arg4) => func(functionToCall, arg1, arg2, arg3, arg4); break; case 5: wrap = (arg1, arg2, arg3, arg4, arg5) => func(functionToCall, arg1, arg2, arg3, arg4, arg5); break; case 6: wrap = (arg1, arg2, arg3, arg4, arg5, arg6) => func(functionToCall, arg1, arg2, arg3, arg4, arg5, arg6); break; case 7: wrap = (arg1, arg2, arg3, arg4, arg5, arg6, arg7) => func(functionToCall, arg1, arg2, arg3, arg4, arg5, arg6, arg7); break; case 8: wrap = (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) => func(functionToCall, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); break; case 9: wrap = (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) => func(functionToCall, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); break; default: { wrap = (...args) => func(functionToCall, ...args); break; } } wrap.native = functionToCall; wrap.ptr = functionToCall.ptr; return wrap; } export const native = { dlopen: nativeDLOpen, callback: () => { throw new Error("Deprecated. Use new JSCallback(options, fn) instead"); }, }; export function dlopen(path, options) { const result = nativeDLOpen(path, options); for (let key in result.symbols) { var symbol = result.symbols[key]; if (options[key]?.args?.length || FFIType[options[key]?.returns] === FFIType.cstring) { result.symbols[key] = FFIBuilder( options[key].args ?? [], options[key].returns ?? FFIType.void, symbol, // in stacktraces: // instead of // "/usr/lib/sqlite3.so" // we want // "sqlite3_get_version() - sqlit3.so" path.includes("/") ? `${key} (${path.split("/").pop()})` : `${key} (${path})`, ); } else { // consistentcy result.symbols[key].native = result.symbols[key]; } } return result; } export function linkSymbols(options) { const result = nativeLinkSymbols(options); for (let key in result.symbols) { var symbol = result.symbols[key]; if (options[key]?.args?.length || FFIType[options[key]?.returns] === FFIType.cstring) { result.symbols[key] = FFIBuilder(options[key].args ?? [], options[key].returns ?? FFIType.void, symbol, key); } else { // consistentcy result.symbols[key].native = result.symbols[key]; } } return result; } var cFunctionI = 0; var cFunctionRegistry; function onCloseCFunction(close) { close(); } export function CFunction(options) { const identifier = `CFunction${cFunctionI++}`; var result = linkSymbols({ [identifier]: options, }); var hasClosed = false; var close = result.close; result.symbols[identifier].close = () => { if (hasClosed || !close) return; hasClosed = true; close(); close = undefined; }; cFunctionRegistry ||= new FinalizationRegistry(onCloseCFunction); cFunctionRegistry.register(result.symbols[identifier], result.symbols[identifier].close); return result.symbols[identifier]; } export const read = ffi.read; Unnamed repository; edit this file 'description' to name the repository.
aboutsummaryrefslogtreecommitdiff
path: root/packages/integrations/prefetch/test/fixtures/style-prefetch (unfollow)
AgeCommit message (Expand)AuthorFilesLines
2023-08-22[ci] release (rc) (#8147)create-astro@4.0.0-rc.2astro@3.0.0-rc.5@astrojs/vue@3.0.0-rc.1@astrojs/vercel@4.0.0-rc.4@astrojs/underscore-redirects@0.3.0-rc.1@astrojs/telemetry@3.0.0-rc.3@astrojs/tailwind@5.0.0-rc.1@astrojs/svelte@4.0.0-rc.2@astrojs/solid-js@3.0.0-rc.3@astrojs/sitemap@3.0.0-rc.1@astrojs/rss@3.0.0-rc.1@astrojs/react@3.0.0-rc.4@astrojs/prism@3.0.0-rc.1@astrojs/prefetch@0.4.0-rc.1@astrojs/preact@3.0.0-rc.2@astrojs/partytown@2.0.0-rc.1@astrojs/node@6.0.0-rc.1@astrojs/netlify@3.0.0-rc.2@astrojs/mdx@1.0.0-rc.2@astrojs/markdown-remark@3.0.0-rc.1@astrojs/markdoc@0.5.0-rc.1@astrojs/lit@3.0.0-rc.1@astrojs/internal-helpers@0.2.0-rc.2@astrojs/deno@5.0.0-rc.1@astrojs/cloudflare@7.0.0-rc.3@astrojs/alpinejs@0.3.0-rc.1Gravatar Houston (Bot) 90-256/+565
2023-08-22Fix turbolink changesetGravatar bluwy 5-5/+1
2023-08-22chore: update lock fileGravatar Emanuele Stoppa 1-9/+151
2023-08-22chore: update bug report to use the `astro info` command (#8175)Gravatar Emanuele Stoppa 1-25/+5
2023-08-22Remove turbolinks integration (#8186)Gravatar Bjorn Lu 8-317/+0
2023-08-22[ci] formatGravatar ematipico 2-35/+42
2023-08-22add: config error if `outDir` is inside `publicDir` (#8152)Gravatar André Alves 3-0/+13
2023-08-22Deprecate drafts feature (#8099)Gravatar Bjorn Lu 7-7/+41
2023-08-21Use more permissive type for `defineCollection` schema option (#8163)Gravatar Chris Swithinbank 2-5/+7
2023-08-21feat: style scoped hash is lowercase (#8180)Gravatar Emanuele Stoppa 4-7/+48
2023-08-21RC Release candidate (#8179)Gravatar Matthew Phillips 2-1/+32
2023-08-21Set Markdoc integration version to a minor (#8177)Gravatar Matthew Phillips 1-1/+1
2023-08-21fix(@astrojs/node): handler should work with `express` (#8176)Gravatar Emanuele Stoppa 7-16/+221
2023-08-21[docs] deprecate build.split and build.excludeMiddleware in config ref (#8158)Gravatar Sarah Rainsberger 1-25/+7
2023-08-21chore: lock fileGravatar Emanuele Stoppa 1-0/+4
2023-08-21[ci] formatGravatar natemoo-re 4-9/+15
2023-08-21Stringify shouldn't throw on user object during rendering (#8127)Gravatar Nate Moore 9-46/+115
2023-08-21[ci] formatGravatar natemoo-re 1-1/+4
2023-08-21fix(dev): open to base path (#8123)Gravatar Nate Moore 2-1/+8
2023-08-21chore(gitpod): resolve potential globbing and word splitting issue (#8124)Gravatar Ben Elan 1-1/+1
2023-08-21fix(#6965): fix build stats (#8122)Gravatar Nate Moore 2-1/+8
2023-08-21only update our own history entires during back navigation through view trans...Gravatar Martin Trapp 2-3/+11
2023-08-21fix: reinsert attribute to specify direction of ViewTransition (forward / bac...Gravatar Martin Trapp 2-7/+12
2023-08-21Remove deprecated APIs (#8170)Gravatar Bjorn Lu 4-107/+5
2023-08-21Remove pre-shiki v0.14 theme names (#8169)Gravatar Bjorn Lu 6-80/+14
2023-08-21[docs] JSX framework integration READMEs (#8151)Gravatar Sarah Rainsberger 3-0/+104
2023-08-21fix(assets): Add missing type for imageConfig export (#8171)Gravatar Erika 2-1/+7
2023-08-21Deprecate simple objects from endpoints (#8132)Gravatar Bjorn Lu 20-201/+243
2023-08-18[docs] update scopedStyleStragegy default and description (#8148)Gravatar Sarah Rainsberger 1-2/+2
2023-08-18[ci] release (#8145)astro@2.10.12@astrojs/react@2.3.2@astrojs/node@5.3.5Gravatar Houston (Bot) 46-92/+98
2023-08-18Fix missing package file regression (#8149)Gravatar Matthew Phillips 2-1/+7
2023-08-18fix(node): delegate preview's not found and error handling to core/app (#8141)Gravatar Arsh 2-9/+6
2023-08-18Replace `class:list` implementation with `clsx` (#8142)Gravatar Nate Moore 12-68/+133
2023-08-18[ci] formatGravatar matthewp 1-1/+4
2023-08-18fix(data collections): normalize file paths for DataEntry.id (#8144)Gravatar Arsh 2-1/+6
2023-08-18[ci] release (beta) (#8140)astro@3.0.0-beta.4Gravatar Houston (Bot) 41-65/+72
2023-08-18[error messages] Update image errors-data.ts (#8126)Gravatar Sarah Rainsberger 1-12/+12
2023-08-18fix(polyfills): Use object shape for Stackblitz polyfill listGravatar Princesseuh 1-2/+2
2023-08-18fix: polyfill File using undici instead of node:buffer (#8139)Gravatar Erika 2-8/+9
2023-08-18[ci] release (beta) (#8073)create-astro@4.0.0-beta.1astro@3.0.0-beta.3@astrojs/vercel@4.0.0-beta.3@astrojs/telemetry@3.0.0-beta.2@astrojs/svelte@4.0.0-beta.1@astrojs/solid-js@3.0.0-beta.2@astrojs/react@3.0.0-beta.3@astrojs/mdx@1.0.0-beta.1@astrojs/cloudflare@7.0.0-beta.2Gravatar Houston (Bot) 63-117/+389
2023-08-18[ci] release (#8138)astro@2.10.11@astrojs/react@2.3.1Gravatar Houston (Bot) 44-80/+82
2023-08-18[ci] formatGravatar natemoo-re 1-1/+1
2023-08-18Fix 404 response leading to an infinite loop when there is no 404 page (#8136)Gravatar André Alves 2-1/+10
2023-08-18fix(react): add missing export (#8137)Gravatar Nate Moore 2-1/+7
2023-08-18[ci] release (#8096)create-astro@3.2.2astro@2.10.10@astrojs/vercel@3.8.2@astrojs/svelte@3.1.1@astrojs/solid-js@2.2.1@astrojs/react@2.3.0Gravatar Houston (Bot) 63-197/+186
2023-08-18changeset(next): inlineStylesheets default switch is major (#8133)Gravatar Arsh 1-1/+1
2023-08-18feat: add polyfills for stackblitz (#8130)Gravatar Erika 7-6/+86