lucent-pack 0.1.0__py3-none-any.whl

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/comlink/src/comlink.ts","../src/config.ts","../src/debug.ts","../src/rwasm-constants.ts","../src/rWasmBootstrap.ts","../src/rWasmTasks.ts","../src/rWasmHttpDelivery.ts","../src/transport.ts","../src/wiring.ts","../src/rWasmWorker.ts"],"names":["obj","returnValue","proxy","cached","onDownloadProgress","onBootStatus","readVfsFile","readVfsFileAt","wsPushPort","transfer"],"mappings":"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","file":"rWasmWorker.js","sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {\n Endpoint,\n EventSource,\n Message,\n MessageType,\n PostMessageWithOrigin,\n WireValue,\n WireValueType,\n} from \"./protocol\";\nexport type { Endpoint };\n\nexport const proxyMarker = Symbol(\"Comlink.proxy\");\nexport const createEndpoint = Symbol(\"Comlink.endpoint\");\nexport const releaseProxy = Symbol(\"Comlink.releaseProxy\");\nexport const finalizer = Symbol(\"Comlink.finalizer\");\n\nconst throwMarker = Symbol(\"Comlink.thrown\");\n\n/**\n * Interface of values that were marked to be proxied with `comlink.proxy()`.\n * Can also be implemented by classes.\n */\nexport interface ProxyMarked {\n [proxyMarker]: true;\n}\n\n/**\n * Takes a type and wraps it in a Promise, if it not already is one.\n * This is to avoid `Promise<Promise<T>>`.\n *\n * This is the inverse of `Unpromisify<T>`.\n */\ntype Promisify<T> = T extends Promise<unknown> ? T : Promise<T>;\n/**\n * Takes a type that may be Promise and unwraps the Promise type.\n * If `P` is not a Promise, it returns `P`.\n *\n * This is the inverse of `Promisify<T>`.\n */\ntype Unpromisify<P> = P extends Promise<infer T> ? T : P;\n\n/**\n * Takes the raw type of a remote property and returns the type that is visible to the local thread on the proxy.\n *\n * Note: This needs to be its own type alias, otherwise it will not distribute over unions.\n * See https://www.typescriptlang.org/docs/handbook/advanced-types.html#distributive-conditional-types\n */\ntype RemoteProperty<T> =\n // If the value is a method, comlink will proxy it automatically.\n // Objects are only proxied if they are marked to be proxied.\n // Otherwise, the property is converted to a Promise that resolves the cloned value.\n T extends Function | ProxyMarked ? Remote<T> : Promisify<T>;\n\n/**\n * Takes the raw type of a property as a remote thread would see it through a proxy (e.g. when passed in as a function\n * argument) and returns the type that the local thread has to supply.\n *\n * This is the inverse of `RemoteProperty<T>`.\n *\n * Note: This needs to be its own type alias, otherwise it will not distribute over unions. See\n * https://www.typescriptlang.org/docs/handbook/advanced-types.html#distributive-conditional-types\n */\ntype LocalProperty<T> = T extends Function | ProxyMarked\n ? Local<T>\n : Unpromisify<T>;\n\n/**\n * Proxies `T` if it is a `ProxyMarked`, clones it otherwise (as handled by structured cloning and transfer handlers).\n */\nexport type ProxyOrClone<T> = T extends ProxyMarked ? Remote<T> : T;\n/**\n * Inverse of `ProxyOrClone<T>`.\n */\nexport type UnproxyOrClone<T> = T extends RemoteObject<ProxyMarked>\n ? Local<T>\n : T;\n\n/**\n * Takes the raw type of a remote object in the other thread and returns the type as it is visible to the local thread\n * when proxied with `Comlink.proxy()`.\n *\n * This does not handle call signatures, which is handled by the more general `Remote<T>` type.\n *\n * @template T The raw type of a remote object as seen in the other thread.\n */\nexport type RemoteObject<T> = { [P in keyof T]: RemoteProperty<T[P]> };\n/**\n * Takes the type of an object as a remote thread would see it through a proxy (e.g. when passed in as a function\n * argument) and returns the type that the local thread has to supply.\n *\n * This does not handle call signatures, which is handled by the more general `Local<T>` type.\n *\n * This is the inverse of `RemoteObject<T>`.\n *\n * @template T The type of a proxied object.\n */\nexport type LocalObject<T> = { [P in keyof T]: LocalProperty<T[P]> };\n\n/**\n * Additional special comlink methods available on each proxy returned by `Comlink.wrap()`.\n */\nexport interface ProxyMethods {\n [createEndpoint]: () => Promise<MessagePort>;\n [releaseProxy]: () => void;\n}\n\n/**\n * Takes the raw type of a remote object, function or class in the other thread and returns the type as it is visible to\n * the local thread from the proxy return value of `Comlink.wrap()` or `Comlink.proxy()`.\n */\nexport type Remote<T> =\n // Handle properties\n RemoteObject<T> &\n // Handle call signature (if present)\n (T extends (...args: infer TArguments) => infer TReturn\n ? (\n ...args: { [I in keyof TArguments]: UnproxyOrClone<TArguments[I]> }\n ) => Promisify<ProxyOrClone<Unpromisify<TReturn>>>\n : unknown) &\n // Handle construct signature (if present)\n // The return of construct signatures is always proxied (whether marked or not)\n (T extends { new (...args: infer TArguments): infer TInstance }\n ? {\n new (\n ...args: {\n [I in keyof TArguments]: UnproxyOrClone<TArguments[I]>;\n }\n ): Promisify<Remote<TInstance>>;\n }\n : unknown) &\n // Include additional special comlink methods available on the proxy.\n ProxyMethods;\n\n/**\n * Expresses that a type can be either a sync or async.\n */\ntype MaybePromise<T> = Promise<T> | T;\n\n/**\n * Takes the raw type of a remote object, function or class as a remote thread would see it through a proxy (e.g. when\n * passed in as a function argument) and returns the type the local thread has to supply.\n *\n * This is the inverse of `Remote<T>`. It takes a `Remote<T>` and returns its original input `T`.\n */\nexport type Local<T> =\n // Omit the special proxy methods (they don't need to be supplied, comlink adds them)\n Omit<LocalObject<T>, keyof ProxyMethods> &\n // Handle call signatures (if present)\n (T extends (...args: infer TArguments) => infer TReturn\n ? (\n ...args: { [I in keyof TArguments]: ProxyOrClone<TArguments[I]> }\n ) => // The raw function could either be sync or async, but is always proxied automatically\n MaybePromise<UnproxyOrClone<Unpromisify<TReturn>>>\n : unknown) &\n // Handle construct signature (if present)\n // The return of construct signatures is always proxied (whether marked or not)\n (T extends { new (...args: infer TArguments): infer TInstance }\n ? {\n new (\n ...args: {\n [I in keyof TArguments]: ProxyOrClone<TArguments[I]>;\n }\n ): // The raw constructor could either be sync or async, but is always proxied automatically\n MaybePromise<Local<Unpromisify<TInstance>>>;\n }\n : unknown);\n\nconst isObject = (val: unknown): val is object =>\n (typeof val === \"object\" && val !== null) || typeof val === \"function\";\n\n/**\n * Customizes the serialization of certain values as determined by `canHandle()`.\n *\n * @template T The input type being handled by this transfer handler.\n * @template S The serialized type sent over the wire.\n */\nexport interface TransferHandler<T, S> {\n /**\n * Gets called for every value to determine whether this transfer handler\n * should serialize the value, which includes checking that it is of the right\n * type (but can perform checks beyond that as well).\n */\n canHandle(value: unknown): value is T;\n\n /**\n * Gets called with the value if `canHandle()` returned `true` to produce a\n * value that can be sent in a message, consisting of structured-cloneable\n * values and/or transferrable objects.\n */\n serialize(value: T): [S, Transferable[]];\n\n /**\n * Gets called to deserialize an incoming value that was serialized in the\n * other thread with this transfer handler (known through the name it was\n * registered under).\n */\n deserialize(value: S): T;\n}\n\n/**\n * Internal transfer handle to handle objects marked to proxy.\n */\nconst proxyTransferHandler: TransferHandler<object, MessagePort> = {\n canHandle: (val): val is ProxyMarked =>\n isObject(val) && (val as ProxyMarked)[proxyMarker],\n serialize(obj) {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port1);\n return [port2, [port2]];\n },\n deserialize(port) {\n port.start();\n return wrap(port);\n },\n};\n\ninterface ThrownValue {\n [throwMarker]: unknown; // just needs to be present\n value: unknown;\n}\ntype SerializedThrownValue =\n | { isError: true; value: Error }\n | { isError: false; value: unknown };\ntype PendingListenersMap = Map<\n string,\n (value: WireValue | PromiseLike<WireValue>) => void\n>;\n\n/**\n * Internal transfer handler to handle thrown exceptions.\n */\nconst throwTransferHandler: TransferHandler<\n ThrownValue,\n SerializedThrownValue\n> = {\n canHandle: (value): value is ThrownValue =>\n isObject(value) && throwMarker in value,\n serialize({ value }) {\n let serialized: SerializedThrownValue;\n if (value instanceof Error) {\n serialized = {\n isError: true,\n value: {\n message: value.message,\n name: value.name,\n stack: value.stack,\n },\n };\n } else {\n serialized = { isError: false, value };\n }\n return [serialized, []];\n },\n deserialize(serialized) {\n if (serialized.isError) {\n throw Object.assign(\n new Error(serialized.value.message),\n serialized.value\n );\n }\n throw serialized.value;\n },\n};\n\n/**\n * Allows customizing the serialization of certain values.\n */\nexport const transferHandlers = new Map<\n string,\n TransferHandler<unknown, unknown>\n>([\n [\"proxy\", proxyTransferHandler],\n [\"throw\", throwTransferHandler],\n]);\n\nfunction isAllowedOrigin(\n allowedOrigins: (string | RegExp)[],\n origin: string\n): boolean {\n for (const allowedOrigin of allowedOrigins) {\n if (origin === allowedOrigin || allowedOrigin === \"*\") {\n return true;\n }\n if (allowedOrigin instanceof RegExp && allowedOrigin.test(origin)) {\n return true;\n }\n }\n return false;\n}\n\nexport function expose(\n obj: any,\n ep: Endpoint = globalThis as any,\n allowedOrigins: (string | RegExp)[] = [\"*\"]\n) {\n ep.addEventListener(\"message\", function callback(ev: MessageEvent) {\n if (!ev || !ev.data) {\n return;\n }\n if (!isAllowedOrigin(allowedOrigins, ev.origin)) {\n console.warn(`Invalid origin '${ev.origin}' for comlink proxy`);\n return;\n }\n const { id, type, path } = {\n path: [] as string[],\n ...(ev.data as Message),\n };\n const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n let returnValue;\n try {\n const parent = path.slice(0, -1).reduce((obj, prop) => obj[prop], obj);\n const rawValue = path.reduce((obj, prop) => obj[prop], obj);\n switch (type) {\n case MessageType.GET:\n {\n returnValue = rawValue;\n }\n break;\n case MessageType.SET:\n {\n parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n returnValue = true;\n }\n break;\n case MessageType.APPLY:\n {\n returnValue = rawValue.apply(parent, argumentList);\n }\n break;\n case MessageType.CONSTRUCT:\n {\n const value = new rawValue(...argumentList);\n returnValue = proxy(value);\n }\n break;\n case MessageType.ENDPOINT:\n {\n const { port1, port2 } = new MessageChannel();\n expose(obj, port2);\n returnValue = transfer(port1, [port1]);\n }\n break;\n case MessageType.RELEASE:\n {\n returnValue = undefined;\n }\n break;\n default:\n return;\n }\n } catch (value) {\n returnValue = { value, [throwMarker]: 0 };\n }\n Promise.resolve(returnValue)\n .catch((value) => {\n return { value, [throwMarker]: 0 };\n })\n .then((returnValue) => {\n const [wireValue, transferables] = toWireValue(returnValue);\n ep.postMessage({ ...wireValue, id }, transferables);\n if (type === MessageType.RELEASE) {\n // detach and deactive after sending release response above.\n ep.removeEventListener(\"message\", callback as any);\n closeEndPoint(ep);\n if (finalizer in obj && typeof obj[finalizer] === \"function\") {\n obj[finalizer]();\n }\n }\n })\n .catch((error) => {\n // Send Serialization Error To Caller\n const [wireValue, transferables] = toWireValue({\n value: new TypeError(\"Unserializable return value\"),\n [throwMarker]: 0,\n });\n ep.postMessage({ ...wireValue, id }, transferables);\n });\n } as any);\n if (ep.start) {\n ep.start();\n }\n}\n\nfunction isMessagePort(endpoint: Endpoint): endpoint is MessagePort {\n return endpoint.constructor.name === \"MessagePort\";\n}\n\nfunction closeEndPoint(endpoint: Endpoint) {\n if (isMessagePort(endpoint)) endpoint.close();\n}\n\nexport function wrap<T>(ep: Endpoint, target?: any): Remote<T> {\n const pendingListeners : PendingListenersMap = new Map();\n\n ep.addEventListener(\"message\", function handleMessage(ev: Event) {\n const { data } = ev as MessageEvent;\n if (!data || !data.id) {\n return;\n }\n const resolver = pendingListeners.get(data.id);\n if (!resolver) {\n return;\n }\n\n try {\n resolver(data);\n } finally {\n pendingListeners.delete(data.id);\n }\n });\n\n return createProxy<T>(ep, pendingListeners, [], target) as any;\n}\n\nfunction throwIfProxyReleased(isReleased: boolean) {\n if (isReleased) {\n throw new Error(\"Proxy has been released and is not useable\");\n }\n}\n\nfunction releaseEndpoint(ep: Endpoint) {\n return requestResponseMessage(ep, new Map(), {\n type: MessageType.RELEASE,\n }).then(() => {\n closeEndPoint(ep);\n });\n}\n\ninterface FinalizationRegistry<T> {\n new (cb: (heldValue: T) => void): FinalizationRegistry<T>;\n register(\n weakItem: object,\n heldValue: T,\n unregisterToken?: object | undefined\n ): void;\n unregister(unregisterToken: object): void;\n}\ndeclare var FinalizationRegistry: FinalizationRegistry<Endpoint>;\n\nconst proxyCounter = new WeakMap<Endpoint, number>();\nconst proxyFinalizers =\n \"FinalizationRegistry\" in globalThis &&\n new FinalizationRegistry((ep: Endpoint) => {\n const newCount = (proxyCounter.get(ep) || 0) - 1;\n proxyCounter.set(ep, newCount);\n if (newCount === 0) {\n releaseEndpoint(ep);\n }\n });\n\nfunction registerProxy(proxy: object, ep: Endpoint) {\n const newCount = (proxyCounter.get(ep) || 0) + 1;\n proxyCounter.set(ep, newCount);\n if (proxyFinalizers) {\n proxyFinalizers.register(proxy, ep, proxy);\n }\n}\n\nfunction unregisterProxy(proxy: object) {\n if (proxyFinalizers) {\n proxyFinalizers.unregister(proxy);\n }\n}\n\nfunction createProxy<T>(\n ep: Endpoint,\n pendingListeners: PendingListenersMap,\n path: (string | number | symbol)[] = [],\n target: object = function () {}\n): Remote<T> {\n let isProxyReleased = false;\n const proxy = new Proxy(target, {\n get(_target, prop) {\n throwIfProxyReleased(isProxyReleased);\n if (prop === releaseProxy) {\n return () => {\n unregisterProxy(proxy);\n releaseEndpoint(ep);\n pendingListeners.clear();\n isProxyReleased = true;\n };\n }\n if (prop === \"then\") {\n if (path.length === 0) {\n return { then: () => proxy };\n }\n const r = requestResponseMessage(ep, pendingListeners, {\n type: MessageType.GET,\n path: path.map((p) => p.toString()),\n }).then(fromWireValue);\n return r.then.bind(r);\n }\n return createProxy(ep, pendingListeners, [...path, prop]);\n },\n set(_target, prop, rawValue) {\n throwIfProxyReleased(isProxyReleased);\n // FIXME: ES6 Proxy Handler `set` methods are supposed to return a\n // boolean. To show good will, we return true asynchronously ¯\\_(ツ)_/¯\n const [value, transferables] = toWireValue(rawValue);\n return requestResponseMessage(\n ep,\n pendingListeners,\n {\n type: MessageType.SET,\n path: [...path, prop].map((p) => p.toString()),\n value,\n },\n transferables\n ).then(fromWireValue) as any;\n },\n apply(_target, _thisArg, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const last = path[path.length - 1];\n if ((last as any) === createEndpoint) {\n return requestResponseMessage(ep, pendingListeners, {\n type: MessageType.ENDPOINT,\n }).then(fromWireValue);\n }\n // We just pretend that `bind()` didn’t happen.\n if (last === \"bind\") {\n return createProxy(ep, pendingListeners, path.slice(0, -1));\n }\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(\n ep,\n pendingListeners,\n {\n type: MessageType.APPLY,\n path: path.map((p) => p.toString()),\n argumentList,\n },\n transferables\n ).then(fromWireValue);\n },\n construct(_target, rawArgumentList) {\n throwIfProxyReleased(isProxyReleased);\n const [argumentList, transferables] = processArguments(rawArgumentList);\n return requestResponseMessage(\n ep,\n pendingListeners,\n {\n type: MessageType.CONSTRUCT,\n path: path.map((p) => p.toString()),\n argumentList,\n },\n transferables\n ).then(fromWireValue);\n },\n });\n registerProxy(proxy, ep);\n return proxy as any;\n}\n\nfunction myFlat<T>(arr: (T | T[])[]): T[] {\n return Array.prototype.concat.apply([], arr);\n}\n\nfunction processArguments(argumentList: any[]): [WireValue[], Transferable[]] {\n const processed = argumentList.map(toWireValue);\n return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\n\nconst transferCache = new WeakMap<any, Transferable[]>();\nexport function transfer<T>(obj: T, transfers: Transferable[]): T {\n transferCache.set(obj, transfers);\n return obj;\n}\n\nexport function proxy<T extends {}>(obj: T): T & ProxyMarked {\n return Object.assign(obj, { [proxyMarker]: true }) as any;\n}\n\nexport function windowEndpoint(\n w: PostMessageWithOrigin,\n context: EventSource = globalThis,\n targetOrigin = \"*\"\n): Endpoint {\n return {\n postMessage: (msg: any, transferables: Transferable[]) =>\n w.postMessage(msg, targetOrigin, transferables),\n addEventListener: context.addEventListener.bind(context),\n removeEventListener: context.removeEventListener.bind(context),\n };\n}\n\nfunction toWireValue(value: any): [WireValue, Transferable[]] {\n for (const [name, handler] of transferHandlers) {\n if (handler.canHandle(value)) {\n const [serializedValue, transferables] = handler.serialize(value);\n return [\n {\n type: WireValueType.HANDLER,\n name,\n value: serializedValue,\n },\n transferables,\n ];\n }\n }\n return [\n {\n type: WireValueType.RAW,\n value,\n },\n transferCache.get(value) || [],\n ];\n}\n\nfunction fromWireValue(value: WireValue): any {\n switch (value.type) {\n case WireValueType.HANDLER:\n return transferHandlers.get(value.name)!.deserialize(value.value);\n case WireValueType.RAW:\n return value.value;\n }\n}\n\nfunction requestResponseMessage(\n ep: Endpoint,\n pendingListeners: PendingListenersMap,\n msg: Message,\n transfers?: Transferable[]\n): Promise<WireValue> {\n return new Promise((resolve) => {\n const id = generateUUID();\n pendingListeners.set(id, resolve);\n if (ep.start) {\n ep.start();\n }\n ep.postMessage({ id, ...msg }, transfers);\n});\n}\n\nfunction generateUUID(): string {\n return new Array(4)\n .fill(0)\n .map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16))\n .join(\"-\");\n}\n","export interface LucentConfig {\n /** Base URL where Lucent-built httpuv transport assets (httpuv-web.js, shiny-socket.js, ...) are served. */\n transportBaseUrl: string;\n /**\n * URL of the httpuv service worker script. Defaults to `/httpuv-sw.js` at the\n * site root so registration works on hosts that cannot send\n * `Service-Worker-Allowed` (e.g. GitHub Pages). That file is a deploy-time\n * or serve-time alias of `lucent/dist/httpuv-sw.js`.\n */\n serviceWorkerUrl: string;\n /**\n * Base URL for the Rmain bootstrap binaries (`bin/Rmain.js`, `bin/Rmain.wasm`).\n * Trailing slash is normalized at use sites.\n */\n rRuntimeBaseUrl: string;\n /** URL of `empack_env_meta.json` (packages + appended webApp archive). */\n empackMetaUrl: string;\n /** Base URL for empack package archives listed in the meta file. */\n empackPackagesBaseUrl: string;\n /**\n * Base URL under which the virtual Shiny app is mounted; the mount prefix is\n * `<shinyBaseUrl>shiny/`. Defaults to the origin root (\"/\"), giving `/shiny/`.\n * This MUST be decoupled from where the JS bundles live (e.g. /lucent/dist/),\n * otherwise Shiny's asset URLs collide with the real bundle directory.\n */\n shinyBaseUrl: string;\n}\n\n/** Default location of Lucent-built httpuv transport assets. */\nexport const DEFAULT_TRANSPORT_BASE_URL = \"/lucent/dist/\";\n\n/** Default SW script URL (site root alias of lucent/dist/httpuv-sw.js). */\nexport const DEFAULT_SERVICE_WORKER_URL = \"/httpuv-sw.js\";\n\n/** Default base for Rmain.js / Rmain.wasm (`bin/` under this URL). */\nexport const DEFAULT_R_RUNTIME_BASE_URL = \"/runtime/\";\n\n/** Default empack meta URL. */\nexport const DEFAULT_EMPACK_META_URL = \"/packages/empack_env_meta.json\";\n\n/** Default base for the Shiny mount point (origin root → prefix `/shiny/`). */\nexport const DEFAULT_SHINY_BASE_URL = \"/\";\n\ninterface LucentGlobal {\n __LUCENT__?: Partial<LucentConfig>;\n}\n\n/** URL query param the host uses to hand its resolved config to the worker. */\nexport const LUCENT_CONFIG_PARAM = \"lucentConfig\";\n\n/**\n * Read config overrides serialized onto this context's own URL\n * (`?lucentConfig=<json>`). The host is the single source of truth: it resolves\n * config once and passes it to the worker via this param, so the worker does\n * not re-resolve from its own (empty) globalThis.\n */\nfunction configOverridesFromUrl(): Partial<LucentConfig> {\n try {\n const search = (globalThis as unknown as { location?: { search?: string } }).location?.search;\n if (!search) {\n return {};\n }\n const raw = new URLSearchParams(search).get(LUCENT_CONFIG_PARAM);\n if (!raw) {\n return {};\n }\n const parsed = JSON.parse(raw) as unknown;\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n return parsed as Partial<LucentConfig>;\n }\n } catch {\n // ignore malformed config; fall back to globals/defaults\n }\n return {};\n}\n\nfunction resolveAgainstLocation(url: string): URL {\n const base =\n typeof self !== \"undefined\" && self.location?.href\n ? self.location.href\n : \"http://localhost/\";\n return new URL(url, base);\n}\n\n/**\n * Resolve the runtime config, layering explicit overrides over a `?lucentConfig`\n * URL param (host → worker handoff) over a globalThis (`__LUCENT__`) config over\n * the built-in defaults.\n */\nexport function resolveLucentConfig(overrides: Partial<LucentConfig> = {}): LucentConfig {\n const fromGlobal = (globalThis as unknown as LucentGlobal).__LUCENT__ ?? {};\n const fromUrl = configOverridesFromUrl();\n const pick = <K extends keyof LucentConfig>(key: K): LucentConfig[K] | undefined =>\n overrides[key] ?? fromUrl[key] ?? fromGlobal[key];\n\n const empackMetaUrl = pick(\"empackMetaUrl\") ?? DEFAULT_EMPACK_META_URL;\n const empackPackagesBaseUrl =\n pick(\"empackPackagesBaseUrl\") ?? new URL(\".\", resolveAgainstLocation(empackMetaUrl)).href;\n\n return {\n transportBaseUrl: pick(\"transportBaseUrl\") ?? DEFAULT_TRANSPORT_BASE_URL,\n serviceWorkerUrl: pick(\"serviceWorkerUrl\") ?? DEFAULT_SERVICE_WORKER_URL,\n rRuntimeBaseUrl: pick(\"rRuntimeBaseUrl\") ?? DEFAULT_R_RUNTIME_BASE_URL,\n empackMetaUrl,\n empackPackagesBaseUrl,\n shinyBaseUrl: pick(\"shinyBaseUrl\") ?? DEFAULT_SHINY_BASE_URL,\n };\n}\n","/**\n * Opt-in tracing for Lucent / wasm Shiny (same switches as r-httpuv).\n *\n * Enable with either:\n * - URL query: ?httpuvDebug=1\n * - localStorage: shinyForgeDebug = \"1\"\n * - console: shinyForge.enableHttpuvDebug()\n */\nexport function isLucentDebug(): boolean {\n if (globalThis.__HTTPUV_DEBUG__) {\n return true;\n }\n try {\n if (typeof localStorage !== \"undefined\" && localStorage.getItem(\"shinyForgeDebug\") === \"1\") {\n return true;\n }\n const loc =\n typeof location !== \"undefined\"\n ? location\n : typeof self !== \"undefined\" && \"location\" in self\n ? (self as WorkerGlobalScope).location\n : undefined;\n if (loc?.href) {\n const params = new URL(loc.href).searchParams;\n if (params.has(\"httpuvDebug\") || params.get(\"debug\") === \"httpuv\") {\n return true;\n }\n }\n } catch {\n // ignore\n }\n return false;\n}\n\n/** Structured trace — only when debug is enabled. */\nexport function lucentDebugLog(stage: string, ...args: unknown[]): void {\n if (!isLucentDebug()) {\n return;\n }\n console.info(`[lucent-debug:${stage}]`, ...args);\n}\n\n/** One-shot informational log — only when debug is enabled. */\nexport function lucentInfo(...args: unknown[]): void {\n if (!isLucentDebug()) {\n return;\n }\n console.info(...args);\n}\n\n/** R worker log relay: always forwarded to the console. */\nexport function forwardRWorkerLog(level: \"log\" | \"error\", text: string): void {\n if (level === \"error\") {\n console.error(`[rWasmWorker] ${text}`);\n return;\n }\n console.log(`[rWasmWorker] ${text}`);\n}\n","/** R_HOME inside the mounted prefix (VFS root is /). */\nexport const WASM_R_HOME = \"/lib/R\";\n\n/** App directory inside the R VFS (populated via empack pack dir + append). */\nexport const WEB_APP_DIR = \"/webApp\";\n\n/** Message types between the main page and the R.wasm dedicated worker. */\nexport const RWASM = {\n READY: \"rwasm_ready\",\n EVAL: \"rwasm_eval\",\n EVAL_RESULT: \"rwasm_eval_result\",\n STOP_APP: \"rwasm_stop_app\",\n REMOUNT_R_HOME: \"rwasm_remount_r_home\",\n STOPPED: \"rwasm_stopped\",\n COMLINK_PORT: \"rwasm_comlink_port\",\n COMLINK_READY: \"rwasm_comlink_ready\",\n GET_RESOURCE_PATHS: \"rwasm_get_resource_paths\",\n RESOURCE_PATHS: \"rwasm_resource_paths\",\n LOG: \"rwasm_log\",\n /** Worker → main: empack package download progress. */\n DOWNLOAD_PROGRESS: \"rwasm_download_progress\",\n /** Worker → main: coarse boot phase updates after / around downloads. */\n BOOT_STATUS: \"rwasm_boot_status\",\n ERROR: \"rwasm_error\",\n /** Main → worker: run one shiny::serviceOnce tick. */\n SERVICE_TICK: \"rwasm_service_tick\",\n /** Worker → main: result of a SERVICE_TICK (`hadWork` / `nextDelayMs`). */\n SERVICE_STATUS: \"rwasm_service_status\",\n /** Worker → main: schedule an immediate MessageChannel wake. */\n NEED_SERVICE: \"rwasm_need_service\",\n /** Worker → main: delayed wake (`delayMs`) via setTimeout then MessageChannel.\n * Used when scheduleTask runs outside a SERVICE_TICK; idle delays after a tick\n * go through SERVICE_STATUS.nextDelayMs instead. */\n SCHEDULE_DELAY: \"rwasm_schedule_delay\",\n} as const;\n","import { lucentInfo } from \"./debug\";\nimport { WASM_R_HOME, WEB_APP_DIR } from \"./rwasm-constants\";\n\n/** Emscripten MODULARIZE factory exported as EXPORT_NAME=Rmain. */\ntype RmainFactory = (config: Record<string, unknown>) => Promise<RModule>;\n\n/** Minimal view of the Emscripten in-memory filesystem used by the bootstrap. */\nexport interface EmscriptenFS {\n mkdirTree(path: string): void;\n writeFile(path: string, data: Uint8Array | string): void;\n readFile(path: string, opts: { encoding: \"utf8\" }): string;\n readFile(path: string, opts: { encoding: \"binary\" }): Uint8Array;\n unlink(path: string): void;\n readdir(path: string): string[];\n analyzePath(path: string): { exists: boolean };\n}\n\nexport interface DownloadProgress {\n downloadedBytes: number;\n totalBytes: number;\n percent: number | null;\n}\n\n/** Coarse boot phases (download has its own byte-level channel). */\nexport type BootPhase =\n | \"load-runtime\"\n | \"download\"\n | \"filesystem\"\n | \"init-r\"\n | \"load-httpuv\"\n | \"start-app\"\n | \"warmup\";\n\nexport interface BootStatus {\n phase: BootPhase;\n message: string;\n /** Overall boot estimate 0–100 (null when unknown). */\n percent: number | null;\n}\n\n/** Minimal view of the initialized Rmain module (from rmain_post.js). */\nexport interface RModule {\n FS: EmscriptenFS;\n initR: (args?: string[]) => number;\n evalR: (code: string) => unknown;\n populateFilesystem: (options?: {\n metaUrl?: string;\n packagesBaseUrl?: string;\n concurrency?: number;\n onProgress?: (progress: DownloadProgress) => void;\n }) => Promise<unknown>;\n fetchUrls: (\n urls: string[],\n opts?: {\n concurrency?: number;\n onProgress?: (progress: DownloadProgress) => void;\n onDone?: (result: {\n url: string;\n arrayBuffer: ArrayBuffer | null;\n error: unknown;\n }) => void | Promise<void>;\n },\n ) => Promise<unknown>;\n extractArchiveFromMemory: (data: Uint8Array) => number;\n _rWasmEvalDepth: number;\n [key: string]: unknown;\n}\n\nexport interface InitRModuleOptions {\n /** Base URL for `bin/Rmain.js` / `bin/Rmain.wasm`. */\n runtimeBaseUrl: string;\n /** URL of `empack_env_meta.json`. */\n empackMetaUrl: string;\n /** Base URL for package archives listed in the meta file. */\n empackPackagesBaseUrl: string;\n print?: (text: string) => void;\n printErr?: (text: string) => void;\n onDownloadProgress?: (progress: DownloadProgress) => void;\n onBootStatus?: (status: BootStatus) => void;\n}\n\nlet evalRPostFlush: (() => void) | null = null;\n\nexport function setEvalRPostFlush(fn: () => void): void {\n evalRPostFlush = fn;\n}\n\n/** Ensure `url` is a directory URL (trailing slash) for reliable `new URL(rel, base)`. */\nexport function asDirectoryUrl(url: string): URL {\n const resolved = new URL(url, self.location.href);\n if (!resolved.pathname.endsWith(\"/\")) {\n resolved.pathname += \"/\";\n }\n return resolved;\n}\n\nexport function createRuntimeAssetUrls(runtimeBaseUrl: string): {\n glue: URL;\n wasm: URL;\n rLib: URL;\n} {\n const base = asDirectoryUrl(runtimeBaseUrl);\n return {\n glue: new URL(\"bin/Rmain.js\", base),\n wasm: new URL(\"bin/Rmain.wasm\", base),\n /** Host mirror of `$PREFIX/lib/R/lib` for MAIN_MODULE dynlink before VFS populate. */\n rLib: new URL(\"lib/R/lib/\", base),\n };\n}\n\n/** Cache of VFS path → blob: URL for SIDE_MODULE loads via locateFile. */\nconst vfsBlobUrls = new Map<string, string>();\n\nfunction clearVfsBlobUrlCache(): void {\n for (const url of vfsBlobUrls.values()) {\n URL.revokeObjectURL(url);\n }\n vfsBlobUrls.clear();\n}\n\nfunction vfsFileToBlobUrl(module: RModule, vfsPath: string): string {\n const cached = vfsBlobUrls.get(vfsPath);\n if (cached) {\n return cached;\n }\n const data = module.FS.readFile(vfsPath, { encoding: \"binary\" });\n const copy = new Uint8Array(data.byteLength);\n copy.set(data);\n const url = URL.createObjectURL(new Blob([copy.buffer], { type: \"application/wasm\" }));\n vfsBlobUrls.set(vfsPath, url);\n return url;\n}\n\nfunction vfsExists(module: RModule, path: string): boolean {\n try {\n return module.FS.analyzePath(path).exists;\n } catch {\n return false;\n }\n}\n\n/**\n * Resolve an Emscripten dynlink `locateFile` argument to a VFS path that exists\n * after empack populate, or null if not found in the FS.\n */\nexport function resolveSideModuleVfsPath(module: RModule, file: string): string | null {\n const fileBase = file.split(\"/\").pop() ?? file;\n const candidates: string[] = [];\n\n if (file.startsWith(\"/\")) {\n candidates.push(file);\n }\n\n const pkgMatch = file.match(/(?:^|\\/)library\\/([^/]+)\\/libs\\/([^/]+)$/);\n if (pkgMatch) {\n candidates.push(`${WASM_R_HOME}/library/${pkgMatch[1]}/libs/${pkgMatch[2]}`);\n }\n\n candidates.push(`${WASM_R_HOME}/lib/${fileBase}`);\n candidates.push(`/lib/${fileBase}`);\n if (!file.startsWith(\"/\")) {\n candidates.push(`/${file}`);\n candidates.push(`${WASM_R_HOME}/${file}`);\n }\n\n for (const path of candidates) {\n if (vfsExists(module, path)) {\n return path;\n }\n }\n return null;\n}\n\n/**\n * locateFile: Rmain.wasm over HTTP; SIDE_MODULE `.so` files from the VFS after\n * empack populate; before populate (MAIN_MODULE load of libR*.so), fall back to\n * HTTP under `runtime/lib/R/lib/` (same layout as the conda prefix).\n */\nexport function createFsBackedLocateFile(\n moduleRef: { current: RModule | null },\n runtimeBaseUrl: string,\n): (file: string) => string {\n const { wasm, rLib } = createRuntimeAssetUrls(runtimeBaseUrl);\n return function locateFile(file: string): string {\n const fileBase = file.split(\"/\").pop() ?? file;\n if (fileBase.endsWith(\".wasm\")) {\n return wasm.href;\n }\n\n const module = moduleRef.current;\n if (module?.FS) {\n const vfsPath = resolveSideModuleVfsPath(module, file);\n if (vfsPath) {\n return vfsFileToBlobUrl(module, vfsPath);\n }\n }\n\n // libR.so / libRblas.so / libRlapack.so are requested while instantiating\n // Rmain, before populateFilesystem has filled the VFS.\n return new URL(fileBase, rLib).href;\n };\n}\n\n/** Mirror R_HOME/lib/*.so to /lib for emscripten dynlink runtimePaths. */\nexport function mountRHomeLibToSlashLib(module: RModule): void {\n const libDir = `${WASM_R_HOME}/lib`;\n if (!vfsExists(module, libDir)) {\n lucentInfo(\"[rWasm] No\", libDir, \"to mirror into /lib\");\n return;\n }\n module.FS.mkdirTree(\"/lib\");\n let mirrored = 0;\n for (const name of module.FS.readdir(libDir)) {\n if (name === \".\" || name === \"..\" || !name.endsWith(\".so\")) {\n continue;\n }\n const src = `${libDir}/${name}`;\n const data = module.FS.readFile(src, { encoding: \"binary\" });\n module.FS.writeFile(`/lib/${name}`, data);\n mirrored += 1;\n }\n lucentInfo(\"[rWasm] Mirrored\", mirrored, \"*.so from\", libDir, \"→ /lib\");\n}\n\nexport function verifyMountedTree(module: RModule): void {\n const methodsSo = `${WASM_R_HOME}/library/methods/libs/methods.so`;\n if (!vfsExists(module, methodsSo)) {\n throw new Error(`Mounted FS is missing ${methodsSo}`);\n }\n const data = module.FS.readFile(methodsSo, { encoding: \"binary\" });\n if (!(data[0] === 0 && data[1] === 97 && data[2] === 115 && data[3] === 109)) {\n throw new Error(`${methodsSo} is not a wasm module (bad magic bytes)`);\n }\n if (!vfsExists(module, WEB_APP_DIR)) {\n throw new Error(`Mounted FS is missing ${WEB_APP_DIR} (empack pack dir/append webApp?)`);\n }\n}\n\n/** Load the MODULARIZE factory from Rmain.js (`EXPORT_ES6` + `EXPORT_NAME=Rmain`). */\nasync function loadRmainFactory(runtimeBaseUrl: string): Promise<RmainFactory> {\n const { glue: glueUrl } = createRuntimeAssetUrls(runtimeBaseUrl);\n const mod = (await import(/* webpackIgnore: true */ glueUrl.href)) as {\n default?: RmainFactory;\n Rmain?: RmainFactory;\n };\n const factory = mod.default ?? mod.Rmain;\n if (typeof factory !== \"function\") {\n throw new Error(\n \"Rmain factory missing; rebuild r-main with -sMODULARIZE=1 -sEXPORT_NAME=Rmain -sEXPORT_ES6=1\",\n );\n }\n return factory;\n}\n\nexport function evalR(Module: RModule, code: string): unknown {\n if (Module._rWasmEvalDepth > 0) {\n throw new Error(\"reentrant evalR\");\n }\n Module._rWasmEvalDepth = 1;\n try {\n return Module.evalR(code);\n } finally {\n Module._rWasmEvalDepth = 0;\n evalRPostFlush?.();\n }\n}\n\nasync function populateFromEmpack(\n module: RModule,\n {\n empackMetaUrl,\n empackPackagesBaseUrl,\n onDownloadProgress,\n onBootStatus,\n }: Pick<\n InitRModuleOptions,\n \"empackMetaUrl\" | \"empackPackagesBaseUrl\" | \"onDownloadProgress\" | \"onBootStatus\"\n >,\n): Promise<void> {\n if (typeof module.populateFilesystem !== \"function\") {\n throw new Error(\n \"Module.populateFilesystem missing; rebuild r-main with the parameterized rmain_post.js\",\n );\n }\n onBootStatus?.({\n phase: \"download\",\n message: \"Loading packages…\",\n percent: 5,\n });\n lucentInfo(\"[rWasm] populateFilesystem\", empackMetaUrl);\n await module.populateFilesystem({\n metaUrl: empackMetaUrl,\n packagesBaseUrl: empackPackagesBaseUrl,\n onProgress: onDownloadProgress,\n });\n // Older Rmain builds only extract `packages[]`. Empack `pack append` puts\n // extras (e.g. webApp.tar.gz) under `mounts[]` — extract those if still missing.\n await extractEmpackMountsIfNeeded(module, {\n empackMetaUrl,\n empackPackagesBaseUrl,\n onDownloadProgress,\n });\n onBootStatus?.({\n phase: \"filesystem\",\n message: \"Preparing filesystem…\",\n percent: 62,\n });\n clearVfsBlobUrlCache();\n mountRHomeLibToSlashLib(module);\n verifyMountedTree(module);\n}\n\n/**\n * Extract `empack_env_meta.mounts` archives when `/webApp` (or other mounts)\n * were not already populated by Module.populateFilesystem.\n */\nasync function extractEmpackMountsIfNeeded(\n module: RModule,\n {\n empackMetaUrl,\n empackPackagesBaseUrl,\n onDownloadProgress,\n }: Pick<InitRModuleOptions, \"empackMetaUrl\" | \"empackPackagesBaseUrl\" | \"onDownloadProgress\">,\n): Promise<void> {\n if (vfsExists(module, WEB_APP_DIR)) {\n return;\n }\n const fetchUrls = module.fetchUrls as\n | ((\n urls: string[],\n opts?: {\n concurrency?: number;\n onProgress?: (p: DownloadProgress) => void;\n onDone?: (result: {\n url: string;\n arrayBuffer: ArrayBuffer | null;\n error: unknown;\n }) => void | Promise<void>;\n },\n ) => Promise<unknown>)\n | undefined;\n if (typeof fetchUrls !== \"function\" || typeof module.extractArchiveFromMemory !== \"function\") {\n return;\n }\n\n const metaHref = new URL(empackMetaUrl, self.location.href).href;\n const metaRes = await fetch(metaHref);\n if (!metaRes.ok) {\n throw new Error(`Failed to fetch ${metaHref}: HTTP ${metaRes.status}`);\n }\n const meta = (await metaRes.json()) as { mounts?: Array<{ filename?: string }> };\n const mounts = Array.isArray(meta.mounts) ? meta.mounts : [];\n if (mounts.length === 0) {\n return;\n }\n\n const baseHref = new URL(empackPackagesBaseUrl, self.location.href).href;\n const urls = mounts.map((m) => {\n if (!m?.filename) {\n throw new Error(`mount entry missing filename in ${metaHref}`);\n }\n return new URL(m.filename, baseHref).href;\n });\n\n lucentInfo(\"[rWasm] extracting\", urls.length, \"empack mount archive(s)\");\n const errors: Array<{ url: string; error: unknown }> = [];\n await fetchUrls(urls, {\n concurrency: 5,\n onProgress: onDownloadProgress,\n onDone: async ({ url, arrayBuffer, error }) => {\n if (error || !arrayBuffer) {\n errors.push({ url, error: error ?? new Error(\"empty archive\") });\n return;\n }\n try {\n module.extractArchiveFromMemory(new Uint8Array(arrayBuffer));\n } catch (extractError) {\n errors.push({ url, error: extractError });\n }\n },\n });\n if (errors.length > 0) {\n const detail = errors\n .map((e) => `${e.url}: ${e.error instanceof Error ? e.error.message : String(e.error)}`)\n .join(\"; \");\n throw new Error(`Failed to extract empack mounts: ${detail}`);\n }\n}\n\nfunction unloadTransportPackages(Module: RModule): void {\n // VFS remount does not reload namespaces already resident in memory.\n evalR(Module, `tryCatch({\n for (pkg in c(\"shiny\", \"httpuv\")) {\n if (pkg %in% loadedNamespaces()) {\n tryCatch(unloadNamespace(pkg), error = function(e) {\n cat(\"[rWasm] unloadNamespace \", pkg, \": \", conditionMessage(e), \"\\\\n\", sep = \"\")\n })\n }\n }\n}, error = function(e) NULL)`);\n}\n\nexport async function remountRHome(\n Module: RModule,\n {\n empackMetaUrl,\n empackPackagesBaseUrl,\n onDownloadProgress,\n onBootStatus,\n }: Pick<\n InitRModuleOptions,\n \"empackMetaUrl\" | \"empackPackagesBaseUrl\" | \"onDownloadProgress\" | \"onBootStatus\"\n >,\n): Promise<void> {\n await populateFromEmpack(Module, {\n empackMetaUrl,\n empackPackagesBaseUrl,\n onDownloadProgress,\n onBootStatus,\n });\n unloadTransportPackages(Module);\n lucentInfo(\"[rWasm] Remounted empack env from\", empackMetaUrl);\n}\n\nexport async function bootstrapRSession(\n Module: RModule,\n onBootStatus?: (status: BootStatus) => void,\n): Promise<void> {\n onBootStatus?.({\n phase: \"init-r\",\n message: \"Initializing R…\",\n percent: 68,\n });\n const status = Module.initR([\"--no-restore\", \"--no-save\", \"--vanilla\"]);\n if (status !== 0) {\n throw new Error(`R init failed with status ${status}`);\n }\n\n onBootStatus?.({\n phase: \"load-httpuv\",\n message: \"Loading httpuv…\",\n percent: 78,\n });\n evalR(Module, \"suppressPackageStartupMessages(library(httpuv))\");\n evalR(Module, 'setwd(\"/\")');\n lucentInfo(\"[rWasm] R session ready\");\n}\n\n/**\n * Load and initialize Rmain via the MODULARIZE factory, populate the FS from\n * empack archives (including an appended webApp), then init R.\n */\nexport async function initRModule({\n runtimeBaseUrl,\n empackMetaUrl,\n empackPackagesBaseUrl,\n print,\n printErr,\n onDownloadProgress,\n onBootStatus,\n}: InitRModuleOptions): Promise<RModule> {\n const moduleRef: { current: RModule | null } = { current: null };\n const locateFile = createFsBackedLocateFile(moduleRef, runtimeBaseUrl);\n\n onBootStatus?.({\n phase: \"load-runtime\",\n message: \"Loading R.wasm runtime…\",\n percent: 2,\n });\n const createRmain = await loadRmainFactory(runtimeBaseUrl);\n\n const module = {\n noInitialRun: true,\n _rWasmEvalDepth: 0,\n locateFile,\n onAbort(reason: unknown) {\n throw new Error(`Rmain aborted: ${String(reason)}`);\n },\n print(text: unknown) {\n (print ?? console.log)(String(text));\n },\n printErr(text: unknown) {\n (printErr ?? console.error)(String(text));\n },\n } as unknown as RModule;\n\n moduleRef.current = module;\n\n try {\n await createRmain(module);\n } catch (err) {\n throw err instanceof Error ? err : new Error(String(err));\n }\n\n await populateFromEmpack(module, {\n empackMetaUrl,\n empackPackagesBaseUrl,\n onDownloadProgress,\n onBootStatus,\n });\n await bootstrapRSession(module, onBootStatus);\n\n // httpuv bridge reads Module.httpuv / Module._rWasmEvalDepth from globalThis.\n globalThis.Module = module;\n return module;\n}\n","import { evalR, type RModule } from \"./rWasmBootstrap\";\nimport type { HttpuvTransport } from \"./transport\";\n\n/**\n * Thin R wrappers around shiny:: host-control APIs.\n *\n * Snippets that can run before the app starts must gate on `loadedNamespaces()`\n * rather than `requireNamespace()` or a bare `shiny::`, both of which load the\n * namespace. That load is a single synchronous evalR call lasting seconds (far\n * longer under DevTools, where V8 drops wasm to Liftoff) during which the worker\n * cannot answer the Comlink handshake or any httpuv request.\n */\nexport const SHINY_HOST = {\n stop: `tryCatch({\n if (\"shiny\" %in% loadedNamespaces() && shiny::isRunning()) {\n shiny::stopApp()\n }\n}, error=function(e) NULL)`,\n suspend: `tryCatch(shiny::suspendServiceLoop(), error=function(e) NULL)`,\n resume: `tryCatch(shiny::resumeServiceLoop(), error=function(e) NULL)`,\n serviceOnce: `tryCatch(shiny::serviceOnce(), error=function(e) NULL)`,\n /**\n * Run serviceOnce and write status JSON to a VFS flag file.\n * Module.evalR returns an SEXP pointer, not the R value — callers must read\n * the flag file for hadWork / nextMs. The host arms delays from nextMs on\n * SERVICE_STATUS (serviceOnce itself does not scheduleHostDelay).\n *\n * Before the app starts this reports idle in plain base R: a service tick must\n * never be the thing that loads shiny.\n */\n serviceOnceHadWork: `tryCatch({\n if (!(\"shiny\" %in% loadedNamespaces())) {\n cat(\"0\", file = \"/tmp/lucent-service-had-work\")\n invisible(FALSE)\n } else {\n had <- isTRUE(shiny::serviceOnce())\n pending_flush <- tryCatch(shiny:::appsNeedingFlush$size() > 0, error=function(e) FALSE)\n if (isTRUE(pending_flush)) {\n had <- TRUE\n }\n next_ms <- tryCatch(shiny:::timerCallbacks$timeToNextEvent(), error=function(e) NA_real_)\n jsonlite::write_json(list(\n had = isTRUE(had),\n nextMs = if (is.finite(next_ms)) next_ms else -1\n ), \"/tmp/lucent-service-had-work\", auto_unbox=TRUE)\n invisible(had)\n }\n}, error=function(e) {\n tryCatch(jsonlite::write_json(list(had=FALSE, nextMs=-1, err=conditionMessage(e)), \"/tmp/lucent-service-had-work\", auto_unbox=TRUE), error=function(e2) NULL)\n invisible(FALSE)\n})`,\n} as const;\n\nexport type TaskRuntime = {\n getModule: () => RModule | null;\n getTransport: () => HttpuvTransport | null;\n};\n\ninterface RTask {\n work: () => void;\n resolve: () => void;\n reject: (err: unknown) => void;\n}\n\nexport type RTaskQueue = {\n scheduleMacrotask: (cb: () => void) => void;\n enqueueRTask: (work: () => void) => Promise<void>;\n evalRNow: (code: string) => unknown;\n isRLocked: () => boolean;\n hasPendingRTasks: () => boolean;\n};\n\n/**\n * Macrotask scheduler + serialized evalR queue.\n * MessageChannel turns avoid nested-setTimeout clamping and background throttling.\n */\nexport function createRTaskQueue(rt: TaskRuntime): RTaskQueue {\n const macrotaskChannel = new MessageChannel();\n const macrotaskQueue: Array<() => void> = [];\n macrotaskChannel.port1.onmessage = () => {\n const cb = macrotaskQueue.shift();\n if (cb) {\n cb();\n }\n };\n\n function scheduleMacrotask(cb: () => void): void {\n macrotaskQueue.push(cb);\n macrotaskChannel.port2.postMessage(0);\n }\n\n const rTaskQueue: RTask[] = [];\n let rDrainScheduled = false;\n let rLocked = false;\n\n function scheduleRDrain(): void {\n if (rDrainScheduled) {\n return;\n }\n rDrainScheduled = true;\n scheduleMacrotask(drainRTaskQueue);\n }\n\n function drainRTaskQueue(): void {\n rDrainScheduled = false;\n if (!rt.getModule() || rTaskQueue.length === 0) {\n return;\n }\n\n const task = rTaskQueue.shift();\n if (!task) {\n return;\n }\n rLocked = true;\n try {\n task.work();\n task.resolve();\n } catch (err) {\n task.reject(err);\n } finally {\n rLocked = false;\n rt.getTransport()?.flushDeferredOutbound();\n }\n\n if (rTaskQueue.length > 0) {\n scheduleRDrain();\n }\n }\n\n function enqueueRTask(work: () => void): Promise<void> {\n return new Promise((resolve, reject) => {\n rTaskQueue.push({ work, resolve, reject });\n scheduleRDrain();\n });\n }\n\n function evalRNow(code: string): unknown {\n const module = rt.getModule();\n if (!module) {\n throw new Error(\"[lucent] R module not initialized yet\");\n }\n return evalR(module, code);\n }\n\n return {\n scheduleMacrotask,\n enqueueRTask,\n evalRNow,\n isRLocked: () => rLocked,\n hasPendingRTasks: () => rTaskQueue.length > 0,\n };\n}\n","import type { RModule } from \"./rWasmBootstrap\";\nimport { SHINY_HOST, type RTaskQueue } from \"./rWasmTasks\";\nimport type { HttpuvTransport } from \"./transport\";\nimport type { HostInboundMessage } from \"./wiring\";\n\n/** Service rounds after push idle wait (promise resolution only). */\nconst HTTP_PUSH_DRAIN_ROUNDS = 128;\n\ntype HttpDrainState = {\n resolved: boolean;\n /** Settles the idle-wait Promise when the HTTP response arrives. */\n notify?: () => void;\n};\n\ninterface HttpDeliveryItem {\n req: HostInboundMessage;\n resolve: () => void;\n reject: (err: unknown) => void;\n}\n\nexport type HttpDeliveryDeps = {\n tasks: RTaskQueue;\n getModule: () => RModule | null;\n requireTransport: () => HttpuvTransport;\n /** Wake the main-thread service driver. */\n requestService: () => void;\n dbg: (stage: string, ...args: unknown[]) => void;\n formatError: (err: unknown) => string;\n logError: (err: unknown, url?: string) => void;\n};\n\nexport type HttpDelivery = {\n setIdleMaxMs: (ms: number) => void;\n isHttpDeliveryActive: () => boolean;\n hasHttpWork: () => boolean;\n noteHttpResponse: (uuid: string | undefined) => void;\n enqueueHttpDelivery: (req: HostInboundMessage) => Promise<void>;\n};\n\nexport function createHttpDelivery(deps: HttpDeliveryDeps): HttpDelivery {\n let httpIdleMaxMs = 30_000;\n let httpDeliveryActive = false;\n let httpDeliveryDraining = false;\n let shinyLoopSuspended = false;\n let httpDeliveryInflight = 0;\n let activeHttpDrainUuid: string | null = null;\n\n const httpDeliveryQueue: HttpDeliveryItem[] = [];\n const httpDrainByUuid = new Map<string, HttpDrainState>();\n\n /**\n * Wait until noteHttpResponse marks the request resolved, or maxMs elapses.\n * Event-driven (no setTimeout poll); one deadline timer is the upper bound.\n */\n async function idleWaitForHttpResponse(\n state: HttpDrainState,\n uuid: string,\n maxMs = httpIdleMaxMs,\n ): Promise<void> {\n const start = Date.now();\n if (!state.resolved) {\n await new Promise<void>((resolve) => {\n let settled = false;\n const done = () => {\n if (settled) {\n return;\n }\n settled = true;\n clearTimeout(timer);\n if (state.notify === done) {\n state.notify = undefined;\n }\n resolve();\n };\n state.notify = done;\n const timer = setTimeout(done, maxMs);\n // Response may have arrived between the resolved check and notify assign.\n if (state.resolved) {\n done();\n }\n });\n }\n deps.dbg(\"worker-push-idle-done\", {\n uuid,\n resolved: state.resolved,\n waitedMs: Date.now() - start,\n });\n }\n\n function isStaticAssetUrl(url: string): boolean {\n return deps.requireTransport().isLikelyStaticAsset(url);\n }\n\n function isSessionHttpUrl(url: string): boolean {\n const t = deps.requireTransport();\n try {\n return t.isSessionHttpRequest(url, t.getShinyPrefix());\n } catch {\n return t.isSessionHttpRequest(url);\n }\n }\n\n async function ensureShinyLoopSuspended(): Promise<void> {\n if (shinyLoopSuspended || !deps.getModule()) {\n return;\n }\n await deps.tasks.enqueueRTask(() => {\n deps.tasks.evalRNow(SHINY_HOST.suspend);\n });\n shinyLoopSuspended = true;\n deps.dbg(\"worker-shiny-loop-suspend\", {});\n }\n\n async function ensureShinyLoopResumed(): Promise<void> {\n if (!shinyLoopSuspended || !deps.getModule()) {\n return;\n }\n await deps.tasks.enqueueRTask(() => {\n deps.tasks.evalRNow(SHINY_HOST.resume);\n });\n shinyLoopSuspended = false;\n deps.dbg(\"worker-shiny-loop-resume\", {});\n }\n\n async function maybeFinishHttpDeliveryBatch(): Promise<void> {\n if (httpDeliveryQueue.length > 0 || httpDeliveryInflight > 0) {\n return;\n }\n await ensureShinyLoopResumed();\n httpDeliveryActive = false;\n httpDeliveryDraining = false;\n }\n\n function drainAfterHttpPush(\n roundsLeft: number,\n uuid: string,\n state: HttpDrainState,\n ): Promise<void> {\n if (roundsLeft <= 0 || !deps.getModule() || state.resolved) {\n if (!state.resolved) {\n deps.dbg(\"worker-push-drain-exhausted\", { uuid, roundsLeft });\n }\n return Promise.resolve();\n }\n return new Promise((resolve) => {\n deps.tasks.scheduleMacrotask(() => {\n void deps.tasks\n .enqueueRTask(() => {\n deps.tasks.evalRNow(SHINY_HOST.serviceOnce);\n })\n .then(() => drainAfterHttpPush(roundsLeft - 1, uuid, state))\n .then(resolve);\n });\n });\n }\n\n function yieldMacrotask(): Promise<void> {\n return new Promise((resolve) => {\n deps.tasks.scheduleMacrotask(() => resolve());\n });\n }\n\n async function deliverOneHttpRequest(req: HostInboundMessage): Promise<void> {\n const uuid = req.uuid ?? \"\";\n const url = req.url ?? \"\";\n const state: HttpDrainState = { resolved: false };\n httpDrainByUuid.set(uuid, state);\n httpDeliveryInflight++;\n activeHttpDrainUuid = uuid;\n\n const staticAsset = isStaticAssetUrl(url);\n const sessionHttp = isSessionHttpUrl(url);\n\n try {\n await deps.tasks.enqueueRTask(() => {\n deps.requireTransport().pushInboundHostMessage(req);\n });\n\n if (!staticAsset) {\n await idleWaitForHttpResponse(state, uuid, httpIdleMaxMs);\n\n // Only force serviceOnce drains when the HTTP response never arrived.\n // Session open/send already returns 204; reactive flush is owned by the\n // main-thread service driver via requestService() after inflight clears.\n if (!state.resolved) {\n await drainAfterHttpPush(HTTP_PUSH_DRAIN_ROUNDS, uuid, state);\n } else if (sessionHttp) {\n deps.dbg(\"worker-session-skip-drain\", { uuid });\n }\n } else if (!state.resolved) {\n await yieldMacrotask();\n }\n } finally {\n httpDrainByUuid.delete(uuid);\n if (activeHttpDrainUuid === uuid) {\n activeHttpDrainUuid = null;\n }\n httpDeliveryInflight--;\n // Host continues reactive work after session open/send completes.\n if (sessionHttp) {\n deps.requestService();\n }\n }\n }\n\n async function drainHttpDeliveryQueue(): Promise<void> {\n while (httpDeliveryQueue.length > 0) {\n const item = httpDeliveryQueue.shift();\n if (!item) {\n break;\n }\n const itemUrl = item.req.url ?? \"\";\n const needsSuspend = !isStaticAssetUrl(itemUrl) && !isSessionHttpUrl(itemUrl);\n if (needsSuspend && !shinyLoopSuspended) {\n await ensureShinyLoopSuspended();\n }\n if (needsSuspend) {\n httpDeliveryActive = true;\n }\n try {\n await deliverOneHttpRequest(item.req);\n item.resolve();\n } catch (err) {\n deps.logError(err, itemUrl);\n item.reject(err);\n } finally {\n if (needsSuspend) {\n httpDeliveryActive = false;\n }\n }\n const next = httpDeliveryQueue[0];\n const nextUrl = next?.req.url ?? \"\";\n const nextNeedsSuspend = Boolean(\n next && !isStaticAssetUrl(nextUrl) && !isSessionHttpUrl(nextUrl),\n );\n if (shinyLoopSuspended && !nextNeedsSuspend) {\n await ensureShinyLoopResumed();\n }\n }\n\n await maybeFinishHttpDeliveryBatch();\n\n if (httpDeliveryQueue.length > 0 && !httpDeliveryDraining) {\n httpDeliveryDraining = true;\n void drainHttpDeliveryQueue();\n }\n }\n\n function enqueueHttpDelivery(req: HostInboundMessage): Promise<void> {\n deps.requestService();\n deps.dbg(\"worker-push\", { uuid: req.uuid, method: req.method, url: req.url });\n\n return new Promise((resolve, reject) => {\n httpDeliveryQueue.push({ req, resolve, reject });\n if (!httpDeliveryDraining) {\n httpDeliveryDraining = true;\n void drainHttpDeliveryQueue().catch((err) => {\n httpDeliveryDraining = false;\n httpDeliveryActive = false;\n deps.logError(err);\n });\n }\n });\n }\n\n return {\n setIdleMaxMs(ms: number) {\n httpIdleMaxMs = ms;\n },\n isHttpDeliveryActive: () => httpDeliveryActive,\n hasHttpWork: () => httpDeliveryInflight > 0 || httpDeliveryQueue.length > 0,\n noteHttpResponse(uuid: string | undefined) {\n const drainState = uuid ? httpDrainByUuid.get(uuid) : undefined;\n if (!drainState || drainState.resolved) {\n return;\n }\n drainState.resolved = true;\n drainState.notify?.();\n },\n enqueueHttpDelivery,\n };\n}\n","import type { HostInboundMessage } from \"./wiring\";\n\nexport interface MsgTypes {\n REGISTER_HOST: string;\n HTTP_REQUEST: string;\n HTTP_RESPONSE: string;\n WS_PUSH: string;\n STOP: string;\n CLEAR_APP_CACHE: string;\n REGISTER_RESOURCE_PATHS: string;\n UPDATE_RESOURCE_PATH: string;\n REQUEST_COMLINK: string;\n REGISTER_SESSION: string;\n SESSION_ACK: string;\n REQUEST_SESSION_PORT: string;\n [key: string]: string;\n}\n\nexport interface ChannelTypes {\n HTTP_REQUEST: string;\n TCP_RESPONSE: string;\n WS_OPEN: string;\n WS_MESSAGE: string;\n WS_CLOSE: string;\n WS_RESPONSE: string;\n STDIN: string;\n [key: string]: string;\n}\n\nexport interface ComlinkTypes {\n PORT_HANDOFF: string;\n /** Absent on transport bundles built before the handoff ack was added. */\n PORT_HANDOFF_ACK?: string;\n [key: string]: string | undefined;\n}\n\n/** Loose shape of a channel message pushed into R (buildReq / WS frames). */\nexport interface ChannelMessageLike {\n type: string;\n uuid?: string;\n handle?: string;\n binary?: boolean;\n message?: unknown;\n method?: string;\n url?: string;\n headers?: Record<string, string>;\n body?: ArrayBuffer | number[] | null;\n req?: unknown;\n clientId?: string | null;\n data?: unknown;\n}\n\n/** Loose shape of an outbound message the bridge posts to the service worker. */\nexport interface OutboundMessage {\n type: string;\n uuid?: string;\n status?: number;\n headers?: Record<string, string>;\n body?: unknown;\n handle?: string;\n binary?: boolean;\n wsType?: string;\n message?: unknown;\n}\n\nexport interface HttpuvBridgeOptions {\n postOutbound?: (msg: OutboundMessage, transfer?: Transferable[]) => void;\n installSwListener?: boolean;\n pushToR?: (msg: ChannelMessageLike) => void;\n requestHostService?: () => void;\n scheduleHostDelay?: (delayMs: number) => void;\n}\n\n/**\n * The public surface of httpuv-web.js that Lucent consumes at runtime.\n * Kept as a hand-written contract so runApp/rWasmWorker stay decoupled from\n * the transport bundle's build graph (loaded via dynamic import).\n */\nexport interface HttpuvTransport {\n MSG: MsgTypes;\n CHANNEL: ChannelTypes;\n COMLINK: ComlinkTypes;\n REQUEST_TIMEOUT_MS: number;\n WARMUP_REQUEST_HEADER: string;\n installHttpuvBridge(options?: HttpuvBridgeOptions): unknown;\n flushDeferredOutbound(): void;\n pushInboundHostMessage(msg: HostInboundMessage): void;\n channelMessageToRExpr(msg: ChannelMessageLike): string;\n isLikelyStaticAsset(url: string): boolean;\n isSessionHttpRequest(url: string, prefix?: string): boolean;\n normalizeSessionHandle(handle: unknown): string;\n getShinyPrefix(): string;\n setShinyPrefix(prefix: string): void;\n resolveShinyPrefix(fromUrl: string | URL): string;\n shinyAppUrl(subpath?: string, fromUrl?: string | URL): string;\n isHttpuvDebug(): boolean;\n httpuvDebugLog(stage: string, ...args: unknown[]): void;\n enableHttpuvDebug(): void;\n}\n\nlet cached: Promise<HttpuvTransport> | null = null;\n\nfunction transportUrl(baseUrl: string): string {\n const base = new URL(baseUrl, self.location.href);\n return new URL(\"httpuv-web.js\", base).href;\n}\n\n/**\n * Dynamically load the httpuv transport module (`httpuv-web.js`) served from\n * `baseUrl` (typically Lucent dist). The result is cached; the specifier is a\n * runtime value so the bundler leaves it as a live `import()` instead of\n * inlining the transport.\n */\nexport function loadTransport(baseUrl: string): Promise<HttpuvTransport> {\n if (!cached) {\n const url = transportUrl(baseUrl);\n cached = import(/* @vite-ignore */ /* webpackIgnore: true */ url) as Promise<HttpuvTransport>;\n }\n return cached;\n}\n","import { lucentInfo } from \"./debug\";\nimport { RWASM } from \"./rwasm-constants\";\n\n/** Inbound HTTP request payload the service worker sends over Comlink. */\nexport interface HostHttpRequest {\n uuid?: string;\n method?: string;\n url?: string;\n headers?: Record<string, string>;\n body?: ArrayBuffer | null;\n clientId?: string | null;\n}\n\n/** Normalized inbound message handed to the R worker's push handler. */\nexport interface HostInboundMessage {\n type: string;\n uuid?: string;\n method?: string;\n url?: string;\n headers?: Record<string, string>;\n body?: ArrayBuffer | null;\n clientId?: string | null;\n}\n\nexport interface RHostHandlers {\n onHttpRequest: (msg: HostInboundMessage) => void | Promise<void>;\n onStop: () => void;\n getResourcePaths: () => Promise<Record<string, string>>;\n /** Comlink HTTP delivery port + one-way WS push port. */\n registerSwDelivery: (port: MessagePort, wsPushPort: MessagePort) => void;\n readVfsFile: (vfsDir: string, suffix: string) => Promise<ArrayBuffer | null>;\n readVfsFileAt: (vfsPath: string) => Promise<ArrayBuffer | null>;\n}\n\n/** API the R worker exposes to the service worker (Comlink target). */\nexport interface RHostApi {\n registerSwDelivery(port: MessagePort, wsPushPort: MessagePort): void | Promise<void>;\n deliverHttpRequest(req: HostHttpRequest): void | Promise<void>;\n getShinyResourcePaths(): Promise<Record<string, string>>;\n readVfsFile(vfsDir: string, suffix: string): Promise<ArrayBuffer | null>;\n readVfsFileAt(vfsPath: string): Promise<ArrayBuffer | null>;\n stop(): void | Promise<void>;\n}\n\n/** Reverse delivery API the service worker exposes to the R worker (Comlink; HTTP only). */\nexport interface SwDeliveryApi {\n deliverHttpResponse(resp: unknown): void | Promise<void>;\n}\n\n/** Times the handoff is re-posted before giving up (needs `ackType`). */\nconst HANDOFF_ATTEMPTS = 3;\n\n/** Wait for the service worker to confirm the port before re-posting it. */\nconst HANDOFF_ACK_TIMEOUT_MS = 5_000;\n\n/** Wait for the R worker to report both halves of the handshake complete. */\nconst COMLINK_READY_TIMEOUT_MS = 30_000;\n\nexport interface ComlinkHandshakeOptions {\n /**\n * Transport `COMLINK.PORT_HANDOFF_ACK` type. Omit for transport bundles built\n * before the ack existed: without it a missing `COMLINK_READY` cannot be told\n * apart from a slow one, so the handoff is posted only once.\n */\n ackType?: string;\n attempts?: number;\n ackTimeoutMs?: number;\n readyTimeoutMs?: number;\n}\n\ninterface Watcher<T> {\n promise: Promise<T>;\n cancel: () => void;\n}\n\ntype HandshakeOutcome = \"ready\" | \"acked\" | \"pending\";\n\n/**\n * Broker a single Comlink MessagePort between the service worker and R worker.\n * The SW creates a reverse delivery channel after wrapping the worker API.\n *\n * The R worker only reports `COMLINK_READY` once the SW has called back into it\n * (`registerSwDelivery`), so this handshake spans all three parties. A service\n * worker evicted while R boots can silently drop the handoff — `postMessage`\n * with a transferred port races the worker's restart — hence the retries.\n *\n * @param portHandoffType transport COMLINK.PORT_HANDOFF message type\n */\nexport async function connectHttpuvComlink(\n rWorker: Worker,\n portHandoffType: string,\n options: ComlinkHandshakeOptions = {},\n): Promise<void> {\n const {\n ackType,\n attempts = HANDOFF_ATTEMPTS,\n ackTimeoutMs = HANDOFF_ACK_TIMEOUT_MS,\n readyTimeoutMs = COMLINK_READY_TIMEOUT_MS,\n } = options;\n\n const ready = watchWorkerComlinkReady(rWorker);\n // Retries share the overall budget rather than extending it.\n const deadline = Date.now() + readyTimeoutMs;\n const maxAttempts = ackType ? Math.max(1, attempts) : 1;\n let connected = false;\n let acked = false;\n\n try {\n for (let attempt = 1; attempt <= maxAttempts && !connected && !acked; attempt += 1) {\n const ack = ackType ? watchServiceWorkerMessage(ackType) : null;\n try {\n postComlinkPorts(rWorker, portHandoffType);\n const outcome = await raceHandshake(ready.promise, ack?.promise, ackTimeoutMs);\n connected = outcome === \"ready\";\n acked = outcome === \"acked\";\n if (outcome === \"pending\") {\n lucentInfo(\n `[lucent] service worker did not confirm the Comlink port handoff (attempt ${attempt}/${maxAttempts})`,\n );\n }\n } finally {\n ack?.cancel();\n }\n }\n\n if (!connected) {\n await waitFor(ready.promise, Math.max(0, deadline - Date.now()), () =>\n comlinkTimeoutError(Boolean(ackType), acked),\n );\n }\n lucentInfo(\"[lucent] service worker <-> R worker connected (unified port)\");\n } finally {\n ready.cancel();\n }\n}\n\n/** Hand one end of a fresh channel to the SW and the other to the R worker. */\nfunction postComlinkPorts(rWorker: Worker, portHandoffType: string): void {\n const controller = navigator.serviceWorker.controller;\n if (!controller) {\n throw new Error(\"Service worker controller is not available for Comlink setup\");\n }\n\n const channel = new MessageChannel();\n controller.postMessage({ type: portHandoffType }, [channel.port1]);\n rWorker.postMessage({ type: RWASM.COMLINK_PORT }, [channel.port2]);\n}\n\nfunction comlinkTimeoutError(canAck: boolean, acked: boolean): Error {\n if (!canAck) {\n return new Error(\"Comlink setup timed out\");\n }\n if (acked) {\n return new Error(\n \"Comlink setup timed out: the service worker took the port but the R worker never completed setup\",\n );\n }\n return new Error(\n \"Comlink setup timed out: the service worker never acknowledged the port handoff\",\n );\n}\n\nasync function raceHandshake(\n ready: Promise<void>,\n ack: Promise<void> | undefined,\n timeoutMs: number,\n): Promise<HandshakeOutcome> {\n const timer = timeoutWatcher(timeoutMs);\n try {\n return await Promise.race<HandshakeOutcome>([\n ready.then((): HandshakeOutcome => \"ready\"),\n ...(ack ? [ack.then((): HandshakeOutcome => \"acked\")] : []),\n timer.promise.then((): HandshakeOutcome => \"pending\"),\n ]);\n } finally {\n timer.cancel();\n }\n}\n\nasync function waitFor(\n promise: Promise<void>,\n timeoutMs: number,\n onTimeout: () => Error,\n): Promise<void> {\n const timer = timeoutWatcher(timeoutMs);\n try {\n const timedOut = await Promise.race([\n promise.then(() => false),\n timer.promise.then(() => true),\n ]);\n if (timedOut) {\n throw onTimeout();\n }\n } finally {\n timer.cancel();\n }\n}\n\nfunction timeoutWatcher(ms: number): Watcher<void> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n const promise = new Promise<void>((resolve) => {\n timer = setTimeout(resolve, ms);\n });\n return { promise, cancel: () => clearTimeout(timer) };\n}\n\n/** Settles when the R worker finishes (or fails) Comlink setup. */\nfunction watchWorkerComlinkReady(rWorker: Worker): Watcher<void> {\n let cleanup = () => {};\n const promise = new Promise<void>((resolve, reject) => {\n const onMessage = (event: MessageEvent) => {\n if (event.data?.type === RWASM.COMLINK_READY) {\n cleanup();\n resolve();\n }\n if (event.data?.type === RWASM.ERROR) {\n cleanup();\n reject(new Error(event.data.message ?? \"R worker Comlink setup failed\"));\n }\n };\n cleanup = () => rWorker.removeEventListener(\"message\", onMessage);\n rWorker.addEventListener(\"message\", onMessage);\n });\n return { promise, cancel: () => cleanup() };\n}\n\n/** Resolves on the first service worker message of `type`. */\nfunction watchServiceWorkerMessage(type: string): Watcher<void> {\n let cleanup = () => {};\n const promise = new Promise<void>((resolve) => {\n const onMessage = (event: MessageEvent) => {\n if (event.data?.type === type) {\n cleanup();\n resolve();\n }\n };\n cleanup = () => navigator.serviceWorker.removeEventListener(\"message\", onMessage);\n navigator.serviceWorker.addEventListener(\"message\", onMessage);\n });\n return { promise, cancel: () => cleanup() };\n}\n\n/**\n * Build the API exposed by the R worker for inbound httpuv traffic.\n *\n * @param httpRequestType transport MSG.HTTP_REQUEST message type\n */\nexport function createRHostApi(httpRequestType: string, handlers: RHostHandlers): RHostApi {\n const { onHttpRequest, onStop, getResourcePaths, registerSwDelivery, readVfsFile, readVfsFileAt } =\n handlers;\n return {\n registerSwDelivery(port: MessagePort, wsPushPort: MessagePort) {\n registerSwDelivery(port, wsPushPort);\n },\n deliverHttpRequest(req: HostHttpRequest) {\n return onHttpRequest({\n type: httpRequestType,\n uuid: req.uuid,\n method: req.method,\n url: req.url,\n headers: req.headers ?? {},\n body: req.body ?? null,\n clientId: req.clientId ?? null,\n });\n },\n getShinyResourcePaths() {\n return getResourcePaths();\n },\n readVfsFile(vfsDir: string, suffix: string) {\n return readVfsFile(vfsDir, suffix);\n },\n readVfsFileAt(vfsPath: string) {\n return readVfsFileAt(vfsPath);\n },\n stop() {\n onStop();\n },\n };\n}\n","import * as Comlink from \"comlink\";\n\nimport { resolveLucentConfig } from \"./config\";\nimport { isLucentDebug, lucentInfo } from \"./debug\";\nimport {\n initRModule,\n remountRHome,\n setEvalRPostFlush,\n type BootStatus,\n type DownloadProgress,\n type RModule,\n} from \"./rWasmBootstrap\";\nimport { createHttpDelivery } from \"./rWasmHttpDelivery\";\nimport { createRTaskQueue, SHINY_HOST } from \"./rWasmTasks\";\nimport { RWASM } from \"./rwasm-constants\";\nimport {\n loadTransport,\n type ChannelMessageLike,\n type HttpuvTransport,\n type OutboundMessage,\n} from \"./transport\";\nimport { createRHostApi, type SwDeliveryApi } from \"./wiring\";\n\nconst workerSelf = self as unknown as DedicatedWorkerGlobalScope;\nconst config = resolveLucentConfig();\n\nlet rAssetBaseUrl: string | null = null;\n/** Last successfully populated empack identity (skip remount when unchanged). */\nlet mountedRuntimeKey: string | null = null;\nlet transport: HttpuvTransport | null = null;\nlet rModule: RModule | null = null;\nlet rModulePromise: Promise<RModule> | null = null;\nlet swDelivery: Comlink.Remote<SwDeliveryApi> | null = null;\n/** One-way port for WS pushes (ordered postMessage; no Comlink reply). */\nlet wsPushPort: MessagePort | null = null;\nlet rHostPortReady = false;\nlet swDeliveryPortReady = false;\n\nconst tasks = createRTaskQueue({\n getModule: () => rModule,\n getTransport: () => transport,\n});\n\nfunction postToHost(payload: unknown, transfer: Transferable[] = []): void {\n workerSelf.postMessage(payload, transfer);\n}\n\n/** Ask the main-thread rAF driver for another service tick. */\nfunction requestService(): void {\n postToHost({ type: RWASM.NEED_SERVICE });\n}\n\nfunction requireTransport(): HttpuvTransport {\n if (!transport) {\n throw new Error(\"[lucent] transport not loaded yet\");\n }\n return transport;\n}\n\nfunction requireRModule(): RModule {\n if (!rModule) {\n throw new Error(\"[lucent] R module not initialized yet\");\n }\n return rModule;\n}\n\nfunction dbg(stage: string, ...args: unknown[]): void {\n transport?.httpuvDebugLog(stage, ...args);\n}\n\nconst http = createHttpDelivery({\n tasks,\n getModule: () => rModule,\n requireTransport,\n requestService,\n dbg,\n formatError: formatRWasmError,\n logError: logHttpDeliveryError,\n});\n\nfunction isDebugEnabled(): boolean {\n return transport?.isHttpuvDebug() ?? isLucentDebug();\n}\n\nfunction log(level: \"log\" | \"error\", text: unknown): void {\n const msg = String(text);\n if (level === \"error\" && msg.startsWith(\"Error\")) {\n postToHost({ type: RWASM.LOG, level: \"error\", text: msg });\n return;\n }\n postToHost({ type: RWASM.LOG, level: \"log\", text: msg });\n}\n\nfunction maybeAnnounceComlinkReady(): void {\n if (rHostPortReady && swDeliveryPortReady) {\n postToHost({ type: RWASM.COMLINK_READY });\n }\n}\n\nfunction messageBodyLength(message: unknown): number {\n if (typeof message === \"string\") {\n return message.length;\n }\n if (message instanceof ArrayBuffer) {\n return message.byteLength;\n }\n if (ArrayBuffer.isView(message)) {\n return message.byteLength;\n }\n return 0;\n}\n\nfunction formatRWasmError(err: unknown): string {\n if (err instanceof Error) {\n return err.message || err.name;\n }\n const WasmException = (WebAssembly as unknown as { Exception?: new () => unknown }).Exception;\n if (typeof WasmException !== \"undefined\" && err instanceof WasmException) {\n const message = (err as { message?: unknown }).message;\n if (typeof message === \"string\" && message) {\n return message;\n }\n return \"WebAssembly.Exception (likely WASM trap during R eval)\";\n }\n if (typeof err === \"object\" && err !== null) {\n const message = (err as { message?: unknown }).message;\n if (typeof message === \"string\" && message) {\n return message;\n }\n const text = String(err);\n if (text !== \"[object Object]\" && text !== \"[object WebAssembly.Exception]\") {\n return text;\n }\n }\n return String(err);\n}\n\nfunction replyOk(id: unknown): void {\n if (id == null) {\n return;\n }\n postToHost({ type: RWASM.EVAL_RESULT, id, ok: true });\n}\n\nfunction replyErr(id: unknown, err: unknown): void {\n if (id == null) {\n return;\n }\n postToHost({\n type: RWASM.EVAL_RESULT,\n id,\n ok: false,\n error: formatRWasmError(err),\n });\n}\n\nfunction logHttpDeliveryError(err: unknown, url?: string): void {\n const where = url ? ` ${url}` : \"\";\n console.error(`[rWasmWorker] deliverHttpRequest failed:${where}`, formatRWasmError(err), err);\n}\n\nfunction deliverToServiceWorker(outbound: OutboundMessage, transfer: Transferable[] = []): void {\n const t = requireTransport();\n if (!swDelivery) {\n console.warn(\"[rWasmWorker] Service worker delivery API not connected\");\n return;\n }\n requestService();\n\n if (outbound.type === t.MSG.HTTP_RESPONSE) {\n dbg(\"comlink-deliver-http\", { uuid: outbound.uuid, status: outbound.status });\n http.noteHttpResponse(outbound.uuid);\n const resp = {\n uuid: outbound.uuid,\n status: outbound.status,\n headers: outbound.headers,\n body: outbound.body,\n };\n void swDelivery\n .deliverHttpResponse(transfer.length > 0 ? Comlink.transfer(resp, transfer) : resp)\n .catch((err: unknown) => {\n console.error(\"[rWasmWorker] deliverHttpResponse failed:\", formatRWasmError(err), err);\n });\n return;\n }\n\n if (outbound.type === t.MSG.WS_PUSH) {\n const handle = t.normalizeSessionHandle(outbound.handle);\n dbg(\"ws-push\", {\n handle,\n wsType: outbound.wsType,\n binary: outbound.binary,\n messageLen: messageBodyLength(outbound.message),\n });\n\n if (!wsPushPort) {\n console.warn(\"[rWasmWorker] WS push port not connected; dropping frame\");\n return;\n }\n const fullMsg = {\n type: t.MSG.WS_PUSH,\n handle,\n binary: outbound.binary,\n wsType: outbound.wsType,\n message: outbound.message,\n };\n try {\n if (transfer.length > 0) {\n wsPushPort.postMessage(fullMsg, transfer);\n } else {\n wsPushPort.postMessage(fullMsg);\n }\n } catch (err: unknown) {\n console.error(\"[rWasmWorker] wsPushPort.postMessage failed:\", formatRWasmError(err), err);\n }\n }\n}\n\nfunction pushToR(msg: ChannelMessageLike): void {\n const t = requireTransport();\n if (msg?.uuid) {\n dbg(\"worker-push-evalR-begin\", { uuid: msg.uuid });\n }\n const isWs =\n msg?.type === t.CHANNEL.WS_OPEN ||\n msg?.type === t.CHANNEL.WS_MESSAGE ||\n msg?.type === t.CHANNEL.WS_CLOSE;\n if (isWs) {\n dbg(\"worker-push-ws\", {\n type: msg.type,\n handle: t.normalizeSessionHandle(msg.handle),\n binary: msg.binary,\n messageLen: messageBodyLength(msg.message),\n });\n }\n let pushOk = false;\n try {\n tasks.evalRNow(`tryCatch({\n ${t.channelMessageToRExpr(msg)}\n}, error=function(e) {\n msg <- paste0(\"[httpuv] push failed (\", ${JSON.stringify(String(msg.url ?? \"\"))}, \"): \", conditionMessage(e))\n message(msg)\n stop(msg)\n})`);\n pushOk = true;\n } catch (err: unknown) {\n throw err;\n } finally {\n if (msg?.uuid) {\n dbg(\"worker-push-evalR-finish\", { uuid: msg.uuid, ok: pushOk });\n }\n // Flush on the worker task queue immediately — do not wait for main-thread\n // rAF (Chrome can defer parent-page rAF while the Shiny iframe has focus).\n // Always enqueue even if push threw so pending observers/promises can drain.\n void tasks\n .enqueueRTask(() => {\n if (!rModule) {\n return;\n }\n tasks.evalRNow(SHINY_HOST.serviceOnceHadWork);\n })\n .catch((err: unknown) => {\n const error = formatRWasmError(err);\n // JS stack overflows bypass R tryCatch/finally, leaving session busyCount\n // stuck at 1 so later input/hidden updates never run. Force-decrement.\n if (/Maximum call stack size exceeded/i.test(error) && rModule) {\n try {\n // Only clear stuck busyCount. Do NOT send fake \"recalculated\" for\n // every output — that breaks clients still in 'invalidated'.\n tasks.evalRNow(`tryCatch({\n for (s in shiny:::appsByToken$values()) {\n priv <- s$.__enclos_env__$private\n while (isTRUE(priv$busyCount > 0L)) {\n s$decrementBusyCount()\n }\n }\n invisible(NULL)\n}, error=function(e) NULL)`);\n } catch {\n // ignore recovery failures\n }\n }\n console.warn(\"[rWasmWorker] post-push serviceOnce failed:\", error);\n });\n // Also wake the host driver for any follow-up deferred timers.\n requestService();\n }\n}\n\nfunction installBridge(t: HttpuvTransport): void {\n // Must match the host's mount prefix (config.shinyBaseUrl → `/shiny/`), NOT\n // import.meta.url: the worker bundle lives in /lucent/dist/, and this prefix\n // is baked into the app document's <base href>, which drives every relative\n // Shiny asset URL. Deriving it from the bundle path sends assets to\n // /lucent/dist/shiny/... where no files exist.\n const shinyBase = new URL(config.shinyBaseUrl, self.location.href).href;\n t.setShinyPrefix(t.resolveShinyPrefix(shinyBase));\n setEvalRPostFlush(() => t.flushDeferredOutbound());\n t.installHttpuvBridge({\n installSwListener: false,\n postOutbound: deliverToServiceWorker,\n pushToR: (msg) => {\n pushToR(msg);\n },\n requestHostService: () => {\n requestService();\n },\n scheduleHostDelay: (delayMs) => {\n postToHost({\n type: RWASM.SCHEDULE_DELAY,\n delayMs: Math.max(0, Number(delayMs) || 0),\n });\n },\n });\n}\n\nfunction empackMountKey(): string {\n return [\n config.rRuntimeBaseUrl,\n config.empackMetaUrl,\n config.empackPackagesBaseUrl,\n ].join(\"\\0\");\n}\n\nfunction onDownloadProgress(progress: DownloadProgress): void {\n const pct =\n progress.percent == null ? \"?\" : `${progress.percent.toFixed(1)}%`;\n lucentInfo(\n `[rWasm] download ${pct} (${progress.downloadedBytes}/${progress.totalBytes})`,\n );\n postToHost({\n type: RWASM.DOWNLOAD_PROGRESS,\n percent: progress.percent,\n downloadedBytes: progress.downloadedBytes,\n totalBytes: progress.totalBytes,\n });\n}\n\nfunction onBootStatus(status: BootStatus): void {\n lucentInfo(`[rWasm] boot [${status.phase}] ${status.message}`);\n postToHost({\n type: RWASM.BOOT_STATUS,\n phase: status.phase,\n message: status.message,\n percent: status.percent,\n });\n}\n\nasync function initEverything(): Promise<RModule> {\n transport = await loadTransport(config.transportBaseUrl);\n http.setIdleMaxMs(transport.REQUEST_TIMEOUT_MS);\n const runtimeBaseUrl = new URL(config.rRuntimeBaseUrl, self.location.href).href;\n const empackMetaUrl = new URL(config.empackMetaUrl, self.location.href).href;\n const empackPackagesBaseUrl = new URL(\n config.empackPackagesBaseUrl,\n self.location.href,\n ).href;\n rAssetBaseUrl = runtimeBaseUrl;\n const module = await initRModule({\n runtimeBaseUrl,\n empackMetaUrl,\n empackPackagesBaseUrl,\n print: (text) => log(\"log\", text),\n printErr: (text) => log(\"error\", text),\n onDownloadProgress,\n onBootStatus,\n });\n rModule = module;\n mountedRuntimeKey = empackMountKey();\n installBridge(transport);\n return module;\n}\n\nfunction ensureRModule(): Promise<RModule> {\n if (!rModulePromise) {\n rModulePromise = initEverything();\n }\n return rModulePromise;\n}\n\nfunction readVfsFileAt(vfsPath: string): ArrayBuffer | null {\n const module = requireRModule();\n const path = vfsPath.replace(/\\/+$/, \"\");\n if (!path.startsWith(\"/\") || path.includes(\"..\")) {\n return null;\n }\n try {\n const data = module.FS.readFile(path, { encoding: \"binary\" });\n return data.buffer.slice(\n data.byteOffset,\n data.byteOffset + data.byteLength,\n ) as ArrayBuffer;\n } catch (err) {\n log(\"error\", `[rWasmWorker] readVfsFileAt failed ${path}: ${formatRWasmError(err)}`);\n return null;\n }\n}\n\nfunction readVfsFile(vfsDir: string, suffix: string): Promise<ArrayBuffer | null> {\n return ensureRModule().then(() => {\n const rel = suffix.replace(/^\\/+/, \"\");\n if (!rel || rel.includes(\"..\")) {\n return null;\n }\n const path = `${vfsDir.replace(/\\/$/, \"\")}/${rel}`;\n return readVfsFileAt(path);\n });\n}\n\nfunction readVfsFileAtAsync(vfsPath: string): Promise<ArrayBuffer | null> {\n return ensureRModule().then(() => readVfsFileAt(vfsPath));\n}\n\nfunction readShinyResourcePathsFromR(): Record<string, string> {\n const module = requireRModule();\n tasks.evalRNow(`tryCatch({\n paths <- if (requireNamespace(\"shiny\", quietly=TRUE)) as.list(shiny::resourcePaths()) else list()\n jsonlite::write_json(paths, \"/resourcePaths.json\", auto_unbox=TRUE)\n}, error=function(e) {\n jsonlite::write_json(list(), \"/resourcePaths.json\", auto_unbox=TRUE)\n})`);\n const text = module.FS.readFile(\"/resourcePaths.json\", { encoding: \"utf8\" });\n try {\n module.FS.unlink(\"/resourcePaths.json\");\n } catch {\n // ignore\n }\n const parsed = JSON.parse(text) as unknown;\n return parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? (parsed as Record<string, string>)\n : {};\n}\n\nfunction getShinyResourcePaths(): Promise<Record<string, string>> {\n return ensureRModule().then(() => {\n let result: Record<string, string> = {};\n return tasks\n .enqueueRTask(() => {\n result = readShinyResourcePathsFromR();\n })\n .then(() => result);\n });\n}\n\nfunction exposeRHost(port: MessagePort): void {\n const t = requireTransport();\n const api = createRHostApi(t.MSG.HTTP_REQUEST, {\n onHttpRequest: (req) =>\n ensureRModule()\n .then(() => http.enqueueHttpDelivery(req))\n .catch((err) => {\n logHttpDeliveryError(err);\n throw err;\n }),\n onStop: () => {\n void ensureRModule()\n .then(() => {\n void tasks.enqueueRTask(() => {\n requireTransport().pushInboundHostMessage({ type: t.MSG.STOP });\n tasks.evalRNow(SHINY_HOST.stop);\n });\n })\n .catch((err) => {\n log(\"error\", `[rWasmWorker] stop failed: ${formatRWasmError(err)}`);\n });\n },\n getResourcePaths: () => getShinyResourcePaths(),\n readVfsFile: (vfsDir, suffix) => readVfsFile(vfsDir, suffix),\n readVfsFileAt: (vfsPath) => readVfsFileAtAsync(vfsPath),\n registerSwDelivery: (deliveryPort, pushPort) => {\n connectSwDelivery(deliveryPort, pushPort);\n },\n });\n Comlink.expose(api, port);\n rHostPortReady = true;\n lucentInfo(\"[rWasmWorker] Comlink: exposing unified host API\");\n}\n\nfunction connectSwDelivery(port: MessagePort, pushPort: MessagePort): void {\n swDelivery = Comlink.wrap<SwDeliveryApi>(port);\n wsPushPort = pushPort;\n wsPushPort.start();\n swDeliveryPortReady = true;\n lucentInfo(\"[rWasmWorker] Comlink: connected to SW delivery API (+ WS push port)\");\n maybeAnnounceComlinkReady();\n}\n\nfunction stopRunningApp(): Promise<void> {\n if (!rModule) {\n return Promise.resolve();\n }\n return tasks.enqueueRTask(() => {\n tasks.evalRNow(SHINY_HOST.stop);\n }).catch((err) => {\n log(\"error\", `[rWasmWorker] stopApp failed: ${formatRWasmError(err)}`);\n });\n}\n\nasync function onMessage(event: MessageEvent): Promise<void> {\n const data = event.data;\n\n if (data?.type === RWASM.COMLINK_PORT && event.ports[0]) {\n const port = event.ports[0];\n port.start();\n rHostPortReady = false;\n swDeliveryPortReady = false;\n swDelivery = null;\n wsPushPort = null;\n await ensureRModule();\n exposeRHost(port);\n return;\n }\n\n if (!data || typeof data.type !== \"string\") {\n return;\n }\n\n switch (data.type) {\n case RWASM.EVAL: {\n try {\n await ensureRModule();\n await tasks.enqueueRTask(() => {\n tasks.evalRNow(String(data.code ?? \"\"));\n });\n replyOk(data.id);\n requestService();\n } catch (err) {\n if (data.id != null) {\n replyErr(data.id, err);\n } else {\n log(\"error\", `[rWasmWorker] eval failed: ${formatRWasmError(err)}`);\n }\n }\n break;\n }\n\n case RWASM.REMOUNT_R_HOME: {\n try {\n await ensureRModule();\n if (!rAssetBaseUrl) {\n throw new Error(\"R runtime base URL is not set\");\n }\n const force = Boolean(data.force);\n const key = empackMountKey();\n if (!force && mountedRuntimeKey === key) {\n lucentInfo(\"[rWasmWorker] remount skipped (empack env unchanged)\");\n replyOk(data.id);\n break;\n }\n const empackMetaUrl = new URL(config.empackMetaUrl, self.location.href).href;\n const empackPackagesBaseUrl = new URL(\n config.empackPackagesBaseUrl,\n self.location.href,\n ).href;\n await remountRHome(requireRModule(), {\n empackMetaUrl,\n empackPackagesBaseUrl,\n onDownloadProgress,\n onBootStatus,\n });\n mountedRuntimeKey = key;\n replyOk(data.id);\n } catch (err) {\n log(\"error\", `[rWasmWorker] remount R_HOME failed: ${formatRWasmError(err)}`);\n replyErr(data.id, err);\n }\n break;\n }\n\n case RWASM.STOP_APP: {\n try {\n await stopRunningApp();\n if (data.id != null) {\n postToHost({ type: RWASM.STOPPED, id: data.id });\n }\n } catch (err) {\n log(\"error\", `[rWasmWorker] stop failed: ${formatRWasmError(err)}`);\n }\n break;\n }\n\n case RWASM.SERVICE_TICK: {\n try {\n await ensureRModule();\n let hadWork = false;\n let nextDelayMs = -1;\n await tasks.enqueueRTask(() => {\n if (!rModule) {\n return;\n }\n tasks.evalRNow(SHINY_HOST.serviceOnceHadWork);\n try {\n const raw = rModule.FS.readFile(\"/tmp/lucent-service-had-work\", {\n encoding: \"utf8\",\n }).trim();\n if (raw === \"1\" || raw === \"0\") {\n hadWork = raw === \"1\";\n nextDelayMs = -1;\n } else {\n const status = JSON.parse(raw) as {\n had?: boolean;\n nextMs?: number;\n };\n hadWork = Boolean(status.had);\n const ms = Number(status.nextMs);\n nextDelayMs = Number.isFinite(ms) && ms >= 0 ? ms : -1;\n }\n } catch {\n hadWork = false;\n nextDelayMs = -1;\n }\n });\n postToHost({ type: RWASM.SERVICE_STATUS, hadWork, nextDelayMs });\n } catch (err) {\n log(\"error\", `[rWasmWorker] service tick failed: ${formatRWasmError(err)}`);\n postToHost({ type: RWASM.SERVICE_STATUS, hadWork: false, nextDelayMs: -1 });\n }\n break;\n }\n\n case RWASM.GET_RESOURCE_PATHS: {\n try {\n const paths = await getShinyResourcePaths();\n postToHost({ type: RWASM.RESOURCE_PATHS, id: data.id, paths });\n } catch (err) {\n postToHost({\n type: RWASM.RESOURCE_PATHS,\n id: data.id,\n paths: {},\n error: formatRWasmError(err),\n });\n }\n break;\n }\n\n default:\n break;\n }\n}\n\nworkerSelf.addEventListener(\"message\", (event) => {\n void onMessage(event);\n});\n\nvoid ensureRModule()\n .then(() => postToHost({ type: RWASM.READY }))\n .catch((err) => {\n postToHost({\n type: RWASM.ERROR,\n message: err instanceof Error ? err.message : String(err),\n });\n });\n"]}
@@ -0,0 +1,8 @@
1
+ declare function ensureHttpuvReady(): Promise<void>;
2
+ /**
3
+ * Start (or restart) the Shiny app already present in the VFS at `/webApp`
4
+ * (populated via empack pack dir + append during R bootstrap).
5
+ */
6
+ declare function runApp(): Promise<number>;
7
+
8
+ export { ensureHttpuvReady, runApp };