{"version":3,"sources":["jsdelivr-header.js","/npm/@webcontainer/api@1.6.4/dist/internal/constants.js","/npm/@webcontainer/api@1.6.4/dist/internal/TypedEventTarget.js","/npm/@webcontainer/api@1.6.4/dist/internal/tokens.js","/npm/@webcontainer/api@1.6.4/dist/internal/iframe-url.js","/npm/@webcontainer/api@1.6.4/dist/internal/code.js","/npm/@webcontainer/api@1.6.4/dist/internal/reset-promise.js","/npm/@webcontainer/api@1.6.4/dist/internal/auth-state.js","/npm/@webcontainer/api@1.6.4/dist/preview-message-types.js","/npm/@webcontainer/api@1.6.4/dist/vendor/index.js","/npm/@webcontainer/api@1.6.4/dist/utils/reload-preview.js","/npm/@webcontainer/api@1.6.4/dist/utils/is-preview-message.js","/npm/@webcontainer/api@1.6.4/dist/utils/null-prototype.js","/npm/@webcontainer/api@1.6.4/dist/utils/file-system.js","/npm/@webcontainer/api@1.6.4/dist/index.js"],"names":[],"mappings":"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","file":"/npm/@webcontainer/api@1.6.4/dist/index.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v4.62.2 and esbuild v0.28.1.\n * Original file: /npm/@webcontainer/api@1.6.4/dist/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","export const DEFAULT_EDITOR_ORIGIN = 'https://stackblitz.com';\nexport const SEARCH_PARAM_AUTH_CODE = 'code';\nexport const SEARCH_PARAM_ERROR = 'error';\nexport const SEARCH_PARAM_ERROR_DESCRIPTION = 'error_description';\nexport const BROADCAST_CHANNEL_NAME = '__wc_api_bc__';\nexport const STORAGE_TOKENS_NAME = '__wc_api_tokens__';\nexport const STORAGE_CODE_VERIFIER_NAME = '__wc_api_verifier__';\nexport const STORAGE_POPUP_NAME = '__wc_api_popup__';\n","export class TypedEventTarget {\n    _bus = new EventTarget();\n    listen(listener) {\n        function wrappedListener(event) {\n            listener(event.data);\n        }\n        this._bus.addEventListener('message', wrappedListener);\n        return () => this._bus.removeEventListener('message', wrappedListener);\n    }\n    fireEvent(data) {\n        this._bus.dispatchEvent(new MessageEvent('message', { data }));\n    }\n}\n","import { STORAGE_TOKENS_NAME } from './constants.js';\nimport { TypedEventTarget } from './TypedEventTarget.js';\nconst IGNORED_ERROR = new Error();\nIGNORED_ERROR.stack = '';\nconst accessTokenChangedListeners = new TypedEventTarget();\n/**\n * @internal\n */\nexport class Tokens {\n    origin;\n    refresh;\n    access;\n    expires;\n    _revoked = new AbortController();\n    constructor(\n    // editor origin that those tokens are bound to, mostly used for development\n    origin, \n    // token to use to get a new access token\n    refresh, \n    // token to provide to webcontainer\n    access, \n    // time in UTC when the token expires\n    expires) {\n        this.origin = origin;\n        this.refresh = refresh;\n        this.access = access;\n        this.expires = expires;\n    }\n    async activate(onFailedRefresh) {\n        if (this._revoked.signal.aborted) {\n            throw new Error('Token revoked');\n        }\n        // if the access token expired we fetch a new one\n        if (this.expires < Date.now()) {\n            if (!(await this._fetchNewAccessToken())) {\n                return false;\n            }\n        }\n        this._sync();\n        this._startRefreshTokensLoop(onFailedRefresh);\n        return true;\n    }\n    async revoke(clientId, ignoreRevokeError) {\n        this._revoked.abort();\n        try {\n            const response = await fetch(`${this.origin}/oauth/revoke`, {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application/x-www-form-urlencoded',\n                },\n                body: new URLSearchParams({ token: this.refresh, token_type_hint: 'refresh_token', client_id: clientId }),\n                mode: 'cors',\n            });\n            if (!response.ok) {\n                throw new Error(`Failed to logout`);\n            }\n        }\n        catch (error) {\n            if (!ignoreRevokeError) {\n                throw error;\n            }\n        }\n        clearTokensInStorage();\n    }\n    static fromStorage() {\n        const savedTokens = readTokensFromStorage();\n        if (!savedTokens) {\n            return null;\n        }\n        return new Tokens(savedTokens.origin, savedTokens.refresh, savedTokens.access, savedTokens.expires);\n    }\n    static async fromAuthCode({ editorOrigin, clientId, codeVerifier, authCode, redirectUri, }) {\n        const response = await fetch(`${editorOrigin}/oauth/token`, {\n            method: 'POST',\n            headers: {\n                'Content-Type': 'application/x-www-form-urlencoded',\n            },\n            body: new URLSearchParams({\n                client_id: clientId,\n                code: authCode,\n                code_verifier: codeVerifier,\n                grant_type: 'authorization_code',\n                redirect_uri: redirectUri,\n            }),\n            mode: 'cors',\n        });\n        if (!response.ok) {\n            throw new Error(`Failed to fetch token: ${response.status}`);\n        }\n        const tokenResponse = await response.json();\n        assertTokenResponse(tokenResponse);\n        const { access_token: access, refresh_token: refresh } = tokenResponse;\n        const expires = getExpiresFromTokenResponse(tokenResponse);\n        return new Tokens(editorOrigin, refresh, access, expires);\n    }\n    async _fetchNewAccessToken() {\n        try {\n            const response = await fetch(`${this.origin}/oauth/token`, {\n                method: 'POST',\n                headers: {\n                    'Content-Type': 'application/x-www-form-urlencoded',\n                },\n                body: new URLSearchParams({\n                    grant_type: 'refresh_token',\n                    refresh_token: this.refresh,\n                }),\n                mode: 'cors',\n                signal: this._revoked.signal,\n            });\n            if (!response.ok) {\n                throw IGNORED_ERROR;\n            }\n            const tokenResponse = await response.json();\n            assertTokenResponse(tokenResponse);\n            const { access_token: access, refresh_token: refresh } = tokenResponse;\n            const expires = getExpiresFromTokenResponse(tokenResponse);\n            this.access = access;\n            this.expires = expires;\n            this.refresh = refresh;\n            return true;\n        }\n        catch {\n            clearTokensInStorage();\n            return false;\n        }\n    }\n    _sync() {\n        persistTokensInStorage(this);\n        fireAccessTokenChanged(this.access);\n    }\n    async _startRefreshTokensLoop(onFailedRefresh) {\n        while (true) {\n            const expiresIn = this.expires - Date.now() - 1000;\n            await wait(Math.max(expiresIn, 1000));\n            if (this._revoked.signal.aborted) {\n                return;\n            }\n            if (!this._fetchNewAccessToken()) {\n                onFailedRefresh();\n                return;\n            }\n            this._sync();\n        }\n    }\n}\n/**\n * @internal\n */\nexport function clearTokensInStorage() {\n    localStorage.removeItem(STORAGE_TOKENS_NAME);\n}\n/**\n * @internal\n */\nexport function addAccessTokenChangedListener(listener) {\n    return accessTokenChangedListeners.listen(listener);\n}\nfunction readTokensFromStorage() {\n    const serializedTokens = localStorage.getItem(STORAGE_TOKENS_NAME);\n    if (!serializedTokens) {\n        return null;\n    }\n    try {\n        return JSON.parse(serializedTokens);\n    }\n    catch {\n        return null;\n    }\n}\nfunction persistTokensInStorage(tokens) {\n    localStorage.setItem(STORAGE_TOKENS_NAME, JSON.stringify(tokens));\n}\nfunction getExpiresFromTokenResponse({ created_at, expires_in }) {\n    return (created_at + expires_in) * 1000;\n}\nfunction assertTokenResponse(token) {\n    if (typeof token !== 'object' || !token) {\n        throw new Error('Invalid Token Response');\n    }\n    if (typeof token.access_token !== 'string' ||\n        typeof token.refresh_token !== 'string' ||\n        typeof token.created_at !== 'number' ||\n        typeof token.expires_in !== 'number') {\n        throw new Error('Invalid Token Response');\n    }\n}\nfunction wait(ms) {\n    return new Promise((resolve) => setTimeout(resolve, ms));\n}\nfunction fireAccessTokenChanged(accessToken) {\n    accessTokenChangedListeners.fireEvent(accessToken);\n}\n","import { DEFAULT_EDITOR_ORIGIN } from './constants.js';\nconst params = {};\nlet editorOrigin = null;\nexport const iframeSettings = {\n    get editorOrigin() {\n        if (editorOrigin == null) {\n            editorOrigin = new URL(globalThis.WEBCONTAINER_API_IFRAME_URL ?? DEFAULT_EDITOR_ORIGIN).origin;\n        }\n        return editorOrigin;\n    },\n    set editorOrigin(newOrigin) {\n        editorOrigin = new URL(newOrigin).origin;\n    },\n    setQueryParam(key, value) {\n        params[key] = value;\n    },\n    get url() {\n        const url = new URL(this.editorOrigin);\n        url.pathname = '/headless';\n        for (const param in params) {\n            url.searchParams.set(param, params[param]);\n        }\n        url.searchParams.set('version', \"1.6.4\");\n        return url;\n    },\n};\n","/**\n * Implementation of https://www.rfc-editor.org/rfc/rfc7636#section-4.2 that can\n * run in the browser.\n *\n * @internal\n *\n * @param input Code verifier.\n */\nexport async function S256(input) {\n    // input here is assumed to match https://www.rfc-editor.org/rfc/rfc3986#section-2.3\n    const ascii = new TextEncoder().encode(input);\n    const sha256 = new Uint8Array(await crypto.subtle.digest('SHA-256', ascii));\n    // base64url encode, based on https://developer.mozilla.org/en-US/docs/Glossary/Base64#the_unicode_problem\n    return btoa(sha256.reduce((binary, byte) => binary + String.fromCodePoint(byte), ''))\n        .replace(/\\+/g, '-')\n        .replace(/\\//g, '_')\n        .replace(/=+$/, '');\n}\n/**\n * Implementation of https://www.rfc-editor.org/rfc/rfc7636#section-4.1 with\n * a slight deviation:\n *\n *  - We use 128 characters (it's expected to be between 43 and 128)\n *  - We use 64 characters instead of 66\n *\n * So the entropy is lower given the space size is 64^128 instead of 66^128.\n * It still satisfies the entropy constraint given that 64^128 > 66^43.\n *\n * @internal\n */\nexport function newCodeVerifier() {\n    const random = new Uint8Array(96);\n    crypto.getRandomValues(random);\n    let codeVerifier = '';\n    for (let i = 0; i < 32; ++i) {\n        codeVerifier += nextFourChars(random[3 * i + 0], random[3 * i + 1], random[3 * i + 2]);\n    }\n    return codeVerifier;\n}\nfunction nextFourChars(byte1, byte2, byte3) {\n    const char1 = byte1 >> 2;\n    const char2 = ((byte1 & 3) << 4) | (byte2 >> 4);\n    const char3 = (byte2 & 15) | ((byte3 & 192) >> 2);\n    const char4 = byte3 & 63;\n    return [char1, char2, char3, char4].map(unreservedCharacters).join('');\n}\nfunction unreservedCharacters(code) {\n    let offset;\n    if (code < 26) {\n        offset = code + 65; // [A-Z]\n    }\n    else if (code < 52) {\n        offset = code - 26 + 97; // [a-z]\n    }\n    else if (code < 62) {\n        offset = code - 52 + 48; // [0-9]\n    }\n    else {\n        offset = code === 62 ? 30 /* _ */ : 45 /* - */;\n    }\n    return String.fromCharCode(offset);\n}\n","/**\n * @internal\n */\nexport function resettablePromise() {\n    let resolve;\n    let promise;\n    function reset() {\n        promise = new Promise((_resolve) => (resolve = _resolve));\n    }\n    reset();\n    return {\n        get promise() {\n            return promise;\n        },\n        resolve(value) {\n            return resolve(value);\n        },\n        reset,\n    };\n}\n","import { Tokens, clearTokensInStorage } from './tokens.js';\nimport { SEARCH_PARAM_AUTH_CODE, SEARCH_PARAM_ERROR, STORAGE_CODE_VERIFIER_NAME, BROADCAST_CHANNEL_NAME, STORAGE_POPUP_NAME, SEARCH_PARAM_ERROR_DESCRIPTION, } from './constants.js';\nimport { iframeSettings } from './iframe-url.js';\nimport { S256, newCodeVerifier } from './code.js';\nimport { resettablePromise } from './reset-promise.js';\nimport { TypedEventTarget } from './TypedEventTarget.js';\n/**\n * @internal\n */\nexport const authState = {\n    initialized: false,\n    bootCalled: false,\n    authComplete: resettablePromise(),\n    clientId: '',\n    oauthScope: '',\n    broadcastChannel: null,\n    get editorOrigin() {\n        return iframeSettings.editorOrigin;\n    },\n    tokens: null,\n};\nconst authFailedListeners = new TypedEventTarget();\nconst loggedOutListeners = new TypedEventTarget();\nfunction broadcastMessage(message) {\n    if (!authState.broadcastChannel) {\n        return;\n    }\n    authState.broadcastChannel.postMessage(message);\n    // check if we are in a popup mode\n    if (localStorage.getItem(STORAGE_POPUP_NAME) === 'true' && message.type !== 'auth-logout') {\n        localStorage.removeItem(STORAGE_POPUP_NAME);\n        // wait a tick to make sure the posted message has been sent\n        setTimeout(() => {\n            window.close();\n        });\n    }\n}\nexport const auth = {\n    init({ editorOrigin, clientId, scope }) {\n        if (authState.initialized) {\n            throw new Error('Init should only be called once');\n        }\n        let enterprise = true;\n        if (enterprise && authState.bootCalled) {\n            throw new Error('`auth.init` should always be called before `WebContainer.boot`');\n        }\n        authState.initialized = true;\n        authState.tokens = Tokens.fromStorage();\n        authState.clientId = clientId;\n        authState.oauthScope = scope;\n        authState.broadcastChannel = new BroadcastChannel(BROADCAST_CHANNEL_NAME);\n        // configure iframe url\n        iframeSettings.setQueryParam('client_id', clientId);\n        if (editorOrigin) {\n            iframeSettings.editorOrigin = new URL(editorOrigin).origin;\n        }\n        loggedOutListeners.listen(() => authState.authComplete.reset());\n        // if authentication or logout are done in another page, we want to reflect the state on this page as well\n        authState.broadcastChannel.addEventListener('message', onChannelMessage);\n        async function onChannelMessage(event) {\n            const typedEvent = event.data;\n            if (typedEvent.type === 'auth-complete') {\n                authState.tokens = Tokens.fromStorage();\n                // we ignore the possible error here because they can't have expired just yet\n                await authState.tokens.activate(onFailedTokenRefresh);\n                authState.authComplete.resolve();\n                return;\n            }\n            if (typedEvent.type === 'auth-failed') {\n                authFailedListeners.fireEvent(typedEvent);\n                return;\n            }\n            if (typedEvent.type === 'auth-logout') {\n                loggedOutListeners.fireEvent();\n                return;\n            }\n        }\n        if (authState.tokens) {\n            const tokens = authState.tokens;\n            if (tokens.origin === authState.editorOrigin) {\n                /**\n                 * Here we assume that the refresh token never expires which\n                 * might not be correct. If that is the case though, we will\n                 * emit a 'logged-out' event to signal that the user has been\n                 * logged out, which could also happen at a later time anyway.\n                 *\n                 * Because this flow is done entirely locally, we do not broadcast\n                 * anything to the other tabs. They should be performing a similar\n                 * check.\n                 */\n                (async () => {\n                    const success = await tokens.activate(onFailedTokenRefresh);\n                    if (!success) {\n                        // if we got new token in the meantime we discard this error\n                        if (authState.tokens !== tokens) {\n                            return;\n                        }\n                        loggedOutListeners.fireEvent();\n                        return;\n                    }\n                    authState.authComplete.resolve();\n                })();\n                return { status: 'authorized' };\n            }\n            clearTokensInStorage();\n            authState.tokens = null;\n        }\n        const locationURL = new URL(window.location.href);\n        const { searchParams } = locationURL;\n        const updateURL = () => window.history.replaceState({}, document.title, locationURL);\n        // check for errors first, aka the user declined the authorisation or stackblitz did\n        if (searchParams.has(SEARCH_PARAM_ERROR)) {\n            const error = searchParams.get(SEARCH_PARAM_ERROR);\n            const description = searchParams.get(SEARCH_PARAM_ERROR_DESCRIPTION);\n            searchParams.delete(SEARCH_PARAM_ERROR);\n            searchParams.delete(SEARCH_PARAM_ERROR_DESCRIPTION);\n            updateURL();\n            broadcastMessage({ type: 'auth-failed', error, description });\n            return { status: 'auth-failed', error, description };\n        }\n        // if there's an auth code\n        if (searchParams.has(SEARCH_PARAM_AUTH_CODE)) {\n            const authCode = searchParams.get(SEARCH_PARAM_AUTH_CODE);\n            const editorOrigin = authState.editorOrigin;\n            searchParams.delete(SEARCH_PARAM_AUTH_CODE);\n            updateURL();\n            const codeVerifier = localStorage.getItem(STORAGE_CODE_VERIFIER_NAME);\n            if (!codeVerifier) {\n                return { status: 'need-auth' };\n            }\n            localStorage.removeItem(STORAGE_CODE_VERIFIER_NAME);\n            Tokens.fromAuthCode({\n                editorOrigin,\n                clientId: authState.clientId,\n                authCode,\n                codeVerifier,\n                redirectUri: defaultRedirectUri(),\n            })\n                .then(async (tokens) => {\n                authState.tokens = tokens;\n                assertAuthTokens(authState.tokens);\n                const success = await authState.tokens.activate(onFailedTokenRefresh);\n                // if authentication failed we throw, and we'll mark auth as failed\n                if (!success) {\n                    throw new Error();\n                }\n                authState.authComplete.resolve();\n                broadcastMessage({ type: 'auth-complete' });\n            })\n                .catch((error) => {\n                // this should never happen unless the rails app is now down for some reason?\n                console.error(error);\n                // treat it as a logged out event so that the user can retry to login\n                loggedOutListeners.fireEvent();\n                broadcastMessage({ type: 'auth-logout' });\n            });\n            return { status: 'authorized' };\n        }\n        return { status: 'need-auth' };\n    },\n    async startAuthFlow({ popup } = {}) {\n        if (!authState.initialized) {\n            throw new Error('auth.init must be called first');\n        }\n        if (popup) {\n            localStorage.setItem(STORAGE_POPUP_NAME, 'true');\n            const height = 500;\n            const width = 620;\n            const left = window.screenLeft + (window.outerWidth - width) / 2;\n            const top = window.screenTop + (window.outerHeight - height) / 2;\n            window.open(await generateOAuthRequest(), '_blank', `popup,width=${width},height=${height},left=${left},top=${top}`);\n        }\n        else {\n            window.location.href = await generateOAuthRequest();\n        }\n    },\n    async logout({ ignoreRevokeError } = {}) {\n        await authState.tokens?.revoke(authState.clientId, ignoreRevokeError ?? false);\n        loggedOutListeners.fireEvent();\n        broadcastMessage({ type: 'auth-logout' });\n    },\n    loggedIn() {\n        return authState.authComplete.promise;\n    },\n    on(event, listener) {\n        switch (event) {\n            case 'auth-failed': {\n                return authFailedListeners.listen(listener);\n            }\n            case 'logged-out': {\n                return loggedOutListeners.listen(listener);\n            }\n            default: {\n                throw new Error(`Unsupported event type '${event}'.`);\n            }\n        }\n    },\n};\nfunction onFailedTokenRefresh() {\n    loggedOutListeners.fireEvent();\n    broadcastMessage({ type: 'auth-logout' });\n}\nfunction defaultRedirectUri() {\n    return window.location.href;\n}\nasync function generateOAuthRequest() {\n    const codeVerifier = newCodeVerifier();\n    localStorage.setItem(STORAGE_CODE_VERIFIER_NAME, codeVerifier);\n    const codeChallenge = await S256(codeVerifier);\n    const url = new URL('/oauth/authorize', authState.editorOrigin);\n    const { searchParams } = url;\n    searchParams.append('response_type', 'code');\n    searchParams.append('client_id', authState.clientId);\n    searchParams.append('redirect_uri', defaultRedirectUri());\n    searchParams.append('scope', authState.oauthScope);\n    searchParams.append('code_challenge', codeChallenge);\n    searchParams.append('code_challenge_method', 'S256');\n    return url.toString();\n}\n/**\n * @internal\n */\nexport function assertAuthTokens(tokens) {\n    if (!tokens) {\n        throw new Error('Oops! Tokens is not defined when it always should be.');\n    }\n}\n","/**\n * This type is in a separate module so that localservice can import it\n * without bundling all the other webcontainer specific stuff.\n */\nexport var PreviewMessageType;\n(function (PreviewMessageType) {\n    PreviewMessageType[\"UncaughtException\"] = \"PREVIEW_UNCAUGHT_EXCEPTION\";\n    PreviewMessageType[\"UnhandledRejection\"] = \"PREVIEW_UNHANDLED_REJECTION\";\n    PreviewMessageType[\"ConsoleError\"] = \"PREVIEW_CONSOLE_ERROR\";\n})(PreviewMessageType || (PreviewMessageType = {}));\n","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n  for (var name in all)\n    __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// dist/vendor/comlink.js\nvar comlink_exports = {};\n__export(comlink_exports, {\n  createEndpoint: () => createEndpoint,\n  expose: () => expose,\n  proxy: () => proxy,\n  proxyMarker: () => proxyMarker,\n  releaseProxy: () => releaseProxy,\n  transfer: () => transfer,\n  transferHandlers: () => transferHandlers,\n  windowEndpoint: () => windowEndpoint,\n  wrap: () => wrap\n});\n\n// ../../node_modules/comlink/dist/esm/comlink.mjs\nvar proxyMarker = Symbol(\"Comlink.proxy\");\nvar createEndpoint = Symbol(\"Comlink.endpoint\");\nvar releaseProxy = Symbol(\"Comlink.releaseProxy\");\nvar throwMarker = Symbol(\"Comlink.thrown\");\nvar isObject = (val) => typeof val === \"object\" && val !== null || typeof val === \"function\";\nvar proxyTransferHandler = {\n  canHandle: (val) => isObject(val) && val[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};\nvar throwTransferHandler = {\n  canHandle: (value) => isObject(value) && throwMarker in value,\n  serialize({ value }) {\n    let serialized;\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(new Error(serialized.value.message), serialized.value);\n    }\n    throw serialized.value;\n  }\n};\nvar transferHandlers = /* @__PURE__ */ new Map([\n  [\"proxy\", proxyTransferHandler],\n  [\"throw\", throwTransferHandler]\n]);\nfunction expose(obj, ep = self) {\n  ep.addEventListener(\"message\", function callback(ev) {\n    if (!ev || !ev.data) {\n      return;\n    }\n    const { id, type, path } = Object.assign({ path: [] }, ev.data);\n    const argumentList = (ev.data.argumentList || []).map(fromWireValue);\n    let returnValue;\n    try {\n      const parent = path.slice(0, -1).reduce((obj2, prop) => obj2[prop], obj);\n      const rawValue = path.reduce((obj2, prop) => obj2[prop], obj);\n      switch (type) {\n        case 0:\n          {\n            returnValue = rawValue;\n          }\n          break;\n        case 1:\n          {\n            parent[path.slice(-1)[0]] = fromWireValue(ev.data.value);\n            returnValue = true;\n          }\n          break;\n        case 2:\n          {\n            returnValue = rawValue.apply(parent, argumentList);\n          }\n          break;\n        case 3:\n          {\n            const value = new rawValue(...argumentList);\n            returnValue = proxy(value);\n          }\n          break;\n        case 4:\n          {\n            const { port1, port2 } = new MessageChannel();\n            expose(obj, port2);\n            returnValue = transfer(port1, [port1]);\n          }\n          break;\n        case 5:\n          {\n            returnValue = void 0;\n          }\n          break;\n      }\n    } catch (value) {\n      returnValue = { value, [throwMarker]: 0 };\n    }\n    Promise.resolve(returnValue).catch((value) => {\n      return { value, [throwMarker]: 0 };\n    }).then((returnValue2) => {\n      const [wireValue, transferables] = toWireValue(returnValue2);\n      ep.postMessage(Object.assign(Object.assign({}, wireValue), { id }), transferables);\n      if (type === 5) {\n        ep.removeEventListener(\"message\", callback);\n        closeEndPoint(ep);\n      }\n    });\n  });\n  if (ep.start) {\n    ep.start();\n  }\n}\nfunction isMessagePort(endpoint) {\n  return endpoint.constructor.name === \"MessagePort\";\n}\nfunction closeEndPoint(endpoint) {\n  if (isMessagePort(endpoint))\n    endpoint.close();\n}\nfunction wrap(ep, target) {\n  return createProxy(ep, [], target);\n}\nfunction throwIfProxyReleased(isReleased) {\n  if (isReleased) {\n    throw new Error(\"Proxy has been released and is not useable\");\n  }\n}\nfunction createProxy(ep, path = [], target = function() {\n}) {\n  let isProxyReleased = false;\n  const proxy2 = new Proxy(target, {\n    get(_target, prop) {\n      throwIfProxyReleased(isProxyReleased);\n      if (prop === releaseProxy) {\n        return () => {\n          return requestResponseMessage(ep, {\n            type: 5,\n            path: path.map((p) => p.toString())\n          }).then(() => {\n            closeEndPoint(ep);\n            isProxyReleased = true;\n          });\n        };\n      }\n      if (prop === \"then\") {\n        if (path.length === 0) {\n          return { then: () => proxy2 };\n        }\n        const r = requestResponseMessage(ep, {\n          type: 0,\n          path: path.map((p) => p.toString())\n        }).then(fromWireValue);\n        return r.then.bind(r);\n      }\n      return createProxy(ep, [...path, prop]);\n    },\n    set(_target, prop, rawValue) {\n      throwIfProxyReleased(isProxyReleased);\n      const [value, transferables] = toWireValue(rawValue);\n      return requestResponseMessage(ep, {\n        type: 1,\n        path: [...path, prop].map((p) => p.toString()),\n        value\n      }, transferables).then(fromWireValue);\n    },\n    apply(_target, _thisArg, rawArgumentList) {\n      throwIfProxyReleased(isProxyReleased);\n      const last = path[path.length - 1];\n      if (last === createEndpoint) {\n        return requestResponseMessage(ep, {\n          type: 4\n        }).then(fromWireValue);\n      }\n      if (last === \"bind\") {\n        return createProxy(ep, path.slice(0, -1));\n      }\n      const [argumentList, transferables] = processArguments(rawArgumentList);\n      return requestResponseMessage(ep, {\n        type: 2,\n        path: path.map((p) => p.toString()),\n        argumentList\n      }, transferables).then(fromWireValue);\n    },\n    construct(_target, rawArgumentList) {\n      throwIfProxyReleased(isProxyReleased);\n      const [argumentList, transferables] = processArguments(rawArgumentList);\n      return requestResponseMessage(ep, {\n        type: 3,\n        path: path.map((p) => p.toString()),\n        argumentList\n      }, transferables).then(fromWireValue);\n    }\n  });\n  return proxy2;\n}\nfunction myFlat(arr) {\n  return Array.prototype.concat.apply([], arr);\n}\nfunction processArguments(argumentList) {\n  const processed = argumentList.map(toWireValue);\n  return [processed.map((v) => v[0]), myFlat(processed.map((v) => v[1]))];\n}\nvar transferCache = /* @__PURE__ */ new WeakMap();\nfunction transfer(obj, transfers) {\n  transferCache.set(obj, transfers);\n  return obj;\n}\nfunction proxy(obj) {\n  return Object.assign(obj, { [proxyMarker]: true });\n}\nfunction windowEndpoint(w, context = self, targetOrigin = \"*\") {\n  return {\n    postMessage: (msg, transferables) => w.postMessage(msg, targetOrigin, transferables),\n    addEventListener: context.addEventListener.bind(context),\n    removeEventListener: context.removeEventListener.bind(context)\n  };\n}\nfunction toWireValue(value) {\n  for (const [name, handler] of transferHandlers) {\n    if (handler.canHandle(value)) {\n      const [serializedValue, transferables] = handler.serialize(value);\n      return [\n        {\n          type: 3,\n          name,\n          value: serializedValue\n        },\n        transferables\n      ];\n    }\n  }\n  return [\n    {\n      type: 0,\n      value\n    },\n    transferCache.get(value) || []\n  ];\n}\nfunction fromWireValue(value) {\n  switch (value.type) {\n    case 3:\n      return transferHandlers.get(value.name).deserialize(value.value);\n    case 0:\n      return value.value;\n  }\n}\nfunction requestResponseMessage(ep, msg, transfers) {\n  return new Promise((resolve) => {\n    const id = generateUUID();\n    ep.addEventListener(\"message\", function l(ev) {\n      if (!ev.data || !ev.data.id || ev.data.id !== id) {\n        return;\n      }\n      ep.removeEventListener(\"message\", l);\n      resolve(ev.data);\n    });\n    if (ep.start) {\n      ep.start();\n    }\n    ep.postMessage(Object.assign({ id }, msg), transfers);\n  });\n}\nfunction generateUUID() {\n  return new Array(4).fill(0).map(() => Math.floor(Math.random() * Number.MAX_SAFE_INTEGER).toString(16)).join(\"-\");\n}\nexport {\n  comlink_exports as Comlink\n};\n","/**\n * This function reloads the provided iframe.\n *\n * @param preview The iframe page to reload.\n * @param hardRefreshTimeout The timeout after which the preview is reset if it hasn't responded to the reload event.\n */\nexport function reloadPreview(preview, hardRefreshTimeout = 200) {\n    const { port1, port2 } = new MessageChannel();\n    let resolve;\n    const promise = new Promise((_resolve) => {\n        resolve = _resolve;\n    });\n    const done = () => {\n        resolve();\n        port2.close();\n    };\n    const timeout = setTimeout(() => {\n        const iframeSrc = preview.src;\n        preview.src = iframeSrc;\n        done();\n    }, hardRefreshTimeout);\n    port2.addEventListener('message', (event) => {\n        const data = event.data;\n        if (data == null || typeof data !== 'object') {\n            return;\n        }\n        if (data.type === 'LOCALSERVICE_WINDOW_RELOADED') {\n            clearTimeout(timeout);\n            done();\n        }\n    });\n    preview.contentWindow?.postMessage({\n        type: 'LOCALSERVICE_RELOAD_WINDOW',\n        callback: port1,\n    }, '*', [port1]);\n    return promise;\n}\n","import { PreviewMessageType } from '../preview-message-types.js';\nconst PREVIEW_MESSAGE_TYPES = [\n    PreviewMessageType.ConsoleError,\n    PreviewMessageType.UncaughtException,\n    PreviewMessageType.UnhandledRejection,\n];\nexport function isPreviewMessage(data) {\n    if (data == null || typeof data !== 'object') {\n        return false;\n    }\n    if (!('type' in data) || !PREVIEW_MESSAGE_TYPES.includes(data.type)) {\n        return false;\n    }\n    return true;\n}\n","/**\n * @internal\n */\nexport function nullPrototype(source) {\n    const prototype = Object.create(null);\n    if (!source) {\n        return prototype;\n    }\n    return Object.assign(prototype, source);\n}\n","import { nullPrototype } from './null-prototype.js';\n/**\n * @internal\n */\nexport function toInternalFileSystemTree(tree) {\n    const newTree = { d: {} };\n    for (const name of Object.keys(tree)) {\n        const entry = tree[name];\n        if ('file' in entry) {\n            if ('symlink' in entry.file) {\n                newTree.d[name] = { f: { l: entry.file.symlink } };\n                continue;\n            }\n            const contents = entry.file.contents;\n            const stringContents = typeof contents === 'string' ? contents : toLatin1(contents);\n            const binary = typeof contents === 'string' ? {} : { b: true };\n            newTree.d[name] = { f: { c: stringContents, ...binary } };\n            continue;\n        }\n        const newEntry = toInternalFileSystemTree(entry.directory);\n        newTree.d[name] = newEntry;\n    }\n    return newTree;\n}\n/**\n * @internal\n */\nexport function toExternalFileSystemTree(tree) {\n    const newTree = nullPrototype();\n    if ('f' in tree) {\n        throw new Error('It is not possible to export a single file in the JSON format.');\n    }\n    if ('d' in tree) {\n        for (const name of Object.keys(tree.d)) {\n            const entry = tree.d[name];\n            if ('d' in entry) {\n                newTree[name] = nullPrototype({\n                    directory: toExternalFileSystemTree(entry),\n                });\n            }\n            else if ('f' in entry) {\n                if ('c' in entry.f) {\n                    newTree[name] = nullPrototype({\n                        file: nullPrototype({\n                            contents: entry.f.b ? fromBinaryString(entry.f.c) : entry.f.c,\n                        }),\n                    });\n                }\n                else if ('l' in entry.f) {\n                    newTree[name] = nullPrototype({\n                        file: nullPrototype({\n                            symlink: entry.f.l,\n                        }),\n                    });\n                }\n            }\n        }\n    }\n    return newTree;\n}\nfunction fromBinaryString(s) {\n    const encoded = new Uint8Array(s.length);\n    for (let i = 0; i < s.length; i++) {\n        encoded[i] = s[i].charCodeAt(0);\n    }\n    return encoded;\n}\nfunction toLatin1(bytes) {\n    let decoded = '';\n    for (let i = 0; i < bytes.length; i++) {\n        decoded += String.fromCharCode(bytes[i]);\n    }\n    return decoded;\n}\n","/**\n * The WebContainer Public API allows you build custom applications on top of an in-browser Node.js runtime.\n *\n * Its main entrypoint is the {@link WebContainer} class.\n *\n * @packageDocumentation\n */\nimport { authState, assertAuthTokens } from './internal/auth-state.js';\nimport { PreviewMessageType } from './preview-message-types.js';\nimport { Comlink } from './vendor/index.js';\nimport { auth as authImpl } from './internal/auth-state.js';\nimport { addAccessTokenChangedListener } from './internal/tokens.js';\nimport { iframeSettings } from './internal/iframe-url.js';\nimport { isPreviewMessage } from './utils.js';\nimport { toExternalFileSystemTree, toInternalFileSystemTree } from './utils/file-system.js';\nexport const auth = authImpl;\nexport { PreviewMessageType };\nexport * from './utils.js';\nlet bootPromise = null;\nlet cachedServerPromise = null;\nlet cachedBootOptions = {};\nconst decoder = new TextDecoder();\nconst encoder = new TextEncoder();\n/**\n * The main export of this library. An instance of `WebContainer` represents a runtime\n * ready to be used.\n */\nexport class WebContainer {\n    _instance;\n    _runtimeInfo;\n    /**\n     * Gives access to the underlying file system.\n     */\n    fs;\n    /** @internal */\n    static _instance = null;\n    /** @internal */\n    static _teardownPromise = null;\n    _tornDown = false;\n    _unsubscribeFromTokenChangedListener = () => { };\n    /** @internal */\n    constructor(\n    /** @internal */\n    _instance, fs, previewScript, \n    /** @internal */\n    _runtimeInfo) {\n        this._instance = _instance;\n        this._runtimeInfo = _runtimeInfo;\n        this.fs = new FileSystemAPIClient(fs);\n        // forward the credentials to webcontainer if needed\n        if (authState.initialized) {\n            this._unsubscribeFromTokenChangedListener = addAccessTokenChangedListener((accessToken) => {\n                this._instance.setCredentials({ accessToken, editorOrigin: authState.editorOrigin });\n            });\n            (async () => {\n                await authState.authComplete.promise;\n                if (this._tornDown) {\n                    return;\n                }\n                assertAuthTokens(authState.tokens);\n                await this._instance.setCredentials({\n                    accessToken: authState.tokens.access,\n                    editorOrigin: authState.editorOrigin,\n                });\n            })().catch((error) => {\n                // print the error as this is likely a bug in webcontainer\n                console.error(error);\n            });\n        }\n    }\n    async spawn(command, optionsOrArgs, options) {\n        let args = [];\n        if (Array.isArray(optionsOrArgs)) {\n            args = optionsOrArgs;\n        }\n        else {\n            options = optionsOrArgs;\n        }\n        let output = undefined;\n        let outputStream = new ReadableStream();\n        if (options?.output !== false) {\n            const result = streamWithPush();\n            output = result.push;\n            outputStream = result.stream;\n        }\n        let stdout = undefined;\n        let stdoutStream;\n        let stderr = undefined;\n        let stderrStream;\n        const wrappedOutput = proxyListener(binaryListener(output));\n        const wrappedStdout = proxyListener(binaryListener(stdout));\n        const wrappedStderr = proxyListener(binaryListener(stderr));\n        const process = await this._instance.run({\n            command,\n            args,\n            cwd: options?.cwd,\n            env: options?.env,\n            terminal: options?.terminal,\n        }, wrappedStdout, wrappedStderr, wrappedOutput);\n        return new WebContainerProcessImpl(process, outputStream, stdoutStream, stderrStream);\n    }\n    async export(path, options) {\n        const serializeOptions = {\n            format: options?.format ?? 'json',\n            includes: options?.includes,\n            excludes: options?.excludes,\n            external: true,\n        };\n        const result = await this._instance.serialize(path, serializeOptions);\n        if (serializeOptions.format === 'json') {\n            const data = JSON.parse(decoder.decode(result));\n            return toExternalFileSystemTree(data);\n        }\n        return result;\n    }\n    on(event, listener) {\n        if (event === 'preview-message') {\n            const originalListener = listener;\n            listener = ((message) => {\n                if (isPreviewMessage(message)) {\n                    originalListener(message);\n                }\n            });\n        }\n        const { listener: wrapped, subscribe } = syncSubscription(listener);\n        return subscribe(this._instance.on(event, Comlink.proxy(wrapped)));\n    }\n    /**\n     * Mounts a tree of files into the filesystem. This can be specified as a tree object ({@link FileSystemTree})\n     * or as a binary snapshot generated by [`@webcontainer/snapshot`](https://www.npmjs.com/package/@webcontainer/snapshot).\n     *\n     * @param snapshotOrTree - A tree of files, or a binary snapshot. Note that binary payloads will be transferred.\n     * @param options - Additional options.\n     */\n    mount(snapshotOrTree, options) {\n        const payload = snapshotOrTree instanceof Uint8Array\n            ? snapshotOrTree\n            : snapshotOrTree instanceof ArrayBuffer\n                ? new Uint8Array(snapshotOrTree)\n                : encoder.encode(JSON.stringify(toInternalFileSystemTree(snapshotOrTree)));\n        return this._instance.loadFiles(Comlink.transfer(payload, [payload.buffer]), {\n            mountPoints: options?.mountPoint,\n        });\n    }\n    /**\n     * Set a custom script to be injected into all previews. When this function is called, every\n     * future page reload will contain the provided script tag on all HTML responses.\n     *\n     * Note:\n     *\n     * When this function resolves, every preview reloaded _after_ will have the new script.\n     * Existing preview have to be explicitely reloaded.\n     *\n     * To reload a preview you can use `reloadPreview`.\n     *\n     * @param scriptSrc Source for the script tag.\n     * @param options Options to define which type of script this is.\n     */\n    setPreviewScript(scriptSrc, options) {\n        return this._instance.setPreviewScript(scriptSrc, options);\n    }\n    /**\n     * The default value of the `PATH` environment variable for processes started through {@link spawn}.\n     */\n    get path() {\n        return this._runtimeInfo.path;\n    }\n    /**\n     * The full path to the working directory (see {@link FileSystemAPI}).\n     */\n    get workdir() {\n        return this._runtimeInfo.cwd;\n    }\n    /**\n     * Destroys the WebContainer instance, turning it unusable, and releases its resources. After this,\n     * a new WebContainer instance can be obtained by calling {@link WebContainer.boot | `boot`}.\n     *\n     * All entities derived from this instance (e.g. processes, the file system, etc.) also become unusable\n     * after calling this method.\n     */\n    teardown() {\n        if (this._tornDown) {\n            throw new Error('WebContainer already torn down');\n        }\n        this._tornDown = true;\n        this._unsubscribeFromTokenChangedListener();\n        const teardownFn = async () => {\n            try {\n                await this.fs._teardown();\n                await this._instance.teardown();\n            }\n            finally {\n                this._instance[Comlink.releaseProxy]();\n                if (WebContainer._instance === this) {\n                    WebContainer._instance = null;\n                }\n            }\n        };\n        WebContainer._teardownPromise = teardownFn();\n    }\n    /**\n     * Boots a WebContainer. Only a single instance of WebContainer can be booted concurrently\n     * (see {@link WebContainer.teardown | `teardown`}).\n     *\n     * Booting WebContainer is an expensive operation.\n     */\n    static async boot(options = {}) {\n        await this._teardownPromise;\n        WebContainer._teardownPromise = null;\n        const { workdirName } = options;\n        if (window.crossOriginIsolated && options.coep === 'none') {\n            console.warn(`A Cross-Origin-Embedder-Policy header is required in cross origin isolated environments.\\nSet the 'coep' option to 'require-corp'.`);\n        }\n        if (workdirName?.includes('/') || workdirName === '..' || workdirName === '.') {\n            throw new Error('workdirName should be a valid folder name');\n        }\n        // signal that boot was called to auth module as calling auth.init after boot is likely incorrect\n        authState.bootCalled = true;\n        // try to \"acquire the lock\", i.e. wait for any ongoing boot request to finish\n        while (bootPromise) {\n            await bootPromise;\n        }\n        if (WebContainer._instance) {\n            throw new Error('Only a single WebContainer instance can be booted');\n        }\n        const instancePromise = unsynchronizedBoot(options);\n        // the \"lock\" is a promise for the ongoing boot that never fails\n        bootPromise = instancePromise.catch(() => { });\n        try {\n            const instance = await instancePromise;\n            WebContainer._instance = instance;\n            return instance;\n        }\n        finally {\n            // release the \"lock\"\n            bootPromise = null;\n        }\n    }\n}\n/**\n * Configure an API key to be used for this instance of WebContainer.\n *\n * @param key WebContainer API key.\n */\nexport function configureAPIKey(key) {\n    if (authState.bootCalled) {\n        throw new Error('`configureAPIKey` should always be called before `WebContainer.boot`');\n    }\n    iframeSettings.setQueryParam('client_id', key);\n}\nconst DIR_ENTRY_TYPE_FILE = 1;\nconst DIR_ENTRY_TYPE_DIR = 2;\n/**\n * @internal\n */\nclass DirEntImpl {\n    name;\n    _type;\n    constructor(name, _type) {\n        this.name = name;\n        this._type = _type;\n    }\n    isFile() {\n        return this._type === DIR_ENTRY_TYPE_FILE;\n    }\n    isDirectory() {\n        return this._type === DIR_ENTRY_TYPE_DIR;\n    }\n}\nclass FSWatcher {\n    _apiClient;\n    _path;\n    _options;\n    _listener;\n    _wrappedListener;\n    _watcher;\n    _closed = false;\n    constructor(_apiClient, _path, _options, _listener) {\n        this._apiClient = _apiClient;\n        this._path = _path;\n        this._options = _options;\n        this._listener = _listener;\n        this._apiClient._watchers.add(this);\n        this._wrappedListener = (event, filename) => {\n            if (this._listener && !this._closed) {\n                this._listener(event, filename);\n            }\n        };\n        this._apiClient._fs\n            .watch(this._path, this._options, proxyListener(this._wrappedListener))\n            .then((_watcher) => {\n            this._watcher = _watcher;\n            if (this._closed) {\n                return this._teardown();\n            }\n            return undefined;\n        })\n            .catch(console.error);\n    }\n    async close() {\n        if (!this._closed) {\n            this._closed = true;\n            this._apiClient._watchers.delete(this);\n            await this._teardown();\n        }\n    }\n    /**\n     * @internal\n     */\n    async _teardown() {\n        await this._watcher?.close().finally(() => {\n            this._watcher?.[Comlink.releaseProxy]();\n        });\n    }\n}\n/**\n * @internal\n */\nclass WebContainerProcessImpl {\n    output;\n    input;\n    exit;\n    _process;\n    stdout;\n    stderr;\n    constructor(process, output, stdout, stderr) {\n        this.output = output;\n        this._process = process;\n        this.input = new WritableStream({\n            write: (data) => {\n                // this promise is not supposed to fail anyway\n                this._getProcess()\n                    ?.write(data)\n                    .catch(() => { });\n            },\n        });\n        this.exit = this._onExit();\n        this.stdout = stdout;\n        this.stderr = stderr;\n    }\n    kill() {\n        this._process?.kill();\n    }\n    resize(dimensions) {\n        this._getProcess()?.resize(dimensions);\n    }\n    async _onExit() {\n        try {\n            return await this._process.onExit;\n        }\n        finally {\n            this._process?.[Comlink.releaseProxy]();\n            this._process = null;\n        }\n    }\n    _getProcess() {\n        if (this._process == null) {\n            console.warn('This process already exited');\n        }\n        return this._process;\n    }\n}\n/**\n * @internal\n */\nclass FileSystemAPIClient {\n    _fs;\n    _watchers = new Set([]);\n    constructor(fs) {\n        this._fs = fs;\n    }\n    rm(...args) {\n        return this._fs.rm(...args);\n    }\n    async readFile(path, encoding) {\n        return await this._fs.readFile(path, encoding);\n    }\n    async rename(oldPath, newPath) {\n        return await this._fs.rename(oldPath, newPath);\n    }\n    async writeFile(path, data, options) {\n        if (data instanceof Uint8Array) {\n            const buffer = data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength);\n            data = Comlink.transfer(new Uint8Array(buffer), [buffer]);\n        }\n        await this._fs.writeFile(path, data, options);\n    }\n    async readdir(path, options) {\n        const result = await this._fs.readdir(path, options);\n        if (isStringArray(result)) {\n            return result;\n        }\n        if (isTypedArrayCollection(result)) {\n            return result;\n        }\n        const entries = result.map((entry) => new DirEntImpl(entry.name, entry['Symbol(type)']));\n        return entries;\n    }\n    async mkdir(path, options) {\n        return await this._fs.mkdir(path, options);\n    }\n    watch(path, options, listener) {\n        if (typeof options === 'function') {\n            listener = options;\n            options = null;\n        }\n        return new FSWatcher(this, path, options, listener);\n    }\n    /**\n     * @internal\n     */\n    async _teardown() {\n        this._fs[Comlink.releaseProxy]();\n        await Promise.all([...this._watchers].map((watcher) => watcher.close()));\n    }\n}\nasync function unsynchronizedBoot(options) {\n    const { serverPromise } = serverFactory(options);\n    const server = await serverPromise;\n    const instance = await server.build({\n        host: window.location.host,\n        version: \"1.6.4\",\n        workdirName: options.workdirName,\n        forwardPreviewErrors: options.forwardPreviewErrors,\n    });\n    const [fs, previewScript, runtimeInfo] = await Promise.all([\n        instance.fs(),\n        instance.previewScript(),\n        instance.runtimeInfo(),\n    ]);\n    return new WebContainer(instance, fs, previewScript, runtimeInfo);\n}\nfunction binaryListener(listener) {\n    if (listener == null) {\n        return undefined;\n    }\n    return (data) => {\n        if (data instanceof Uint8Array) {\n            listener(decoder.decode(data));\n        }\n        else if (data == null) {\n            listener(null);\n        }\n    };\n}\nfunction proxyListener(listener) {\n    if (listener == null) {\n        return undefined;\n    }\n    return Comlink.proxy(listener);\n}\nfunction serverFactory(options) {\n    if (cachedServerPromise != null) {\n        if (options.coep !== cachedBootOptions.coep) {\n            console.warn(`Attempting to boot WebContainer with 'coep: ${options.coep}'`);\n            console.warn(`First boot had 'coep: ${cachedBootOptions.coep}', new settings will not take effect!`);\n        }\n        return { serverPromise: cachedServerPromise };\n    }\n    if (options.coep) {\n        iframeSettings.setQueryParam('coep', options.coep);\n    }\n    if (options.experimentalNode) {\n        iframeSettings.setQueryParam('experimental_node', '1');\n    }\n    const iframe = document.createElement('iframe');\n    iframe.style.display = 'none';\n    iframe.setAttribute('allow', 'cross-origin-isolated');\n    const url = iframeSettings.url;\n    iframe.src = url.toString();\n    const { origin } = url;\n    cachedBootOptions = { ...options };\n    cachedServerPromise = new Promise((resolve) => {\n        const onMessage = (event) => {\n            if (event.origin !== origin) {\n                return;\n            }\n            const { data } = event;\n            if (data.type === 'init') {\n                resolve(Comlink.wrap(event.ports[0]));\n                return;\n            }\n            if (data.type === 'warning') {\n                console[data.level].call(console, data.message);\n                return;\n            }\n        };\n        window.addEventListener('message', onMessage);\n    });\n    document.body.insertBefore(iframe, null);\n    return { serverPromise: cachedServerPromise };\n}\nfunction isStringArray(list) {\n    return typeof list[0] === 'string';\n}\nfunction isTypedArrayCollection(list) {\n    return list[0] instanceof Uint8Array;\n}\nfunction streamWithPush() {\n    let controller = null;\n    const stream = new ReadableStream({\n        start(controller_) {\n            controller = controller_;\n        },\n    });\n    const push = (item) => {\n        if (item != null) {\n            controller?.enqueue(item);\n        }\n        else {\n            controller?.close();\n            controller = null;\n        }\n    };\n    return { stream, push };\n}\nfunction syncSubscription(listener) {\n    let stopped = false;\n    let unsubscribe = () => { };\n    const wrapped = ((...args) => {\n        if (stopped) {\n            return;\n        }\n        listener(...args);\n    });\n    return {\n        subscribe(promise) {\n            promise.then((unsubscribe_) => {\n                unsubscribe = unsubscribe_;\n                if (stopped) {\n                    unsubscribe();\n                }\n            });\n            return () => {\n                stopped = true;\n                unsubscribe();\n            };\n        },\n        listener: wrapped,\n    };\n}\n"]}