@pyscript/core 0.1.16 → 0.1.18

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.
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sources":["../node_modules/@ungap/with-resolvers/index.js","../node_modules/basic-devtools/esm/index.js","../node_modules/@ungap/structured-clone/esm/deserialize.js","../node_modules/@ungap/structured-clone/esm/types.js","../node_modules/@ungap/structured-clone/esm/serialize.js","../node_modules/@ungap/structured-clone/esm/json.js","../node_modules/coincident/esm/channel.js","../node_modules/coincident/esm/fallback.js","../node_modules/coincident/esm/index.js","../node_modules/coincident/esm/shared/types.js","../node_modules/coincident/esm/shared/utils.js","../node_modules/coincident/esm/shared/traps.js","../node_modules/coincident/esm/shared/main.js","../node_modules/coincident/esm/window/main.js","../node_modules/coincident/esm/window/thread.js","../node_modules/coincident/esm/shared/thread.js","../node_modules/coincident/esm/shared/worker.js","../node_modules/coincident/esm/window.js","../node_modules/codedent/esm/index.js","../node_modules/plain-tag/esm/index.js","../node_modules/polyscript/esm/utils.js","../node_modules/polyscript/esm/fetch-utils.js","../node_modules/polyscript/esm/worker/hooks.js","../node_modules/polyscript/esm/worker/class.js","../node_modules/polyscript/esm/worker/xworker.js","../node_modules/polyscript/esm/worker/url.js","../node_modules/polyscript/esm/interpreter/_utils.js","../node_modules/polyscript/esm/interpreter/_python.js","../node_modules/polyscript/esm/interpreter/micropython.js","../node_modules/polyscript/esm/interpreter/pyodide.js","../node_modules/polyscript/esm/interpreter/ruby-wasm-wasi.js","../node_modules/polyscript/esm/interpreter/wasmoon.js","../node_modules/polyscript/esm/interpreters.js","../node_modules/polyscript/esm/toml.js","../node_modules/polyscript/esm/loader.js","../node_modules/polyscript/esm/script-handler.js","../node_modules/polyscript/esm/listeners.js","../node_modules/polyscript/esm/custom.js","../node_modules/polyscript/esm/index.js","../src/sync.js","../src/stdlib.js","../src/stdlib/pyscript.js","../src/plugins.js","../src/exceptions.js","../src/fetch.js","../src/core.js"],"sourcesContent":["Promise.withResolvers || (Promise.withResolvers = function withResolvers() {\n var a, b, c = new this(function (resolve, reject) {\n a = resolve;\n b = reject;\n });\n return {resolve: a, reject: b, promise: c};\n});\n","/**\n * Given a CSS selector, returns the first matching node, if any.\n * @param {string} css the CSS selector to query\n * @param {Document | DocumentFragment | Element} [root] the optional parent node to query\n * @returns {Element?} the found element, if any\n */\nconst $ = (css, root = document) => root.querySelector(css);\n\n/**\n * Given a CSS selector, returns a list of all matching nodes.\n * @param {string} css the CSS selector to query\n * @param {Document | DocumentFragment | Element} [root] the optional parent node to query\n * @returns {Element[]} a list of found nodes\n */\nconst $$ = (css, root = document) => [...root.querySelectorAll(css)];\n\n/**\n * Given a XPath selector, returns a list of all matching nodes.\n * @param {string} path the XPath selector to evaluate\n * @param {Document | DocumentFragment | Element} [root] the optional parent node to query\n * @returns {Node[]} a list of found nodes (elements, attributes, text, comments)\n */\nconst $x = (path, root = document) => {\n const expression = (new XPathEvaluator).createExpression(path);\n const xpath = expression.evaluate(root, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE);\n const result = [];\n for (let i = 0, {snapshotLength} = xpath; i < snapshotLength; i++)\n result.push(xpath.snapshotItem(i));\n return result;\n};\n\nexport {$, $$, $x};\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n const as = (out, index) => {\n $.set(index, out);\n return out;\n };\n\n const unpair = index => {\n if ($.has(index))\n return $.get(index);\n\n const [type, value] = _[index];\n switch (type) {\n case PRIMITIVE:\n case VOID:\n return as(value, index);\n case ARRAY: {\n const arr = as([], index);\n for (const index of value)\n arr.push(unpair(index));\n return arr;\n }\n case OBJECT: {\n const object = as({}, index);\n for (const [key, index] of value)\n object[unpair(key)] = unpair(index);\n return object;\n }\n case DATE:\n return as(new Date(value), index);\n case REGEXP: {\n const {source, flags} = value;\n return as(new RegExp(source, flags), index);\n }\n case MAP: {\n const map = as(new Map, index);\n for (const [key, index] of value)\n map.set(unpair(key), unpair(index));\n return map;\n }\n case SET: {\n const set = as(new Set, index);\n for (const index of value)\n set.add(unpair(index));\n return set;\n }\n case ERROR: {\n const {name, message} = value;\n return as(new env[name](message), index);\n }\n case BIGINT:\n return as(BigInt(value), index);\n case 'BigInt':\n return as(Object(BigInt(value)), index);\n }\n return as(new env[type](value), index);\n };\n\n return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","export const VOID = -1;\nexport const PRIMITIVE = 0;\nexport const ARRAY = 1;\nexport const OBJECT = 2;\nexport const DATE = 3;\nexport const REGEXP = 4;\nexport const MAP = 5;\nexport const SET = 6;\nexport const ERROR = 7;\nexport const BIGINT = 8;\n// export const SYMBOL = 9;\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n const type = typeof value;\n if (type !== 'object' || !value)\n return [PRIMITIVE, type];\n\n const asString = toString.call(value).slice(8, -1);\n switch (asString) {\n case 'Array':\n return [ARRAY, EMPTY];\n case 'Object':\n return [OBJECT, EMPTY];\n case 'Date':\n return [DATE, EMPTY];\n case 'RegExp':\n return [REGEXP, EMPTY];\n case 'Map':\n return [MAP, EMPTY];\n case 'Set':\n return [SET, EMPTY];\n }\n\n if (asString.includes('Array'))\n return [ARRAY, asString];\n\n if (asString.includes('Error'))\n return [ERROR, asString];\n\n return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n TYPE === PRIMITIVE &&\n (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n const as = (out, value) => {\n const index = _.push(out) - 1;\n $.set(value, index);\n return index;\n };\n\n const pair = value => {\n if ($.has(value))\n return $.get(value);\n\n let [TYPE, type] = typeOf(value);\n switch (TYPE) {\n case PRIMITIVE: {\n let entry = value;\n switch (type) {\n case 'bigint':\n TYPE = BIGINT;\n entry = value.toString();\n break;\n case 'function':\n case 'symbol':\n if (strict)\n throw new TypeError('unable to serialize ' + type);\n entry = null;\n break;\n case 'undefined':\n return as([VOID], value);\n }\n return as([TYPE, entry], value);\n }\n case ARRAY: {\n if (type)\n return as([type, [...value]], value);\n \n const arr = [];\n const index = as([TYPE, arr], value);\n for (const entry of value)\n arr.push(pair(entry));\n return index;\n }\n case OBJECT: {\n if (type) {\n switch (type) {\n case 'BigInt':\n return as([type, value.toString()], value);\n case 'Boolean':\n case 'Number':\n case 'String':\n return as([type, value.valueOf()], value);\n }\n }\n\n if (json && ('toJSON' in value))\n return pair(value.toJSON());\n\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const key of keys(value)) {\n if (strict || !shouldSkip(typeOf(value[key])))\n entries.push([pair(key), pair(value[key])]);\n }\n return index;\n }\n case DATE:\n return as([TYPE, value.toISOString()], value);\n case REGEXP: {\n const {source, flags} = value;\n return as([TYPE, {source, flags}], value);\n }\n case MAP: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const [key, entry] of value) {\n if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n entries.push([pair(key), pair(entry)]);\n }\n return index;\n }\n case SET: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const entry of value) {\n if (strict || !shouldSkip(typeOf(entry)))\n entries.push(pair(entry));\n }\n return index;\n }\n }\n\n const {message} = value;\n return as([TYPE, {name: type, message}], value);\n };\n\n return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n * if `true`, will not throw errors on incompatible types, and behave more\n * like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n const _ = [];\n return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","/*! (c) Andrea Giammarchi - ISC */\n\nimport {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\nconst {parse: $parse, stringify: $stringify} = JSON;\nconst options = {json: true, lossy: true};\n\n/**\n * Revive a previously stringified structured clone.\n * @param {string} str previously stringified data as string.\n * @returns {any} whatever was previously stringified as clone.\n */\nexport const parse = str => deserialize($parse(str));\n\n/**\n * Represent a structured clone value as string.\n * @param {any} any some clone-able value to stringify.\n * @returns {string} the value stringified.\n */\nexport const stringify = any => $stringify(serialize(any, options));\n","// ⚠️ AUTOMATICALLY GENERATED - DO NOT CHANGE\nexport const CHANNEL = '891249cd-eb53-4bc8-ae48-b0a5a277d24a';\n\nexport const MAIN = 'M' + CHANNEL;\nexport const THREAD = 'T' + CHANNEL;\n","// encodeURIComponent('onmessage=({data:b})=>(Atomics.wait(b,0),postMessage(0))')\n\nexport default buffer => ({\n value: new Promise(onmessage => {\n let w = new Worker('data:application/javascript,onmessage%3D(%7Bdata%3Ab%7D)%3D%3E(Atomics.wait(b%2C0)%2CpostMessage(0))');\n w.onmessage = onmessage;\n w.postMessage(buffer);\n })\n});\n","/*! (c) Andrea Giammarchi - ISC */\n\nimport {CHANNEL} from './channel.js';\nimport waitAsyncFallback from './fallback.js';\n\n// just minifier friendly for Blob Workers' cases\nconst {Int32Array, Map, SharedArrayBuffer, Uint16Array} = globalThis;\n\n// common constants / utilities for repeated operations\nconst {BYTES_PER_ELEMENT: I32_BYTES} = Int32Array;\nconst {BYTES_PER_ELEMENT: UI16_BYTES} = Uint16Array;\n\nconst {isArray} = Array;\nconst {notify, wait, waitAsync} = Atomics;\nconst {fromCharCode} = String;\n\n// automatically uses sync wait (worker -> main)\n// or fallback to async wait (main -> worker)\nconst waitFor = (isAsync, sb) => isAsync ?\n (waitAsync || waitAsyncFallback)(sb, 0) :\n (wait(sb, 0), {value: {then: fn => fn()}});\n\n// retain buffers to transfer\nconst buffers = new WeakSet;\n\n// retain either main threads or workers global context\nconst context = new WeakMap;\n\n// used to generate a unique `id` per each worker `postMessage` \"transaction\"\nlet uid = 0;\n\n/**\n * Create once a `Proxy` able to orchestrate synchronous `postMessage` out of the box.\n * @param {globalThis | Worker} self the context in which code should run\n * @param {{parse: (serialized: string) => any, stringify: (serializable: any) => string, transform?: (value:any) => any}} [JSON] an optional `JSON` like interface to `parse` or `stringify` content with extra `transform` ability.\n * @returns {ProxyHandler<globalThis> | ProxyHandler<Worker>}\n */\nconst coincident = (self, {parse, stringify, transform} = JSON) => {\n // create a Proxy once for the given context (globalThis or Worker instance)\n if (!context.has(self)) {\n // ensure the CHANNEL and data are posted correctly\n const post = (transfer, ...args) => self.postMessage({[CHANNEL]: args}, {transfer});\n\n // prevent Harakiri https://github.com/WebReflection/coincident/issues/18\n let harakiri = false;\n\n context.set(self, new Proxy(new Map, {\n // there is very little point in checking prop in proxy for this very specific case\n // and I don't want to orchestrate a whole roundtrip neither, as stuff would fail\n // regardless if from Worker we access non existent Main callback, and vice-versa.\n // This is here mostly to guarantee that if such check is performed, at least the\n // get trap goes through and then it's up to developers guarantee they are accessing\n // stuff that actually exists elsewhere.\n has: (_, action) => typeof action === 'string' && !action.startsWith('_'),\n\n // worker related: get any utility that should be available on the main thread\n get: (_, action) => action === 'then' ? null : ((...args) => {\n // transaction id\n const id = uid++;\n\n // first contact: just ask for how big the buffer should be\n let sb = new Int32Array(new SharedArrayBuffer(I32_BYTES));\n\n // if a transfer list has been passed, drop it from args\n let transfer = [];\n if (buffers.has(args.at(-1) || transfer))\n buffers.delete(transfer = args.pop());\n\n // ask for invoke with arguments and wait for it\n post(transfer, id, sb, action, transform ? args.map(transform) : args);\n\n // helps deciding how to wait for results\n const isAsync = self !== globalThis;\n\n // warn users about possible deadlock still allowing them\n // to explicitly `proxy.invoke().then(...)` without blocking\n let deadlock = 0;\n if (harakiri && isAsync)\n deadlock = setTimeout(console.warn, 1000, `💀🔒 - Possible deadlock if proxy.${action}(...args) is awaited`);\n\n return waitFor(isAsync, sb).value.then(() => {\n clearTimeout(deadlock);\n\n // commit transaction using the returned / needed buffer length\n const length = sb[0];\n\n // filter undefined results\n if (!length) return;\n\n // calculate the needed ui16 bytes length to store the result string\n const bytes = UI16_BYTES * length;\n\n // round up to the next amount of bytes divided by 4 to allow i32 operations\n sb = new Int32Array(new SharedArrayBuffer(bytes + (bytes % I32_BYTES)));\n\n // ask for results and wait for it\n post([], id, sb);\n return waitFor(isAsync, sb).value.then(\n // transform the shared buffer into a string and return it parsed\n () => parse(fromCharCode(...new Uint16Array(sb.buffer).slice(0, length)))\n );\n });\n }),\n\n // main thread related: react to any utility a worker is asking for\n set(actions, action, callback) {\n // lazy event listener and logic handling, triggered once by setters actions\n if (!actions.size) {\n // maps results by `id` as they are asked for\n const results = new Map;\n // add the event listener once (first defined setter, all others work the same)\n self.addEventListener('message', async (event) => {\n // grub the very same library CHANNEL; ignore otherwise\n const details = event.data?.[CHANNEL];\n if (isArray(details)) {\n // if early enough, avoid leaking data to other listeners\n event.stopImmediatePropagation();\n const [id, sb, ...rest] = details;\n // action available: it must be defined/known on the main thread\n if (rest.length) {\n const [action, args] = rest;\n if (actions.has(action)) {\n harakiri = true;\n try {\n // await for result either sync or async and serialize it\n const result = await actions.get(action)(...args);\n if (result !== void 0) {\n const serialized = stringify(result);\n // store the result for \"the very next\" event listener call\n results.set(id, serialized);\n // communicate the required SharedArrayBuffer length out of the\n // resulting serialized string\n sb[0] = serialized.length;\n }\n }\n finally {\n harakiri = false;\n }\n }\n // unknown action should be notified as missing on the main thread\n else {\n throw new Error(`Unsupported action: ${action}`);\n }\n }\n // no action means: get results out of the well known `id`\n else {\n const result = results.get(id);\n results.delete(id);\n // populate the SharedArrayBuffer with utf-16 chars code\n for (let ui16a = new Uint16Array(sb.buffer), i = 0; i < result.length; i++)\n ui16a[i] = result.charCodeAt(i);\n }\n // release te worker waiting either the length or the result\n notify(sb, 0);\n }\n });\n }\n // store this action callback allowing the setter in the process\n return !!actions.set(action, callback);\n }\n }));\n }\n return context.get(self);\n};\n\ncoincident.transfer = (...args) => (buffers.add(args), args);\n\nexport default coincident;\n","export const OBJECT = 'object';\nexport const FUNCTION = 'function';\nexport const BOOLEAN = 'boolean';\nexport const NUMBER = 'number';\nexport const STRING = 'string';\nexport const UNDEFINED = 'undefined';\nexport const BIGINT = 'bigint';\nexport const SYMBOL = 'symbol';\nexport const NULL = 'null';\n","\nimport {\n OBJECT,\n FUNCTION,\n BOOLEAN,\n NUMBER,\n STRING,\n UNDEFINED,\n BIGINT,\n SYMBOL,\n NULL\n} from './types.js';\n\nconst {\n defineProperty,\n getOwnPropertyDescriptor,\n getPrototypeOf,\n isExtensible,\n ownKeys,\n preventExtensions,\n set,\n setPrototypeOf\n} = Reflect;\n\nconst {assign, create} = Object;\n\nexport const TypedArray = getPrototypeOf(Int8Array);\n\nexport const isArray = 'isArray';\n\nexport {\n assign,\n create,\n defineProperty,\n getOwnPropertyDescriptor,\n getPrototypeOf,\n isExtensible,\n ownKeys,\n preventExtensions,\n set,\n setPrototypeOf\n};\n\nexport const augment = (descriptor, how) => {\n const {get, set, value} = descriptor;\n if (get) descriptor.get = how(get);\n if (set) descriptor.set = how(set);\n if (value) descriptor.value = how(value);\n return descriptor;\n};\n\nexport const entry = (type, value) => [type, value];\n\nexport const asEntry = transform => value => {\n const type = typeof value;\n switch (type) {\n case OBJECT:\n if (value == null)\n return entry(NULL, value);\n if (value === globalThis)\n return entry(OBJECT, null);\n case FUNCTION:\n return transform(type, value);\n case BOOLEAN:\n case NUMBER:\n case STRING:\n case UNDEFINED:\n case BIGINT:\n return entry(type, value);\n case SYMBOL: {\n if (symbols.has(value))\n return entry(type, symbols.get(value));\n }\n }\n throw new Error(`Unable to handle this ${type} type`);\n};\n\nconst symbols = new Map(\n ownKeys(Symbol)\n .filter(s => typeof Symbol[s] === SYMBOL)\n .map(s => [Symbol[s], s])\n);\n \nexport const symbol = value => {\n for (const [symbol, name] of symbols) {\n if (name === value)\n return symbol;\n }\n};\n\nexport function Bound() {\n return this;\n}\n","export const APPLY = 'apply';\nexport const CONSTRUCT = 'construct';\nexport const DEFINE_PROPERTY = 'defineProperty';\nexport const DELETE_PROPERTY = 'deleteProperty';\nexport const GET = 'get';\nexport const GET_OWN_PROPERTY_DESCRIPTOR = 'getOwnPropertyDescriptor';\nexport const GET_PROTOTYPE_OF = 'getPrototypeOf';\nexport const HAS = 'has';\nexport const IS_EXTENSIBLE = 'isExtensible';\nexport const OWN_KEYS = 'ownKeys';\nexport const PREVENT_EXTENSION = 'preventExtensions';\nexport const SET = 'set';\nexport const SET_PROTOTYPE_OF = 'setPrototypeOf';\nexport const DELETE = 'delete';\n","import {\n TypedArray,\n defineProperty,\n getOwnPropertyDescriptor,\n getPrototypeOf,\n isExtensible,\n ownKeys,\n preventExtensions,\n set,\n setPrototypeOf,\n\n assign,\n create,\n augment,\n entry,\n asEntry,\n symbol\n} from './utils.js';\n\nimport {\n OBJECT,\n FUNCTION,\n NUMBER,\n STRING,\n SYMBOL,\n UNDEFINED\n} from './types.js';\n\nimport {\n APPLY,\n CONSTRUCT,\n DEFINE_PROPERTY,\n DELETE_PROPERTY,\n GET,\n GET_OWN_PROPERTY_DESCRIPTOR,\n GET_PROTOTYPE_OF,\n HAS,\n IS_EXTENSIBLE,\n OWN_KEYS,\n PREVENT_EXTENSION,\n SET,\n SET_PROTOTYPE_OF,\n DELETE\n} from './traps.js';\n\nexport default (name, patch) => {\n const eventsHandler = patch && new WeakMap;\n\n // patch once main UI tread\n if (patch) {\n const {addEventListener} = EventTarget.prototype;\n // this should never be on the way as it's extremely light and fast\n // but it's necessary to allow \"preventDefault\" or other event invokes at distance\n defineProperty(EventTarget.prototype, 'addEventListener', {\n value(type, listener, ...options) {\n if (options.at(0)?.invoke) {\n if (!eventsHandler.has(this))\n eventsHandler.set(this, new Map);\n eventsHandler.get(this).set(type, [].concat(options[0].invoke));\n delete options[0].invoke;\n }\n return addEventListener.call(this, type, listener, ...options);\n }\n });\n }\n\n const handleEvent = patch && (event => {\n const {currentTarget, target, type} = event;\n for (const method of eventsHandler.get(currentTarget || target)?.get(type) || [])\n event[method]();\n });\n\n return (thread, MAIN, THREAD, ...args) => {\n let id = 0;\n const ids = new Map;\n const values = new Map;\n\n const {[THREAD]: __thread__} = thread;\n\n const global = args.length ? assign(create(globalThis), ...args) : globalThis;\n\n const result = asEntry((type, value) => {\n if (!ids.has(value)) {\n let sid;\n // a bit apocalyptic scenario but if this main runs forever\n // and the id does a whole int32 roundtrip we might have still\n // some reference danglign around\n while (values.has(sid = id++));\n ids.set(value, sid);\n values.set(sid, value);\n }\n return entry(type, ids.get(value));\n });\n\n const registry = new FinalizationRegistry(id => {\n __thread__(DELETE, entry(STRING, id));\n });\n\n const target = ([type, value]) => {\n switch (type) {\n case OBJECT:\n if (value == null)\n return global;\n if (typeof value === NUMBER)\n return values.get(value);\n if (!(value instanceof TypedArray)) {\n for (const key in value)\n value[key] = target(value[key]);\n }\n return value;\n case FUNCTION:\n if (typeof value === STRING) {\n if (!values.has(value)) {\n const cb = function (...args) {\n if (patch && args.at(0) instanceof Event) handleEvent(...args);\n return __thread__(\n APPLY,\n entry(FUNCTION, value),\n result(this),\n args.map(result)\n );\n };\n const ref = new WeakRef(cb);\n values.set(value, ref);\n registry.register(cb, value, ref);\n }\n return values.get(value).deref();\n }\n return values.get(value);\n case SYMBOL:\n return symbol(value);\n }\n return value;\n };\n\n const trapsHandler = {\n [APPLY]: (target, thisArg, args) => result(target.apply(thisArg, args)),\n [CONSTRUCT]: (target, args) => result(new target(...args)),\n [DEFINE_PROPERTY]: (target, name, descriptor) => result(defineProperty(target, name, descriptor)),\n [DELETE_PROPERTY]: (target, name) => result(delete target[name]),\n [GET_PROTOTYPE_OF]: target => result(getPrototypeOf(target)),\n [GET]: (target, name) => result(target[name]),\n [GET_OWN_PROPERTY_DESCRIPTOR]: (target, name) => {\n const descriptor = getOwnPropertyDescriptor(target, name);\n return descriptor ? entry(OBJECT, augment(descriptor, result)) : entry(UNDEFINED, descriptor);\n },\n [HAS]: (target, name) => result(name in target),\n [IS_EXTENSIBLE]: target => result(isExtensible(target)),\n [OWN_KEYS]: target => entry(OBJECT, ownKeys(target).map(result)),\n [PREVENT_EXTENSION]: target => result(preventExtensions(target)),\n [SET]: (target, name, value) => result(set(target, name, value)),\n [SET_PROTOTYPE_OF]: (target, proto) => result(setPrototypeOf(target, proto)),\n [DELETE](id) {\n ids.delete(values.get(id));\n values.delete(id);\n }\n };\n\n thread[MAIN] = (trap, entry, ...args) => {\n switch (trap) {\n case APPLY:\n args[0] = target(args[0]);\n args[1] = args[1].map(target);\n break;\n case CONSTRUCT:\n args[0] = args[0].map(target);\n break;\n case DEFINE_PROPERTY: {\n const [name, descriptor] = args;\n args[0] = target(name);\n const {get, set, value} = descriptor;\n if (get) descriptor.get = target(get);\n if (set) descriptor.set = target(set);\n if (value) descriptor.value = target(value);\n break;\n }\n default:\n args = args.map(target);\n break;\n }\n return trapsHandler[trap](target(entry), ...args);\n };\n\n return {\n proxy: thread,\n [name.toLowerCase()]: global,\n [`is${name}Proxy`]: () => false\n };\n };\n};\n","import main from '../shared/main.js';\n\nexport default main('Window', true);\n","import thread from '../shared/thread.js';\n\nexport default thread('Window');\n","import {\n Bound,\n TypedArray,\n augment,\n defineProperty,\n entry,\n asEntry,\n symbol,\n isArray\n} from './utils.js';\n\nimport {\n OBJECT,\n FUNCTION,\n NUMBER,\n STRING,\n SYMBOL\n} from './types.js';\n\nimport {\n APPLY,\n CONSTRUCT,\n DEFINE_PROPERTY,\n DELETE_PROPERTY,\n GET,\n GET_OWN_PROPERTY_DESCRIPTOR,\n GET_PROTOTYPE_OF,\n HAS,\n IS_EXTENSIBLE,\n OWN_KEYS,\n PREVENT_EXTENSION,\n SET,\n SET_PROTOTYPE_OF,\n DELETE\n} from './traps.js';\n\nexport default name => {\n let id = 0;\n const ids = new Map;\n const values = new Map;\n\n const __proxied__ = Symbol();\n\n const bound = target => typeof target === FUNCTION ? target() : target;\n\n const isProxy = value => typeof value === OBJECT && !!value && __proxied__ in value;\n\n const localArray = Array[isArray];\n\n const argument = asEntry(\n (type, value) => {\n if (__proxied__ in value)\n return bound(value[__proxied__]);\n if (type === FUNCTION) {\n if (!values.has(value)) {\n let sid;\n // a bit apocalyptic scenario but if this thread runs forever\n // and the id does a whole int32 roundtrip we might have still\n // some reference dangling around\n while (values.has(sid = String(id++)));\n ids.set(value, sid);\n values.set(sid, value);\n }\n return entry(type, ids.get(value));\n }\n if (!(value instanceof TypedArray)) {\n for(const key in value)\n value[key] = argument(value[key]);\n }\n return entry(type, value);\n }\n );\n\n return (main, MAIN, THREAD) => {\n const { [MAIN]: __main__ } = main;\n\n const proxies = new Map;\n\n const registry = new FinalizationRegistry(id => {\n proxies.delete(id);\n __main__(DELETE, argument(id));\n });\n\n const register = (entry) => {\n const [type, value] = entry;\n if (!proxies.has(value)) {\n const target = type === FUNCTION ? Bound.bind(entry) : entry;\n const proxy = new Proxy(target, proxyHandler);\n const ref = new WeakRef(proxy);\n proxies.set(value, ref);\n registry.register(proxy, value, ref);\n }\n return proxies.get(value).deref();\n };\n\n const fromEntry = entry => {\n const [type, value] = entry;\n switch (type) {\n case OBJECT:\n return value === null ? globalThis : (\n typeof value === NUMBER ? register(entry) : value\n );\n case FUNCTION:\n return typeof value === STRING ? values.get(value) : register(entry);\n case SYMBOL:\n return symbol(value);\n }\n return value;\n };\n\n const result = (TRAP, target, ...args) => fromEntry(__main__(TRAP, bound(target), ...args));\n\n const proxyHandler = {\n [APPLY]: (target, thisArg, args) => result(APPLY, target, argument(thisArg), args.map(argument)),\n [CONSTRUCT]: (target, args) => result(CONSTRUCT, target, args.map(argument)),\n [DEFINE_PROPERTY]: (target, name, descriptor) => {\n const { get, set, value } = descriptor;\n if (typeof get === FUNCTION) descriptor.get = argument(get);\n if (typeof set === FUNCTION) descriptor.set = argument(set);\n if (typeof value === FUNCTION) descriptor.value = argument(value);\n return result(DEFINE_PROPERTY, target, argument(name), descriptor);\n },\n [DELETE_PROPERTY]: (target, name) => result(DELETE_PROPERTY, target, argument(name)),\n [GET_PROTOTYPE_OF]: target => result(GET_PROTOTYPE_OF, target),\n [GET]: (target, name) => name === __proxied__ ? target : result(GET, target, argument(name)),\n [GET_OWN_PROPERTY_DESCRIPTOR]: (target, name) => {\n const descriptor = result(GET_OWN_PROPERTY_DESCRIPTOR, target, argument(name));\n return descriptor && augment(descriptor, fromEntry);\n },\n [HAS]: (target, name) => name === __proxied__ || result(HAS, target, argument(name)),\n [IS_EXTENSIBLE]: target => result(IS_EXTENSIBLE, target),\n [OWN_KEYS]: target => result(OWN_KEYS, target).map(fromEntry),\n [PREVENT_EXTENSION]: target => result(PREVENT_EXTENSION, target),\n [SET]: (target, name, value) => result(SET, target, argument(name), argument(value)),\n [SET_PROTOTYPE_OF]: (target, proto) => result(SET_PROTOTYPE_OF, target, argument(proto)),\n };\n\n main[THREAD] = (trap, entry, ctx, args) => {\n switch (trap) {\n case APPLY:\n return fromEntry(entry).apply(fromEntry(ctx), args.map(fromEntry));\n case DELETE: {\n const id = fromEntry(entry);\n ids.delete(values.get(id));\n values.delete(id);\n }\n }\n };\n\n const global = new Proxy([OBJECT, null], proxyHandler);\n\n // this is needed to avoid confusion when new Proxy([type, value])\n // passes through `isArray` check, as that would return always true\n // by specs and there's no Proxy trap to avoid it.\n const remoteArray = global.Array[isArray];\n defineProperty(Array, isArray, {\n value: ref => isProxy(ref) ? remoteArray(ref) : localArray(ref)\n });\n\n return {\n [name.toLowerCase()]: global,\n [`is${name}Proxy`]: isProxy,\n proxy: main\n };\n };\n};\n","export default typeof Worker === 'function' ? Worker : class {};\n","import {MAIN, THREAD} from './channel.js';\nimport $coincident from './index.js';\nimport main from './window/main.js';\nimport thread from './window/thread.js';\nimport Worker from './shared/worker.js';\n\nconst proxies = new WeakMap;\n\n/**\n * @typedef {object} Coincident\n * @property {ProxyHandler<globalThis>} proxy\n * @property {ProxyHandler<Window>} window\n * @property {(value: any) => boolean} isWindowProxy\n */\n\n/**\n * Create once a `Proxy` able to orchestrate synchronous `postMessage` out of the box.\n * In workers, returns a `{proxy, window, isWindowProxy}` namespace to reach main globals synchronously.\n * @param {Worker | globalThis} self the context in which code should run\n * @returns {ProxyHandler<Worker> | Coincident}\n */\nconst coincident = (self, ...args) => {\n const proxy = $coincident(self, ...args);\n if (!proxies.has(proxy)) {\n const util = self instanceof Worker ? main : thread;\n proxies.set(proxy, util(proxy, MAIN, THREAD));\n }\n return proxies.get(proxy);\n}\n\ncoincident.transfer = $coincident.transfer;\n\nexport default coincident;\n","import content from 'plain-tag';\n\nconst dedent = {\n object(...args) {\n return this.string(content(...args));\n },\n string(content) {\n for (const line of content.split(/[\\r\\n]+/)) {\n // skip initial empty lines\n if (line.trim().length) {\n // trap indentation at the very first line of code\n if (/^(\\s+)/.test(line))\n content = content.replace(new RegExp('^' + RegExp.$1, 'gm'), '');\n // no indentation? all good: get out of here!\n break;\n }\n }\n return content;\n }\n};\n\n/**\n * Usable both as template literal tag or just as callback for strings, removes all spaces found\n * at the very first line of code encountered while sanitizing, keeping everything else around.\n * @param {string | TemplateStringsArray} tpl either code as string or as template, when used as tag\n * @param {...any} values the template interpolations, when used as tag\n * @returns {string} code without undesired indentation\n */\nconst codedent = (tpl, ...values) => dedent[typeof tpl](tpl, ...values);\n\nexport default codedent;\n","export default function (t) {\n for (var s = t[0], i = 1, l = arguments.length; i < l; i++)\n s += arguments[i] + t[i];\n return s;\n};\n","import dedent from 'codedent';\n\nconst { isArray } = Array;\n\nconst { assign, create, defineProperties, defineProperty, entries } = Object;\n\nconst { all, resolve } = new Proxy(Promise, {\n get: ($, name) => $[name].bind($),\n});\n\nconst absoluteURL = (path, base = location.href) => new URL(path, base).href;\n\n/* c8 ignore start */\nlet id = 0;\nconst nodeInfo = (node, type) => ({\n id: node.id || (node.id = `${type}-w${id++}`),\n tag: node.tagName\n});\n/* c8 ignore stop */\n\nexport {\n dedent,\n isArray,\n assign,\n create,\n defineProperties,\n defineProperty,\n entries,\n all,\n resolve,\n absoluteURL,\n nodeInfo,\n};\n","/** @param {Response} response */\nexport const getBuffer = (response) => response.arrayBuffer();\n\n/** @param {Response} response */\nexport const getJSON = (response) => response.json();\n\n/** @param {Response} response */\nexport const getText = (response) => response.text();\n","import { dedent } from '../utils.js';\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nconst workerHooks = [\n ['beforeRun', 'codeBeforeRunWorker'],\n ['beforeRunAsync', 'codeBeforeRunWorkerAsync'],\n ['afterRun', 'codeAfterRunWorker'],\n ['afterRunAsync', 'codeAfterRunWorkerAsync'],\n];\n\nexport class Hook {\n constructor(interpreter, options) {\n this.interpreter = interpreter;\n this.onWorkerReady = options.onWorkerReady;\n for (const [key, value] of workerHooks)\n this[key] = options[value]?.();\n }\n get stringHooks() {\n const hooks = {};\n for (const [key] of workerHooks) {\n if (this[key]) hooks[key] = dedent(this[key]);\n }\n return hooks;\n }\n}\n/* c8 ignore stop */\n","import * as JSON from '@ungap/structured-clone/json';\nimport coincident from 'coincident/window';\nimport xworker from './xworker.js';\nimport { assign, defineProperties, absoluteURL } from '../utils.js';\nimport { getText } from '../fetch-utils.js';\nimport { Hook } from './hooks.js';\n\n/**\n * @typedef {Object} WorkerOptions custom configuration\n * @prop {string} type the interpreter type to use\n * @prop {string} [version] the optional interpreter version to use\n * @prop {string} [config] the optional config to use within such interpreter\n */\n\nexport default (...args) =>\n /**\n * A XWorker is a Worker facade able to bootstrap a channel with any desired interpreter.\n * @param {string} url the remote file to evaluate on bootstrap\n * @param {WorkerOptions} [options] optional arguments to define the interpreter to use\n * @returns {Worker}\n */\n function XWorker(url, options) {\n const worker = xworker();\n const { postMessage } = worker;\n const isHook = this instanceof Hook;\n\n if (args.length) {\n const [type, version] = args;\n options = assign({}, options || { type, version });\n if (!options.type) options.type = type;\n }\n\n // provide a base url to fetch or load config files from a Worker\n // because there's no location at all in the Worker as it's embedded.\n // fallback to a generic, ignored, config.txt file to still provide a URL.\n const { config: c } = options;\n const config = absoluteURL(c && typeof c === 'string' ? c : './config.txt');\n\n const bootstrap = fetch(url)\n .then(getText)\n .then(code => {\n const hooks = isHook ? this.stringHooks : void 0;\n postMessage.call(worker, { options, config, code, hooks });\n });\n\n defineProperties(worker, {\n postMessage: {\n value: (data, ...rest) =>\n bootstrap.then(() =>\n postMessage.call(worker, data, ...rest),\n ),\n },\n sync: {\n value: coincident(worker, JSON).proxy,\n },\n onerror: {\n writable: true,\n configurable: true,\n value: console.error\n }\n });\n\n if (isHook) this.onWorkerReady?.(this.interpreter, worker);\n\n worker.addEventListener('message', event => {\n const { data } = event;\n if (data instanceof Error) {\n event.stopImmediatePropagation();\n worker.onerror(Object.create(event, {\n type: { value: 'error' },\n error: { value: data }\n }));\n }\n });\n\n return worker;\n };\n","/* c8 ignore next */\nexport default () => new Worker(URL.createObjectURL(new Blob([\"const e=\\\"object\\\"==typeof self?self:globalThis,t=t=>((t,r)=>{const n=(e,r)=>(t.set(r,e),e),s=o=>{if(t.has(o))return t.get(o);const[a,i]=r[o];switch(a){case 0:case-1:return n(i,o);case 1:{const e=n([],o);for(const t of i)e.push(s(t));return e}case 2:{const e=n({},o);for(const[t,r]of i)e[s(t)]=s(r);return e}case 3:return n(new Date(i),o);case 4:{const{source:e,flags:t}=i;return n(new RegExp(e,t),o)}case 5:{const e=n(new Map,o);for(const[t,r]of i)e.set(s(t),s(r));return e}case 6:{const e=n(new Set,o);for(const t of i)e.add(s(t));return e}case 7:{const{name:t,message:r}=i;return n(new e[t](r),o)}case 8:return n(BigInt(i),o);case\\\"BigInt\\\":return n(Object(BigInt(i)),o)}return n(new e[a](i),o)};return s})(new Map,t)(0),r=\\\"\\\",{toString:n}={},{keys:s}=Object,o=e=>{const t=typeof e;if(\\\"object\\\"!==t||!e)return[0,t];const s=n.call(e).slice(8,-1);switch(s){case\\\"Array\\\":return[1,r];case\\\"Object\\\":return[2,r];case\\\"Date\\\":return[3,r];case\\\"RegExp\\\":return[4,r];case\\\"Map\\\":return[5,r];case\\\"Set\\\":return[6,r]}return s.includes(\\\"Array\\\")?[1,s]:s.includes(\\\"Error\\\")?[7,s]:[2,s]},a=([e,t])=>0===e&&(\\\"function\\\"===t||\\\"symbol\\\"===t),i=(e,{json:t,lossy:r}={})=>{const n=[];return((e,t,r,n)=>{const i=(e,t)=>{const s=n.push(e)-1;return r.set(t,s),s},c=n=>{if(r.has(n))return r.get(n);let[l,u]=o(n);switch(l){case 0:{let t=n;switch(u){case\\\"bigint\\\":l=8,t=n.toString();break;case\\\"function\\\":case\\\"symbol\\\":if(e)throw new TypeError(\\\"unable to serialize \\\"+u);t=null;break;case\\\"undefined\\\":return i([-1],n)}return i([l,t],n)}case 1:{if(u)return i([u,[...n]],n);const e=[],t=i([l,e],n);for(const t of n)e.push(c(t));return t}case 2:{if(u)switch(u){case\\\"BigInt\\\":return i([u,n.toString()],n);case\\\"Boolean\\\":case\\\"Number\\\":case\\\"String\\\":return i([u,n.valueOf()],n)}if(t&&\\\"toJSON\\\"in n)return c(n.toJSON());const r=[],f=i([l,r],n);for(const t of s(n))!e&&a(o(n[t]))||r.push([c(t),c(n[t])]);return f}case 3:return i([l,n.toISOString()],n);case 4:{const{source:e,flags:t}=n;return i([l,{source:e,flags:t}],n)}case 5:{const t=[],r=i([l,t],n);for(const[r,s]of n)(e||!a(o(r))&&!a(o(s)))&&t.push([c(r),c(s)]);return r}case 6:{const t=[],r=i([l,t],n);for(const r of n)!e&&a(o(r))||t.push(c(r));return r}}const{message:f}=n;return i([l,{name:u,message:f}],n)};return c})(!(t||r),!!t,new Map,n)(e),n},{parse:c,stringify:l}=JSON,u={json:!0,lossy:!0};var f=Object.freeze({__proto__:null,parse:e=>t(c(e)),stringify:e=>l(i(e,u))});const p=\\\"891249cd-eb53-4bc8-ae48-b0a5a277d24a\\\",d=\\\"M\\\"+p,g=\\\"T\\\"+p;var y=e=>({value:new Promise((t=>{let r=new Worker(\\\"data:application/javascript,onmessage%3D(%7Bdata%3Ab%7D)%3D%3E(Atomics.wait(b%2C0)%2CpostMessage(0))\\\");r.onmessage=t,r.postMessage(e)}))})\\n/*! (c) Andrea Giammarchi - ISC */;const{Int32Array:w,Map:h,SharedArrayBuffer:m,Uint16Array:b}=globalThis,{BYTES_PER_ELEMENT:v}=w,{BYTES_PER_ELEMENT:S}=b,{isArray:P}=Array,{notify:E,wait:A,waitAsync:M}=Atomics,{fromCharCode:$}=String,j=(e,t)=>e?(M||y)(t,0):(A(t,0),{value:{then:e=>e()}}),k=new WeakSet,x=new WeakMap;let T=0;const _=(e,{parse:t,stringify:r,transform:n}=JSON)=>{if(!x.has(e)){const s=(t,...r)=>e.postMessage({[p]:r},{transfer:t});let o=!1;x.set(e,new Proxy(new h,{has:(e,t)=>\\\"string\\\"==typeof t&&!t.startsWith(\\\"_\\\"),get:(r,a)=>\\\"then\\\"===a?null:(...r)=>{const i=T++;let c=new w(new m(v)),l=[];k.has(r.at(-1)||l)&&k.delete(l=r.pop()),s(l,i,c,a,n?r.map(n):r);const u=e!==globalThis;let f=0;return o&&u&&(f=setTimeout(console.warn,1e3,`💀🔒 - Possible deadlock if proxy.${a}(...args) is awaited`)),j(u,c).value.then((()=>{clearTimeout(f);const e=c[0];if(!e)return;const r=S*e;return c=new w(new m(r+r%v)),s([],i,c),j(u,c).value.then((()=>t($(...new b(c.buffer).slice(0,e)))))}))},set(t,n,s){if(!t.size){const n=new h;e.addEventListener(\\\"message\\\",(async e=>{const s=e.data?.[p];if(P(s)){e.stopImmediatePropagation();const[a,i,...c]=s;if(c.length){const[e,s]=c;if(!t.has(e))throw new Error(`Unsupported action: ${e}`);o=!0;try{const o=await t.get(e)(...s);if(void 0!==o){const e=r(o);n.set(a,e),i[0]=e.length}}finally{o=!1}}else{const e=n.get(a);n.delete(a);for(let t=new b(i.buffer),r=0;r<e.length;r++)t[r]=e.charCodeAt(r)}E(i,0)}}))}return!!t.set(n,s)}}))}return x.get(e)};_.transfer=(...e)=>(k.add(e),e);const O=\\\"object\\\",F=\\\"function\\\",W=\\\"number\\\",R=\\\"string\\\",B=\\\"undefined\\\",J=\\\"symbol\\\",{defineProperty:I,getOwnPropertyDescriptor:L,getPrototypeOf:C,isExtensible:H,ownKeys:D,preventExtensions:N,set:U,setPrototypeOf:z}=Reflect,{assign:q,create:K}=Object,Y=C(Int8Array),G=\\\"isArray\\\",V=(e,t)=>{const{get:r,set:n,value:s}=e;return r&&(e.get=t(r)),n&&(e.set=t(n)),s&&(e.value=t(s)),e},Q=(e,t)=>[e,t],X=e=>t=>{const r=typeof t;switch(r){case O:if(null==t)return Q(\\\"null\\\",t);if(t===globalThis)return Q(O,null);case F:return e(r,t);case\\\"boolean\\\":case W:case R:case B:case\\\"bigint\\\":return Q(r,t);case J:if(Z.has(t))return Q(r,Z.get(t))}throw new Error(`Unable to handle this ${r} type`)},Z=new Map(D(Symbol).filter((e=>typeof Symbol[e]===J)).map((e=>[Symbol[e],e]))),ee=e=>{for(const[t,r]of Z)if(r===e)return t};function te(){return this}const re=\\\"apply\\\",ne=\\\"construct\\\",se=\\\"defineProperty\\\",oe=\\\"deleteProperty\\\",ae=\\\"get\\\",ie=\\\"getOwnPropertyDescriptor\\\",ce=\\\"getPrototypeOf\\\",le=\\\"has\\\",ue=\\\"isExtensible\\\",fe=\\\"ownKeys\\\",pe=\\\"preventExtensions\\\",de=\\\"set\\\",ge=\\\"setPrototypeOf\\\",ye=\\\"delete\\\";var we=((e,t)=>{const r=t&&new WeakMap;if(t){const{addEventListener:e}=EventTarget.prototype;I(EventTarget.prototype,\\\"addEventListener\\\",{value(t,n,...s){return s.at(0)?.invoke&&(r.has(this)||r.set(this,new Map),r.get(this).set(t,[].concat(s[0].invoke)),delete s[0].invoke),e.call(this,t,n,...s)}})}const n=t&&(e=>{const{currentTarget:t,target:n,type:s}=e;for(const o of r.get(t||n)?.get(s)||[])e[o]()});return(r,s,o,...a)=>{let i=0;const c=new Map,l=new Map,{[o]:u}=r,f=a.length?q(K(globalThis),...a):globalThis,p=X(((e,t)=>{if(!c.has(t)){let e;for(;l.has(e=i++););c.set(t,e),l.set(e,t)}return Q(e,c.get(t))})),d=new FinalizationRegistry((e=>{u(ye,Q(R,e))})),g=([e,r])=>{switch(e){case O:if(null==r)return f;if(typeof r===W)return l.get(r);if(!(r instanceof Y))for(const e in r)r[e]=g(r[e]);return r;case F:if(typeof r===R){if(!l.has(r)){const e=function(...e){return t&&e.at(0)instanceof Event&&n(...e),u(re,Q(F,r),p(this),e.map(p))},s=new WeakRef(e);l.set(r,s),d.register(e,r,s)}return l.get(r).deref()}return l.get(r);case J:return ee(r)}return r},y={[re]:(e,t,r)=>p(e.apply(t,r)),[ne]:(e,t)=>p(new e(...t)),[se]:(e,t,r)=>p(I(e,t,r)),[oe]:(e,t)=>p(delete e[t]),[ce]:e=>p(C(e)),[ae]:(e,t)=>p(e[t]),[ie]:(e,t)=>{const r=L(e,t);return r?Q(O,V(r,p)):Q(B,r)},[le]:(e,t)=>p(t in e),[ue]:e=>p(H(e)),[fe]:e=>Q(O,D(e).map(p)),[pe]:e=>p(N(e)),[de]:(e,t,r)=>p(U(e,t,r)),[ge]:(e,t)=>p(z(e,t)),[ye](e){c.delete(l.get(e)),l.delete(e)}};return r[s]=(e,t,...r)=>{switch(e){case re:r[0]=g(r[0]),r[1]=r[1].map(g);break;case ne:r[0]=r[0].map(g);break;case se:{const[e,t]=r;r[0]=g(e);const{get:n,set:s,value:o}=t;n&&(t.get=g(n)),s&&(t.set=g(s)),o&&(t.value=g(o));break}default:r=r.map(g)}return y[e](g(t),...r)},{proxy:r,[e.toLowerCase()]:f,[`is${e}Proxy`]:()=>!1}}})(\\\"Window\\\",!0),he=(e=>{let t=0;const r=new Map,n=new Map,s=Symbol(),o=e=>typeof e===F?e():e,a=e=>typeof e===O&&!!e&&s in e,i=Array[G],c=X(((e,a)=>{if(s in a)return o(a[s]);if(e===F){if(!n.has(a)){let e;for(;n.has(e=String(t++)););r.set(a,e),n.set(e,a)}return Q(e,r.get(a))}if(!(a instanceof Y))for(const e in a)a[e]=c(a[e]);return Q(e,a)}));return(t,l,u)=>{const{[l]:f}=t,p=new Map,d=new FinalizationRegistry((e=>{p.delete(e),f(ye,c(e))})),g=e=>{const[t,r]=e;if(!p.has(r)){const n=t===F?te.bind(e):e,s=new Proxy(n,h),o=new WeakRef(s);p.set(r,o),d.register(s,r,o)}return p.get(r).deref()},y=e=>{const[t,r]=e;switch(t){case O:return null===r?globalThis:typeof r===W?g(e):r;case F:return typeof r===R?n.get(r):g(e);case J:return ee(r)}return r},w=(e,t,...r)=>y(f(e,o(t),...r)),h={[re]:(e,t,r)=>w(re,e,c(t),r.map(c)),[ne]:(e,t)=>w(ne,e,t.map(c)),[se]:(e,t,r)=>{const{get:n,set:s,value:o}=r;return typeof n===F&&(r.get=c(n)),typeof s===F&&(r.set=c(s)),typeof o===F&&(r.value=c(o)),w(se,e,c(t),r)},[oe]:(e,t)=>w(oe,e,c(t)),[ce]:e=>w(ce,e),[ae]:(e,t)=>t===s?e:w(ae,e,c(t)),[ie]:(e,t)=>{const r=w(ie,e,c(t));return r&&V(r,y)},[le]:(e,t)=>t===s||w(le,e,c(t)),[ue]:e=>w(ue,e),[fe]:e=>w(fe,e).map(y),[pe]:e=>w(pe,e),[de]:(e,t,r)=>w(de,e,c(t),c(r)),[ge]:(e,t)=>w(ge,e,c(t))};t[u]=(e,t,s,o)=>{switch(e){case re:return y(t).apply(y(s),o.map(y));case ye:{const e=y(t);r.delete(n.get(e)),n.delete(e)}}};const m=new Proxy([O,null],h),b=m.Array[G];return I(Array,G,{value:e=>a(e)?b(e):i(e)}),{[e.toLowerCase()]:m,[`is${e}Proxy`]:a,proxy:t}}})(\\\"Window\\\"),me=\\\"function\\\"==typeof Worker?Worker:class{};const be=new WeakMap,ve=(e,...t)=>{const r=_(e,...t);if(!be.has(r)){const t=e instanceof me?we:he;be.set(r,t(r,d,g))}return be.get(r)};ve.transfer=_.transfer;const Se={object(...e){return this.string(function(e){for(var t=e[0],r=1,n=arguments.length;r<n;r++)t+=arguments[r]+e[r];return t}(...e))},string(e){for(const t of e.split(/[\\\\r\\\\n]+/))if(t.trim().length){/^(\\\\s+)/.test(t)&&(e=e.replace(new RegExp(\\\"^\\\"+RegExp.$1,\\\"gm\\\"),\\\"\\\"));break}return e}},Pe=(e,...t)=>Se[typeof e](e,...t),{isArray:Ee}=Array,{assign:Ae,create:Me,defineProperties:$e,defineProperty:je,entries:ke}=Object,{all:xe,resolve:Te}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),_e=(e,t=location.href)=>new URL(e,t).href;Promise.withResolvers||(Promise.withResolvers=function(){var e,t,r=new this((function(r,n){e=r,t=n}));return{resolve:e,reject:t,promise:r}});const Oe=e=>e.arrayBuffer(),Fe=e=>e.json(),We=e=>e.text(),Re=new WeakMap,Be=e=>{const t=e||console,r={stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>r.stderr(...e),stdout:(...e)=>r.stdout(...e),async get(e){const t=await e;return Re.set(t,r),t}}},Je=({FS:e,PATH:t,PATH_FS:r},n,s)=>{const o=r.resolve(n);return e.mkdirTree(t.dirname(o)),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},Ie=e=>{const t=e.split(\\\"/\\\");return t.pop(),t.join(\\\"/\\\")},Le=(e,t)=>{const r=[];for(const n of t.split(\\\"/\\\"))\\\".\\\"!==n&&(r.push(n),n&&e.mkdir(r.join(\\\"/\\\")))},Ce=(e,t)=>{const r=[];for(const e of t.split(\\\"/\\\"))switch(e){case\\\"\\\":case\\\".\\\":break;case\\\"..\\\":r.pop();break;default:r.push(e)}return[e.cwd()].concat(r).join(\\\"/\\\").replace(/^\\\\/+/,\\\"/\\\")},He=e=>{const t=e.map((e=>e.trim().replace(/(^[/]*|[/]*$)/g,\\\"\\\"))).filter((e=>\\\"\\\"!==e&&\\\".\\\"!==e)).join(\\\"/\\\");return e[0].startsWith(\\\"/\\\")?`/${t}`:t},De=new WeakMap,Ne=(e,t,r)=>xe((e=>{for(const{files:t,to_file:r,from:n=\\\"\\\"}of e){if(void 0!==t&&void 0!==r)throw new Error(\\\"Cannot use 'to_file' and 'files' parameters together!\\\");if(void 0===t&&void 0===r&&n.endsWith(\\\"/\\\"))throw new Error(`Couldn't determine the filename from the path ${n}, please supply 'to_file' parameter.`)}return e.flatMap((({from:e=\\\"\\\",to_folder:t=\\\".\\\",to_file:r,files:n})=>{if(Ee(n))return n.map((r=>({url:He([e,r]),path:He([t,r])})));const s=r||e.slice(1+e.lastIndexOf(\\\"/\\\"));return[{url:e,path:He([t,s])}]}))})(r).map((({url:n,path:s})=>((e,t)=>fetch(_e(t,De.get(e))))(r,n).then(Oe).then((r=>e.writeFile(t,s,r)))))),Ue=(e,t,r)=>{e.registerJsModule(t,r)},ze=(e,t,...r)=>{try{return e.runPython(Pe(t),...r)}catch(t){Re.get(e).stderr(t)}},qe=async(e,t,...r)=>{try{return await e.runPythonAsync(Pe(t),...r)}catch(t){Re.get(e).stderr(t)}},Ke=async(e,t,r)=>{const[n,...s]=t.split(\\\".\\\");let o,a=e.globals.get(n);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,r)}catch(t){Re.get(e).stderr(t)}};var Ye={type:\\\"micropython\\\",module:(e=\\\"1.20.0-297\\\")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,r){const{stderr:n,stdout:s,get:o}=Be();r=r.replace(/\\\\.m?js$/,\\\".wasm\\\");const a=await o(e({stderr:n,stdout:s,url:r}));return t.fetch&&await Ne(this,a,t.fetch),a},registerJSModule:Ue,run:ze,runAsync:qe,runEvent:Ke,transform:(e,t)=>t,writeFile:({FS:e,_module:{PATH:t,PATH_FS:r}},n,s)=>Je({FS:e,PATH:t,PATH_FS:r},n,s)};const Ge={dict_converter:Object.fromEntries};var Ve={type:\\\"pyodide\\\",module:(e=\\\"0.23.4\\\")=>`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e},t,r){const{stderr:n,stdout:s,get:o}=Be(),a=r.slice(0,r.lastIndexOf(\\\"/\\\")),i=await o(e({stderr:n,stdout:s,indexURL:a}));if(t.fetch&&await Ne(this,i,t.fetch),t.packages){await i.loadPackage(\\\"micropip\\\");const e=await i.pyimport(\\\"micropip\\\");await e.install(t.packages),e.destroy()}return i},registerJSModule:Ue,run:ze,runAsync:qe,runEvent:Ke,transform:(e,t)=>t instanceof e.ffi.PyProxy?t.toJs(Ge):t,writeFile:({FS:e,PATH:t,_module:{PATH_FS:r}},n,s)=>Je({FS:e,PATH:t,PATH_FS:r},n,s)};const Qe=\\\"ruby-wasm-wasi\\\",Xe=Qe.replace(/\\\\W+/g,\\\"_\\\");var Ze={type:Qe,experimental:!0,module:(e=\\\"2.0.0\\\")=>`https://cdn.jsdelivr.net/npm/ruby-3_2-wasm-wasi@${e}/dist/browser.esm.js`,async engine({DefaultRubyVM:e},t,r){const n=await fetch(`${r.slice(0,r.lastIndexOf(\\\"/\\\"))}/ruby.wasm`),s=await WebAssembly.compile(await n.arrayBuffer()),{vm:o}=await e(s);return t.fetch&&await Ne(this,o,t.fetch),o},registerJSModule(e,t,r){const n=`__module_${Xe}_${t}`;globalThis[n]=r,this.run(e,`require \\\"js\\\";$${t}=JS.global[:${n}]`),delete globalThis[n]},run:(e,t,...r)=>e.eval(Pe(t),...r),runAsync:(e,t,...r)=>e.evalAsync(Pe(t),...r),async runEvent(e,t,r){if(/^xworker\\\\.(on\\\\w+)$/.test(t)){const{$1:t}=RegExp,n=`__module_${Xe}_event`;globalThis[n]=r,this.run(e,`require \\\"js\\\";$xworker.call(\\\"${t}\\\",JS.global[:${n}])`),delete globalThis[n]}else{const n=this.run(e,`method(:${t})`);await n.call(t,e.wrap(r))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${Qe}`)}};var et={type:\\\"wasmoon\\\",module:(e=\\\"1.15.0\\\")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},r){const{stderr:n,stdout:s,get:o}=Be(),a=await o((new e).createEngine());return a.global.getTable(t.Base,(e=>{a.global.setField(e,\\\"print\\\",s),a.global.setField(e,\\\"printErr\\\",n)})),r.fetch&&await Ne(this,a,r.fetch),a},registerJSModule:(e,t,r)=>{e.global.set(t,r)},run:(e,t,...r)=>{try{return e.doStringSync(Pe(t),...r)}catch(t){Re.get(e).stderr(t)}},runAsync:async(e,t,...r)=>{try{return await e.doString(Pe(t),...r)}catch(t){Re.get(e).stderr(t)}},runEvent:async(e,t,r)=>{const[n,...s]=t.split(\\\".\\\");let o,a=e.global.get(n);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,r)}catch(t){Re.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,r)=>((e,t,r)=>(Le(e,Ie(t)),t=Ce(e,t),e.writeFile(t,new Uint8Array(r),{canOwn:!0})))(e,t,r)};const tt=new Map,rt=new Map,nt=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[r,...n]=t.split(\\\"@\\\"),s=tt.get(r),o=/^https?:\\\\/\\\\//i.test(n)?n.join(\\\"@\\\"):s.module(...n);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:r,module:n,engine:s}=e.get(t);return(e,o)=>n.then((n=>{rt.set(t,e);const a=e?.fetch;return a&&De.set(a,o),s(n,e,r)}))}}),st=e=>{for(const t of[].concat(e.type))tt.set(t,e)};for(const e of[Ye,Ve,Ze,et])st(e);const ot=async e=>(await import(\\\"https://cdn.jsdelivr.net/npm/basic-toml@0.3.1/es.js\\\")).parse(e);try{new SharedArrayBuffer(4)}catch(e){throw new Error([\\\"Unable to use SharedArrayBuffer due insecure environment.\\\",\\\"Please read requirements in MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements\\\"].join(\\\"\\\\n\\\"))}let at,it,ct;const lt=(e,t)=>{addEventListener(e,t||(async t=>{try{await at,it(`xworker.on${e}`,t)}catch(e){postMessage(e)}}),!!t&&{once:!0})},{parse:ut,stringify:ft}=f,{proxy:pt,window:dt,isWindowProxy:gt}=ve(self,{parse:ut,stringify:ft,transform:e=>ct?ct(e):e}),yt={sync:pt,window:dt,isWindowProxy:gt,onmessage:console.info,onerror:console.error,onmessageerror:console.warn,postMessage:postMessage.bind(self)};lt(\\\"message\\\",(({data:{options:e,config:t,code:r,hooks:n}})=>{at=(async()=>{try{const{id:s,tag:o,type:a,custom:i,version:c,config:l,async:u}=e,f=await((e,t,r={})=>{if(t)if(t.endsWith(\\\".json\\\"))r=fetch(t).then(Fe),t=_e(t);else if(t.endsWith(\\\".toml\\\"))r=fetch(t).then(We).then(ot),t=_e(t);else if(!t.endsWith(\\\".txt\\\")){try{r=JSON.parse(t)}catch(e){r=ot(t)}t=_e(\\\"./config.txt\\\")}return Te(r).then((r=>nt[e](r,t)))})(((e,t=\\\"\\\")=>`${e}@${t}`.replace(/@$/,\\\"\\\"))(a,c),t,l),p=Me(tt.get(a)),d=\\\"run\\\"+(u?\\\"Async\\\":\\\"\\\");if(n){const{beforeRun:e,beforeRunAsync:t,afterRun:r,afterRunAsync:s}=n,o=r||s,a=e||t;if(o){const e=p[d].bind(p);p[d]=(t,r,...n)=>e(t,`${r}\\\\n${o}`,...n)}if(a){const e=p[d].bind(p);p[d]=(t,r,...n)=>e(t,`${a}\\\\n${r}`,...n)}}let g=\\\"\\\";return p.registerJSModule(f,\\\"polyscript\\\",{xworker:yt,get target(){if(!g){const{document:e}=yt.window,t=e.getElementById(s);\\\"SCRIPT\\\"===o?t.after(Ae(e.createElement(`script-${i||a}`),{id:g=`${s}-target`})):(g=s,t.replaceChildren(),t.style.display=\\\"block\\\")}return g}}),it=p.runEvent.bind(p,f),ct=p.transform.bind(p,f),await p[d](f,r),f}catch(e){postMessage(e)}})(),lt(\\\"error\\\"),lt(\\\"message\\\"),lt(\\\"messageerror\\\")}));\\n\"],{type:'application/javascript'})),{type:'module'});","import { dedent } from '../utils.js';\n\n/* c8 ignore start */ // tested via integration\nexport default element => {\n const { worker } = element.attributes;\n if (worker) {\n let { value } = worker;\n if (!value) {\n if (!element.childElementCount)\n value = element.textContent;\n else {\n const { innerHTML, localName, type } = element;\n const name = type || localName.replace(/-script$/, '');\n console.warn(\n `Deprecated: use <script type=\"${name}\"> for an always safe content parsing:\\n`,\n innerHTML,\n );\n value = innerHTML;\n }\n\n const url = URL.createObjectURL(new Blob([dedent(value)], { type: 'text/plain' }));\n // TODO: should we really clean up this? debugging non-existent resources\n // at distance might be very problematic if the url is revoked.\n // setTimeout(URL.revokeObjectURL, 5000, url);\n return url;\n }\n return value;\n }\n};\n/* c8 ignore stop */\n","import '@ungap/with-resolvers';\n\nimport { getBuffer } from '../fetch-utils.js';\nimport { absoluteURL } from '../utils.js';\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nexport const io = new WeakMap();\nexport const stdio = (init) => {\n const context = init || console;\n const localIO = {\n stderr: (context.stderr || console.error).bind(context),\n stdout: (context.stdout || console.log).bind(context),\n };\n return {\n stderr: (...args) => localIO.stderr(...args),\n stdout: (...args) => localIO.stdout(...args),\n async get(engine) {\n const interpreter = await engine;\n io.set(interpreter, localIO);\n return interpreter;\n },\n };\n};\n\n// This should be the only helper needed for all Emscripten based FS exports\nexport const writeFile = ({ FS, PATH, PATH_FS }, path, buffer) => {\n const absPath = PATH_FS.resolve(path);\n FS.mkdirTree(PATH.dirname(absPath));\n return FS.writeFile(absPath, new Uint8Array(buffer), {\n canOwn: true,\n });\n};\n/* c8 ignore stop */\n\n// This is instead a fallback for Lua or others\nexport const writeFileShim = (FS, path, buffer) => {\n mkdirTree(FS, dirname(path));\n path = resolve(FS, path);\n return FS.writeFile(path, new Uint8Array(buffer), { canOwn: true });\n};\n\nconst dirname = (path) => {\n const tree = path.split('/');\n tree.pop();\n return tree.join('/');\n};\n\nconst mkdirTree = (FS, path) => {\n const current = [];\n for (const branch of path.split('/')) {\n if (branch === '.') continue;\n current.push(branch);\n if (branch) FS.mkdir(current.join('/'));\n }\n};\n\nconst resolve = (FS, path) => {\n const tree = [];\n for (const branch of path.split('/')) {\n switch (branch) {\n case '':\n break;\n case '.':\n break;\n case '..':\n tree.pop();\n break;\n default:\n tree.push(branch);\n }\n }\n return [FS.cwd()].concat(tree).join('/').replace(/^\\/+/, '/');\n};\n\nimport { all, isArray } from '../utils.js';\n\nconst calculateFetchPaths = (config_fetch) => {\n // REQUIRES INTEGRATION TEST\n /* c8 ignore start */\n for (const { files, to_file, from = '' } of config_fetch) {\n if (files !== undefined && to_file !== undefined)\n throw new Error(\n 'Cannot use \\'to_file\\' and \\'files\\' parameters together!',\n );\n if (files === undefined && to_file === undefined && from.endsWith('/'))\n throw new Error(\n `Couldn't determine the filename from the path ${from}, please supply 'to_file' parameter.`,\n );\n }\n /* c8 ignore stop */\n return config_fetch.flatMap(\n ({ from = '', to_folder = '.', to_file, files }) => {\n if (isArray(files))\n return files.map((file) => ({\n url: joinPaths([from, file]),\n path: joinPaths([to_folder, file]),\n }));\n const filename = to_file || from.slice(1 + from.lastIndexOf('/'));\n return [{ url: from, path: joinPaths([to_folder, filename]) }];\n },\n );\n};\n\nconst joinPaths = (parts) => {\n const res = parts\n .map((part) => part.trim().replace(/(^[/]*|[/]*$)/g, ''))\n .filter((p) => p !== '' && p !== '.')\n .join('/');\n\n return parts[0].startsWith('/') ? `/${res}` : res;\n};\n\nconst fetchResolved = (config_fetch, url) =>\n fetch(absoluteURL(url, base.get(config_fetch)));\n\nexport const base = new WeakMap();\n\nexport const fetchPaths = (module, interpreter, config_fetch) =>\n all(\n calculateFetchPaths(config_fetch).map(({ url, path }) =>\n fetchResolved(config_fetch, url)\n .then(getBuffer)\n .then((buffer) => module.writeFile(interpreter, path, buffer)),\n ),\n );\n/* c8 ignore stop */\n","import { dedent } from '../utils.js';\nimport { io } from './_utils.js';\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nexport const registerJSModule = (interpreter, name, value) => {\n interpreter.registerJsModule(name, value);\n};\n\nexport const run = (interpreter, code, ...args) => {\n try {\n return interpreter.runPython(dedent(code), ...args);\n }\n catch (error) {\n io.get(interpreter).stderr(error);\n }\n};\n\nexport const runAsync = async (interpreter, code, ...args) => {\n try {\n return await interpreter.runPythonAsync(dedent(code), ...args);\n }\n catch (error) {\n io.get(interpreter).stderr(error);\n }\n};\n\nexport const runEvent = async (interpreter, code, event) => {\n // allows method(event) as well as namespace.method(event)\n // it does not allow fancy brackets names for now\n const [name, ...keys] = code.split('.');\n let target = interpreter.globals.get(name);\n let context;\n for (const key of keys) [context, target] = [target, target[key]];\n try {\n await target.call(context, event);\n }\n catch (error) {\n io.get(interpreter).stderr(error);\n }\n};\n/* c8 ignore stop */\n","import { fetchPaths, stdio, writeFile } from './_utils.js';\nimport { registerJSModule, run, runAsync, runEvent } from './_python.js';\n\nconst type = 'micropython';\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nexport default {\n type,\n module: (version = '1.20.0-297') =>\n `https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${version}/micropython.mjs`,\n async engine({ loadMicroPython }, config, url) {\n const { stderr, stdout, get } = stdio();\n url = url.replace(/\\.m?js$/, '.wasm');\n const interpreter = await get(loadMicroPython({ stderr, stdout, url }));\n if (config.fetch) await fetchPaths(this, interpreter, config.fetch);\n return interpreter;\n },\n registerJSModule,\n run,\n runAsync,\n runEvent,\n transform: (_, value) => value,\n writeFile: ({ FS, _module: { PATH, PATH_FS } }, path, buffer) =>\n writeFile({ FS, PATH, PATH_FS }, path, buffer),\n};\n/* c8 ignore stop */\n","import { fetchPaths, stdio, writeFile } from './_utils.js';\nimport { registerJSModule, run, runAsync, runEvent } from './_python.js';\n\nconst type = 'pyodide';\nconst toJsOptions = { dict_converter: Object.fromEntries };\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nexport default {\n type,\n module: (version = '0.23.4') =>\n `https://cdn.jsdelivr.net/pyodide/v${version}/full/pyodide.mjs`,\n async engine({ loadPyodide }, config, url) {\n const { stderr, stdout, get } = stdio();\n const indexURL = url.slice(0, url.lastIndexOf('/'));\n const interpreter = await get(\n loadPyodide({ stderr, stdout, indexURL }),\n );\n if (config.fetch) await fetchPaths(this, interpreter, config.fetch);\n if (config.packages) {\n await interpreter.loadPackage('micropip');\n const micropip = await interpreter.pyimport('micropip');\n await micropip.install(config.packages);\n micropip.destroy();\n }\n return interpreter;\n },\n registerJSModule,\n run,\n runAsync,\n runEvent,\n transform: (interpreter, value) => (\n value instanceof interpreter.ffi.PyProxy ?\n value.toJs(toJsOptions) :\n value\n ),\n writeFile: ({ FS, PATH, _module: { PATH_FS } }, path, buffer) =>\n writeFile({ FS, PATH, PATH_FS }, path, buffer),\n};\n/* c8 ignore stop */\n","import { dedent } from '../utils.js';\nimport { fetchPaths } from './_utils.js';\n\nconst type = 'ruby-wasm-wasi';\nconst jsType = type.replace(/\\W+/g, '_');\n\n// MISSING:\n// * there is no VFS apparently or I couldn't reach any\n// * I've no idea how to override the stderr and stdout\n// * I've no idea how to import packages\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nexport default {\n type,\n experimental: true,\n module: (version = '2.0.0') =>\n `https://cdn.jsdelivr.net/npm/ruby-3_2-wasm-wasi@${version}/dist/browser.esm.js`,\n async engine({ DefaultRubyVM }, config, url) {\n const response = await fetch(\n `${url.slice(0, url.lastIndexOf('/'))}/ruby.wasm`,\n );\n const module = await WebAssembly.compile(await response.arrayBuffer());\n const { vm: interpreter } = await DefaultRubyVM(module);\n if (config.fetch) await fetchPaths(this, interpreter, config.fetch);\n return interpreter;\n },\n // Fallback to globally defined module fields (i.e. $xworker)\n registerJSModule(interpreter, name, value) {\n const id = `__module_${jsType}_${name}`;\n globalThis[id] = value;\n this.run(interpreter, `require \"js\";$${name}=JS.global[:${id}]`);\n delete globalThis[id];\n },\n run: (interpreter, code, ...args) => interpreter.eval(dedent(code), ...args),\n runAsync: (interpreter, code, ...args) => interpreter.evalAsync(dedent(code), ...args),\n async runEvent(interpreter, code, event) {\n // patch common xworker.onmessage/onerror cases\n if (/^xworker\\.(on\\w+)$/.test(code)) {\n const { $1: name } = RegExp;\n const id = `__module_${jsType}_event`;\n globalThis[id] = event;\n this.run(\n interpreter,\n `require \"js\";$xworker.call(\"${name}\",JS.global[:${id}])`,\n );\n delete globalThis[id];\n } else {\n // Experimental: allows only events by fully qualified method name\n const method = this.run(interpreter, `method(:${code})`);\n await method.call(code, interpreter.wrap(event));\n }\n },\n transform: (_, value) => value,\n writeFile: () => {\n throw new Error(`writeFile is not supported in ${type}`);\n },\n};\n/* c8 ignore stop */\n","import { dedent } from '../utils.js';\nimport { fetchPaths, io, stdio, writeFileShim } from './_utils.js';\n\nconst type = 'wasmoon';\n\n// MISSING:\n// * I've no idea how to import packages\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nexport default {\n type,\n module: (version = '1.15.0') =>\n `https://cdn.jsdelivr.net/npm/wasmoon@${version}/+esm`,\n async engine({ LuaFactory, LuaLibraries }, config) {\n const { stderr, stdout, get } = stdio();\n const interpreter = await get(new LuaFactory().createEngine());\n interpreter.global.getTable(LuaLibraries.Base, (index) => {\n interpreter.global.setField(index, 'print', stdout);\n interpreter.global.setField(index, 'printErr', stderr);\n });\n if (config.fetch) await fetchPaths(this, interpreter, config.fetch);\n return interpreter;\n },\n // Fallback to globally defined module fields\n registerJSModule: (interpreter, name, value) => {\n interpreter.global.set(name, value);\n },\n run: (interpreter, code, ...args) => {\n try {\n return interpreter.doStringSync(dedent(code), ...args);\n }\n catch (error) {\n io.get(interpreter).stderr(error);\n }\n },\n runAsync: async (interpreter, code, ...args) => {\n try {\n return await interpreter.doString(dedent(code), ...args);\n }\n catch (error) {\n io.get(interpreter).stderr(error);\n }\n },\n runEvent: async (interpreter, code, event) => {\n // allows method(event) as well as namespace.method(event)\n // it does not allow fancy brackets names for now\n const [name, ...keys] = code.split('.');\n let target = interpreter.global.get(name);\n let context;\n for (const key of keys) [context, target] = [target, target[key]];\n try {\n await target.call(context, event);\n }\n catch (error) {\n io.get(interpreter).stderr(error);\n }\n },\n transform: (_, value) => value,\n writeFile: (\n {\n cmodule: {\n module: { FS },\n },\n },\n path,\n buffer,\n ) => writeFileShim(FS, path, buffer),\n};\n/* c8 ignore stop */\n","// ⚠️ Part of this file is automatically generated\n// The :RUNTIMES comment is a delimiter and no code should be written/changed after\n// See rollup/build_interpreters.cjs to know more\n\nimport { base } from './interpreter/_utils.js';\n\n/** @type {Map<string, object>} */\nexport const registry = new Map();\n\n/** @type {Map<string, object>} */\nexport const configs = new Map();\n\n/** @type {string[]} */\nexport const selectors = [];\n\n/** @type {string[]} */\nexport const prefixes = [];\n\nexport const interpreter = new Proxy(new Map(), {\n get(map, id) {\n if (!map.has(id)) {\n const [type, ...rest] = id.split('@');\n const interpreter = registry.get(type);\n const url = /^https?:\\/\\//i.test(rest)\n ? rest.join('@')\n : interpreter.module(...rest);\n map.set(id, {\n url,\n module: import(/* webpackIgnore: true */url),\n engine: interpreter.engine.bind(interpreter),\n });\n }\n const { url, module, engine } = map.get(id);\n return (config, baseURL) =>\n module.then((module) => {\n configs.set(id, config);\n const fetch = config?.fetch;\n if (fetch) base.set(fetch, baseURL);\n return engine(module, config, url);\n });\n },\n});\n\nconst register = (interpreter) => {\n for (const type of [].concat(interpreter.type)) {\n registry.set(type, interpreter);\n selectors.push(`script[type=\"${type}\"]`);\n prefixes.push(`${type}-`);\n }\n};\n\n//:RUNTIMES\nimport micropython from './interpreter/micropython.js';\nimport pyodide from './interpreter/pyodide.js';\nimport ruby_wasm_wasi from './interpreter/ruby-wasm-wasi.js';\nimport wasmoon from './interpreter/wasmoon.js';\nfor (const interpreter of [micropython, pyodide, ruby_wasm_wasi, wasmoon])\n register(interpreter);\n","// lazy TOML parser (fast-toml might be a better alternative)\nconst TOML_LIB = 'https://cdn.jsdelivr.net/npm/basic-toml@0.3.1/es.js';\n\n/**\n * @param {string} text TOML text to parse\n * @returns {object} the resulting JS object\n */\nexport const parse = async (text) => (await import(/* webpackIgnore: true */TOML_LIB)).parse(text);\n","import { interpreter } from './interpreters.js';\nimport { absoluteURL, resolve } from './utils.js';\nimport { parse } from './toml.js';\nimport { getJSON, getText } from './fetch-utils.js';\n\n/**\n * Parse a generic config if it came from an attribute either as URL\n * or as a serialized string. In XWorker case, accepts a pre-defined\n * options to use as it is to avoid needing at all a fetch operation.\n * In latter case, config will be suffixed as `config.txt`.\n * @param {string} id the interpreter name @ version identifier\n * @param {string} [config] optional config file to parse\n * @param {object} [options] optional options used to bootstrap XWorker\n * @returns\n */\nexport const getRuntime = (id, config, options = {}) => {\n if (config) {\n // REQUIRES INTEGRATION TEST\n /* c8 ignore start */\n if (config.endsWith('.json')) {\n options = fetch(config).then(getJSON);\n config = absoluteURL(config);\n } else if (config.endsWith('.toml')) {\n options = fetch(config).then(getText).then(parse);\n config = absoluteURL(config);\n } else if (!config.endsWith('.txt')) {\n try {\n options = JSON.parse(config);\n } catch (_) {\n options = parse(config);\n }\n // make the config a URL to be able to retrieve relative paths from it\n config = absoluteURL('./config.txt');\n }\n /* c8 ignore stop */\n }\n return resolve(options).then(options => interpreter[id](options, config));\n};\n\n/**\n * @param {string} type the interpreter type\n * @param {string} [version] the optional interpreter version\n * @returns\n */\nexport const getRuntimeID = (type, version = '') =>\n `${type}@${version}`.replace(/@$/, '');\n","import { $ } from 'basic-devtools';\n\nimport $xworker from './worker/class.js';\nimport workerURL from './worker/url.js';\nimport { getRuntime, getRuntimeID } from './loader.js';\nimport { registry } from './interpreters.js';\nimport { all, resolve, defineProperty, nodeInfo } from './utils.js';\nimport { getText } from './fetch-utils.js';\n\nconst getRoot = (script) => {\n let parent = script;\n while (parent.parentNode) parent = parent.parentNode;\n return parent;\n};\n\nexport const queryTarget = (script, idOrSelector) => {\n const root = getRoot(script);\n return root.getElementById(idOrSelector) || $(idOrSelector, root);\n};\n\nconst targets = new WeakMap();\nconst targetDescriptor = {\n get() {\n let target = targets.get(this);\n if (!target) {\n target = document.createElement(`${this.type}-script`);\n targets.set(this, target);\n handle(this);\n }\n return target;\n },\n set(target) {\n if (typeof target === 'string')\n targets.set(this, queryTarget(this, target));\n else {\n targets.set(this, target);\n handle(this);\n }\n },\n};\n\nconst handled = new WeakMap();\n\nexport const interpreters = new Map();\n\nconst execute = async (script, source, XWorker, isAsync) => {\n const module = registry.get(script.type);\n /* c8 ignore start */\n if (module.experimental)\n console.warn(`The ${script.type} interpreter is experimental`);\n const [interpreter, content] = await all([\n handled.get(script).interpreter,\n source,\n ]);\n try {\n // temporarily override inherited document.currentScript in a non writable way\n // but it deletes it right after to preserve native behavior (as it's sync: no trouble)\n defineProperty(document, 'currentScript', {\n configurable: true,\n get: () => script,\n });\n module.registerJSModule(interpreter, 'polyscript', { XWorker });\n return module[isAsync ? 'runAsync' : 'run'](interpreter, content);\n } finally {\n delete document.currentScript;\n }\n /* c8 ignore stop */\n};\n\nconst getValue = (ref, prefix) => {\n const value = ref?.value;\n return value ? prefix + value : '';\n};\n\nexport const getDetails = (type, id, name, version, config, runtime = type) => {\n if (!interpreters.has(id)) {\n const details = {\n interpreter: getRuntime(name, config),\n queue: resolve(),\n XWorker: $xworker(type, version),\n };\n interpreters.set(id, details);\n // enable sane defaults when single interpreter *of kind* is used in the page\n // this allows `xxx-*` attributes to refer to such interpreter without `env` around\n /* c8 ignore start *//* this is tested very well in PyScript */\n if (!interpreters.has(type)) interpreters.set(type, details);\n if (!interpreters.has(runtime)) interpreters.set(runtime, details);\n /* c8 ignore stopt */\n }\n return interpreters.get(id);\n};\n\n/**\n * @param {HTMLScriptElement} script a special type of <script>\n */\nexport const handle = async (script) => {\n // known node, move its companion target after\n // vDOM or other use cases where the script is a tracked element\n if (handled.has(script)) {\n const { target } = script;\n if (target) {\n // if the script is in the head just append target to the body\n if (script.closest('head')) document.body.append(target);\n // in any other case preserve the script position\n else script.after(target);\n }\n }\n // new script to handle ... allow newly created scripts to work\n // just exactly like any other script would\n else {\n // allow a shared config among scripts, beside interpreter,\n // and/or source code with different config or interpreter\n const {\n attributes: { async: isAsync, config, env, target, version },\n src,\n type,\n } = script;\n\n const versionValue = version?.value;\n const name = getRuntimeID(type, versionValue);\n let configValue = getValue(config, '|');\n const id = getValue(env, '') || `${name}${configValue}`;\n configValue = configValue.slice(1);\n\n /* c8 ignore start */\n const url = workerURL(script);\n if (url) {\n const XWorker = $xworker(type, versionValue);\n const xworker = new XWorker(url, {\n ...nodeInfo(script, type),\n async: !!isAsync,\n config: configValue\n });\n handled.set(\n defineProperty(script, 'xworker', { value: xworker }),\n { xworker }\n );\n return;\n }\n /* c8 ignore stop */\n\n const targetValue = getValue(target, '');\n const details = getDetails(type, id, name, versionValue, configValue);\n\n handled.set(\n defineProperty(script, 'target', targetDescriptor),\n details,\n );\n\n if (targetValue) targets.set(script, queryTarget(script, targetValue));\n\n // start fetching external resources ASAP\n const source = src ? fetch(src).then(getText) : script.textContent;\n details.queue = details.queue.then(() =>\n execute(script, source, details.XWorker, !!isAsync),\n );\n }\n};\n","import { $x } from 'basic-devtools';\n\nimport { interpreters } from './script-handler.js';\nimport { all, create } from './utils.js';\nimport { registry, prefixes } from './interpreters.js';\n\nexport const env = new Proxy(create(null), {\n get: (_, name) => awaitInterpreter(name),\n});\n\n/* c8 ignore start */ // attributes are tested via integration / e2e\n// ensure both interpreter and its queue are awaited then returns the interpreter\nconst awaitInterpreter = async (key) => {\n if (interpreters.has(key)) {\n const { interpreter, queue } = interpreters.get(key);\n return (await all([interpreter, queue]))[0];\n }\n\n const available = interpreters.size\n ? `Available interpreters are: ${[...interpreters.keys()]\n .map((r) => `\"${r}\"`)\n .join(', ')}.`\n : 'There are no interpreters in this page.';\n\n throw new Error(`The interpreter \"${key}\" was not found. ${available}`);\n};\n\nexport const listener = async (event) => {\n const { type, currentTarget } = event;\n for (let { name, value, ownerElement: el } of $x(\n `./@*[${prefixes.map((p) => `name()=\"${p}${type}\"`).join(' or ')}]`,\n currentTarget,\n )) {\n name = name.slice(0, -(type.length + 1));\n const interpreter = await awaitInterpreter(\n el.getAttribute(`${name}-env`) || name,\n );\n const handler = registry.get(name);\n handler.runEvent(interpreter, value, event);\n }\n};\n\n/**\n * Look for known prefixes and add related listeners.\n * @param {Document | Element} root\n */\nexport const addAllListeners = (root) => {\n for (let { name, ownerElement: el } of $x(\n `.//@*[${prefixes\n .map((p) => `starts-with(name(),\"${p}\")`)\n .join(' or ')}]`,\n root,\n )) {\n name = name.slice(name.lastIndexOf('-') + 1);\n if (name !== 'env') el.addEventListener(name, listener);\n }\n};\n/* c8 ignore stop */\n","import '@ungap/with-resolvers';\nimport { $$ } from 'basic-devtools';\n\nimport { assign, create, defineProperty, nodeInfo } from './utils.js';\nimport { getDetails } from './script-handler.js';\nimport { registry as defaultRegistry, prefixes, configs } from './interpreters.js';\nimport { getRuntimeID } from './loader.js';\nimport { io } from './interpreter/_utils.js';\nimport { addAllListeners } from './listeners.js';\nimport { Hook } from './worker/hooks.js';\nimport workerURL from './worker/url.js';\nimport { XWorker } from './index.js';\n\nexport const CUSTOM_SELECTORS = [];\n\n/**\n * @typedef {Object} Runtime custom configuration\n * @prop {object} interpreter the bootstrapped interpreter\n * @prop {(url:string, options?: object) => Worker} XWorker an XWorker constructor that defaults to same interpreter on the Worker.\n * @prop {object} config a cloned config used to bootstrap the interpreter\n * @prop {(code:string) => any} run an utility to run code within the interpreter\n * @prop {(code:string) => Promise<any>} runAsync an utility to run code asynchronously within the interpreter\n * @prop {(path:string, data:ArrayBuffer) => void} writeFile an utility to write a file in the virtual FS, if available\n */\n\nconst types = new Map();\nconst waitList = new Map();\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\n/**\n * @param {Element} node any DOM element registered via define.\n */\nexport const handleCustomType = (node) => {\n for (const selector of CUSTOM_SELECTORS) {\n if (node.matches(selector)) {\n const type = types.get(selector);\n const { resolve } = waitList.get(type);\n const { options, known } = registry.get(type);\n if (!known.has(node)) {\n known.add(node);\n const {\n interpreter: runtime,\n config,\n version,\n env,\n onInterpreterReady,\n } = options;\n\n const worker = workerURL(node);\n if (worker) {\n const xworker = XWorker.call(new Hook(null, options), worker, {\n ...nodeInfo(node, type),\n version,\n type: runtime,\n custom: type,\n config: config || {},\n async: node.hasAttribute('async')\n });\n defineProperty(node, 'xworker', { value: xworker });\n resolve({ type, xworker });\n return;\n }\n\n const name = getRuntimeID(runtime, version);\n const id = env || `${name}${config ? `|${config}` : ''}`;\n const { interpreter: engine, XWorker: Worker } = getDetails(\n type,\n id,\n name,\n version,\n config,\n runtime\n );\n engine.then((interpreter) => {\n const module = create(defaultRegistry.get(runtime));\n\n const {\n onBeforeRun,\n onBeforeRunAsync,\n onAfterRun,\n onAfterRunAsync,\n } = options;\n\n const hooks = new Hook(interpreter, options);\n\n const XWorker = function XWorker(...args) {\n return Worker.apply(hooks, args);\n };\n\n // These two loops mimic a `new Map(arrayContent)` without needing\n // the new Map overhead so that [name, [before, after]] can be easily destructured\n // and new sync or async patches become easy to add (when the logic is the same).\n\n // patch sync\n for (const [name, [before, after]] of [\n ['run', [onBeforeRun, onAfterRun]],\n ]) {\n const method = module[name];\n module[name] = function (interpreter, code, ...args) {\n if (before) before.call(this, resolved, node);\n const result = method.call(this, interpreter, code, ...args);\n if (after) after.call(this, resolved, node);\n return result;\n };\n }\n\n // patch async\n for (const [name, [before, after]] of [\n ['runAsync', [onBeforeRunAsync, onAfterRunAsync]],\n ]) {\n const method = module[name];\n module[name] = async function (interpreter, code, ...args) {\n if (before) await before.call(this, resolved, node);\n const result = await method.call(\n this,\n interpreter,\n code,\n ...args\n );\n if (after) await after.call(this, resolved, node);\n return result;\n };\n }\n\n module.registerJSModule(interpreter, 'polyscript', { XWorker });\n\n const resolved = {\n type,\n interpreter,\n XWorker,\n io: io.get(interpreter),\n config: structuredClone(configs.get(name)),\n run: module.run.bind(module, interpreter),\n runAsync: module.runAsync.bind(module, interpreter),\n runEvent: module.runEvent.bind(module, interpreter),\n };\n\n resolve(resolved);\n\n onInterpreterReady?.(resolved, node);\n });\n }\n }\n }\n};\n\n/**\n * @type {Map<string, {options:object, known:WeakSet<Element>}>}\n */\nconst registry = new Map();\n\n/**\n * @typedef {Object} CustomOptions custom configuration\n * @prop {'pyodide' | 'micropython' | 'wasmoon' | 'ruby-wasm-wasi'} interpreter the interpreter to use\n * @prop {string} [version] the optional interpreter version to use\n * @prop {string} [config] the optional config to use within such interpreter\n * @prop {(environment: object, node: Element) => void} [onInterpreterReady] the callback that will be invoked once\n */\n\nlet dontBotherCount = 0;\n\n/**\n * Allows custom types and components on the page to receive interpreters to execute any code\n * @param {string} type the unique `<script type=\"...\">` identifier\n * @param {CustomOptions} options the custom type configuration\n */\nexport const define = (type, options) => {\n // allow no-type to be bootstrapped out of the box\n let dontBother = type == null;\n\n if (dontBother)\n type = `_ps${dontBotherCount++}`;\n else if (defaultRegistry.has(type) || registry.has(type))\n throw new Error(`<script type=\"${type}\"> already registered`);\n\n if (!defaultRegistry.has(options?.interpreter))\n throw new Error('Unspecified interpreter');\n\n // allows reaching out the interpreter helpers on events\n defaultRegistry.set(type, defaultRegistry.get(options.interpreter));\n\n // allows selector -> registry by type\n const selectors = [`script[type=\"${type}\"]`];\n\n // ensure a Promise can resolve once a custom type has been bootstrapped\n whenDefined(type);\n\n if (dontBother) {\n // add a script then cleanup everything once that's ready\n const { onInterpreterReady } = options;\n options = {\n ...options,\n onInterpreterReady(resolved, node) {\n CUSTOM_SELECTORS.splice(CUSTOM_SELECTORS.indexOf(type), 1);\n defaultRegistry.delete(type);\n registry.delete(type);\n waitList.delete(type);\n node.remove();\n onInterpreterReady?.(resolved);\n }\n };\n document.head.append(\n assign(document.createElement('script'), { type })\n );\n }\n else {\n selectors.push(`${type}-script`);\n prefixes.push(`${type}-`);\n }\n\n for (const selector of selectors) types.set(selector, type);\n CUSTOM_SELECTORS.push(...selectors);\n\n // ensure always same env for this custom type\n registry.set(type, {\n options: assign({ env: type }, options),\n known: new WeakSet(),\n });\n\n if (!dontBother) addAllListeners(document);\n $$(selectors.join(',')).forEach(handleCustomType);\n};\n\n/**\n * Resolves whenever a defined custom type is bootstrapped on the page\n * @param {string} type the unique `<script type=\"...\">` identifier\n * @returns {Promise<object>}\n */\nexport const whenDefined = (type) => {\n if (!waitList.has(type)) waitList.set(type, Promise.withResolvers());\n return waitList.get(type).promise;\n};\n/* c8 ignore stop */\n","import { $$ } from 'basic-devtools';\n\nimport xworker from './worker/class.js';\nimport { handle } from './script-handler.js';\nimport { assign } from './utils.js';\nimport { selectors, prefixes } from './interpreters.js';\nimport { CUSTOM_SELECTORS, handleCustomType } from './custom.js';\nimport { listener, addAllListeners } from './listeners.js';\n\nexport { define, whenDefined } from './custom.js';\nexport { env } from './listeners.js';\nexport const XWorker = xworker();\n\nconst INTERPRETER_SELECTORS = selectors.join(',');\n\nconst mo = new MutationObserver((records) => {\n for (const { type, target, attributeName, addedNodes } of records) {\n // attributes are tested via integration / e2e\n /* c8 ignore start */\n if (type === 'attributes') {\n const i = attributeName.lastIndexOf('-') + 1;\n if (i) {\n const prefix = attributeName.slice(0, i);\n for (const p of prefixes) {\n if (prefix === p) {\n const type = attributeName.slice(i);\n if (type !== 'env') {\n const method = target.hasAttribute(attributeName)\n ? 'add'\n : 'remove';\n target[`${method}EventListener`](type, listener);\n }\n break;\n }\n }\n }\n continue;\n }\n for (const node of addedNodes) {\n if (node.nodeType === 1) {\n addAllListeners(node);\n if (node.matches(INTERPRETER_SELECTORS)) handle(node);\n else {\n $$(INTERPRETER_SELECTORS, node).forEach(handle);\n if (!CUSTOM_SELECTORS.length) continue;\n handleCustomType(node);\n $$(CUSTOM_SELECTORS.join(','), node).forEach(\n handleCustomType,\n );\n }\n }\n }\n /* c8 ignore stop */\n }\n});\n\nconst observe = (root) => {\n mo.observe(root, { childList: true, subtree: true, attributes: true });\n return root;\n};\n\nconst { attachShadow } = Element.prototype;\nassign(Element.prototype, {\n attachShadow(init) {\n return observe(attachShadow.call(this, init));\n },\n});\n\naddAllListeners(observe(document));\n$$(INTERPRETER_SELECTORS, document).forEach(handle);\n","export default {\n sleep(seconds) {\n return new Promise(($) => setTimeout($, seconds * 1000));\n },\n};\n","/**\n * Create through Python the pyscript module through\n * the artifact generated at build time.\n * This the returned value is a string that must be used\n * either before a worker execute code or when the module\n * is registered on the main thread.\n */\n\nimport pyscript from \"./stdlib/pyscript.js\";\n\nconst { entries } = Object;\n\nconst python = [\"from pathlib import Path as _Path\"];\n\nconst write = (base, literal) => {\n for (const [key, value] of entries(literal)) {\n const path = `_Path(\"${base}/${key}\")`;\n if (typeof value === \"string\") {\n const code = JSON.stringify(value);\n python.push(`${path}.write_text(${code})`);\n } else {\n python.push(`${path}.mkdir(parents=True, exist_ok=True)`);\n write(`${base}/${key}`, value);\n }\n }\n};\n\nwrite(\".\", pyscript);\n\npython.push(\"del _Path\");\npython.push(\"\\n\");\n\nexport default python.join(\"\\n\");\n","// ⚠️ This file is an artifact: DO NOT MODIFY\nexport default {\n \"_pyscript\": {\n \"__init__.py\": \"import js as window\\n\\nIS_WORKER = not hasattr(window, \\\"document\\\")\\n\\nif IS_WORKER:\\n from polyscript import xworker as _xworker\\n\\n window = _xworker.window\\n document = window.document\\n sync = _xworker.sync\\nelse:\\n document = window.document\\n\",\n \"display.py\": \"import base64\\nimport html\\nimport io\\nimport re\\n\\nfrom . import document, window\\n\\n_MIME_METHODS = {\\n \\\"__repr__\\\": \\\"text/plain\\\",\\n \\\"_repr_html_\\\": \\\"text/html\\\",\\n \\\"_repr_markdown_\\\": \\\"text/markdown\\\",\\n \\\"_repr_svg_\\\": \\\"image/svg+xml\\\",\\n \\\"_repr_png_\\\": \\\"image/png\\\",\\n \\\"_repr_pdf_\\\": \\\"application/pdf\\\",\\n \\\"_repr_jpeg_\\\": \\\"image/jpeg\\\",\\n \\\"_repr_latex\\\": \\\"text/latex\\\",\\n \\\"_repr_json_\\\": \\\"application/json\\\",\\n \\\"_repr_javascript_\\\": \\\"application/javascript\\\",\\n \\\"savefig\\\": \\\"image/png\\\",\\n}\\n\\n\\ndef _render_image(mime, value, meta):\\n # If the image value is using bytes we should convert it to base64\\n # otherwise it will return raw bytes and the browser will not be able to\\n # render it.\\n if isinstance(value, bytes):\\n value = base64.b64encode(value).decode(\\\"utf-8\\\")\\n\\n # This is the pattern of base64 strings\\n base64_pattern = re.compile(\\n r\\\"^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$\\\"\\n )\\n # If value doesn't match the base64 pattern we should encode it to base64\\n if len(value) > 0 and not base64_pattern.match(value):\\n value = base64.b64encode(value.encode(\\\"utf-8\\\")).decode(\\\"utf-8\\\")\\n\\n data = f\\\"data:{mime};charset=utf-8;base64,{value}\\\"\\n attrs = \\\" \\\".join(['{k}=\\\"{v}\\\"' for k, v in meta.items()])\\n return f'<img src=\\\"{data}\\\" {attrs}></img>'\\n\\n\\ndef _identity(value, meta):\\n return value\\n\\n\\n_MIME_RENDERERS = {\\n \\\"text/plain\\\": html.escape,\\n \\\"text/html\\\": _identity,\\n \\\"image/png\\\": lambda value, meta: _render_image(\\\"image/png\\\", value, meta),\\n \\\"image/jpeg\\\": lambda value, meta: _render_image(\\\"image/jpeg\\\", value, meta),\\n \\\"image/svg+xml\\\": _identity,\\n \\\"application/json\\\": _identity,\\n \\\"application/javascript\\\": lambda value, meta: f\\\"<script>{value}<\\\\\\\\/script>\\\",\\n}\\n\\n\\ndef _eval_formatter(obj, print_method):\\n \\\"\\\"\\\"\\n Evaluates a formatter method.\\n \\\"\\\"\\\"\\n if print_method == \\\"__repr__\\\":\\n return repr(obj)\\n elif hasattr(obj, print_method):\\n if print_method == \\\"savefig\\\":\\n buf = io.BytesIO()\\n obj.savefig(buf, format=\\\"png\\\")\\n buf.seek(0)\\n return base64.b64encode(buf.read()).decode(\\\"utf-8\\\")\\n return getattr(obj, print_method)()\\n elif print_method == \\\"_repr_mimebundle_\\\":\\n return {}, {}\\n return None\\n\\n\\ndef _format_mime(obj):\\n \\\"\\\"\\\"\\n Formats object using _repr_x_ methods.\\n \\\"\\\"\\\"\\n if isinstance(obj, str):\\n return html.escape(obj), \\\"text/plain\\\"\\n\\n mimebundle = _eval_formatter(obj, \\\"_repr_mimebundle_\\\")\\n if isinstance(mimebundle, tuple):\\n format_dict, _ = mimebundle\\n else:\\n format_dict = mimebundle\\n\\n output, not_available = None, []\\n for method, mime_type in reversed(_MIME_METHODS.items()):\\n if mime_type in format_dict:\\n output = format_dict[mime_type]\\n else:\\n output = _eval_formatter(obj, method)\\n\\n if output is None:\\n continue\\n elif mime_type not in _MIME_RENDERERS:\\n not_available.append(mime_type)\\n continue\\n break\\n if output is None:\\n if not_available:\\n window.console.warn(\\n f\\\"Rendered object requested unavailable MIME renderers: {not_available}\\\"\\n )\\n output = repr(output)\\n mime_type = \\\"text/plain\\\"\\n elif isinstance(output, tuple):\\n output, meta = output\\n else:\\n meta = {}\\n return _MIME_RENDERERS[mime_type](output, meta), mime_type\\n\\n\\ndef _write(element, value, append=False):\\n html, mime_type = _format_mime(value)\\n if html == \\\"\\\\\\\\n\\\":\\n return\\n\\n if append:\\n out_element = document.createElement(\\\"div\\\")\\n element.append(out_element)\\n else:\\n out_element = element.lastElementChild\\n if out_element is None:\\n out_element = element\\n\\n if mime_type in (\\\"application/javascript\\\", \\\"text/html\\\"):\\n script_element = document.createRange().createContextualFragment(html)\\n out_element.append(script_element)\\n else:\\n out_element.innerHTML = html\\n\\n\\ndef display(*values, target=None, append=True):\\n element = document.getElementById(target)\\n for v in values:\\n _write(element, v, append=append)\\n\"\n },\n \"pyscript.py\": \"# export only what we want to expose as `pyscript` module\\n# but not what is WORKER/MAIN dependent\\nfrom _pyscript import window, document, IS_WORKER\\nfrom _pyscript.display import display as _display\\n\\n# this part is needed to disambiguate between MAIN and WORKER\\nif IS_WORKER:\\n # in workers the display does not have a default ID\\n # but there is a sync utility from xworker\\n import polyscript as _polyscript\\n from _pyscript import sync\\n\\n def current_target():\\n return _polyscript.target\\n\\nelse:\\n # in MAIN both PyWorker and current element target exist\\n # so these are both exposed and the display will use,\\n # if not specified otherwise, such current element target\\n import _pyscript_js\\n\\n PyWorker = _pyscript_js.PyWorker\\n\\n def current_target():\\n return _pyscript_js.target\\n\\n\\n# the display provides a handy default target either in MAIN or WORKER\\ndef display(*values, target=None, append=True):\\n if target is None:\\n target = current_target()\\n\\n return _display(*values, target=target, append=append)\\n\"\n};\n","// ⚠️ This file is an artifact: DO NOT MODIFY\nexport default {\n error: () => import(\"./plugins/error.js\"),\n};\n","const CLOSEBUTTON =\n \"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='currentColor' width='12px'><path d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/></svg>\";\n\n/**\n * These error codes are used to identify the type of error that occurred.\n * @see https://docs.pyscript.net/latest/reference/exceptions.html?highlight=errors\n */\nexport const ErrorCode = {\n GENERIC: \"PY0000\", // Use this only for development then change to a more specific error code\n FETCH_ERROR: \"PY0001\",\n FETCH_NAME_ERROR: \"PY0002\",\n // Currently these are created depending on error code received from fetching\n FETCH_UNAUTHORIZED_ERROR: \"PY0401\",\n FETCH_FORBIDDEN_ERROR: \"PY0403\",\n FETCH_NOT_FOUND_ERROR: \"PY0404\",\n FETCH_SERVER_ERROR: \"PY0500\",\n FETCH_UNAVAILABLE_ERROR: \"PY0503\",\n BAD_CONFIG: \"PY1000\",\n MICROPIP_INSTALL_ERROR: \"PY1001\",\n BAD_PLUGIN_FILE_EXTENSION: \"PY2000\",\n NO_DEFAULT_EXPORT: \"PY2001\",\n TOP_LEVEL_AWAIT: \"PY9000\",\n};\n\nexport class UserError extends Error {\n constructor(errorCode, message = \"\", messageType = \"text\") {\n super(`(${errorCode}): ${message}`);\n this.errorCode = errorCode;\n this.messageType = messageType;\n this.name = \"UserError\";\n }\n}\n\nexport class FetchError extends UserError {\n constructor(errorCode, message) {\n super(errorCode, message);\n this.name = \"FetchError\";\n }\n}\n\nexport class InstallError extends UserError {\n constructor(errorCode, message) {\n super(errorCode, message);\n this.name = \"InstallError\";\n }\n}\n\nexport function _createAlertBanner(\n message,\n level,\n messageType = \"text\",\n logMessage = true,\n) {\n switch (`log-${level}-${logMessage}`) {\n case \"log-error-true\":\n console.error(message);\n break;\n case \"log-warning-true\":\n console.warn(message);\n break;\n }\n\n const content = messageType === \"html\" ? \"innerHTML\" : \"textContent\";\n const banner = Object.assign(document.createElement(\"div\"), {\n className: `alert-banner py-${level}`,\n [content]: message,\n });\n\n if (level === \"warning\") {\n const closeButton = Object.assign(document.createElement(\"button\"), {\n id: \"alert-close-button\",\n innerHTML: CLOSEBUTTON,\n });\n\n banner.appendChild(closeButton).addEventListener(\"click\", () => {\n banner.remove();\n });\n }\n\n document.body.prepend(banner);\n}\n","import { FetchError, ErrorCode } from \"./exceptions.js\";\n\n/**\n * This is a fetch wrapper that handles any non 200 responses and throws a\n * FetchError with the right ErrorCode. This is useful because our FetchError\n * will automatically create an alert banner.\n *\n * @param {string} url - URL to fetch\n * @param {Request} [options] - options to pass to fetch\n * @returns {Promise<Response>}\n */\nexport async function robustFetch(url, options) {\n let response;\n\n // Note: We need to wrap fetch into a try/catch block because fetch\n // throws a TypeError if the URL is invalid such as http://blah.blah\n try {\n response = await fetch(url, options);\n } catch (err) {\n const error = err;\n let errMsg;\n if (url.startsWith(\"http\")) {\n errMsg =\n `Fetching from URL ${url} failed with error ` +\n `'${error.message}'. Are your filename and path correct?`;\n } else {\n errMsg = `Polyscript: Access to local files\n (using [[fetch]] configurations in &lt;py-config&gt;)\n is not available when directly opening a HTML file;\n you must use a webserver to serve the additional files.\n See <a style=\"text-decoration: underline;\" href=\"https://github.com/pyscript/pyscript/issues/257#issuecomment-1119595062\">this reference</a>\n on starting a simple webserver with Python.\n `;\n }\n throw new FetchError(ErrorCode.FETCH_ERROR, errMsg);\n }\n\n // Note that response.ok is true for 200-299 responses\n if (!response.ok) {\n const errorMsg = `Fetching from URL ${url} failed with error ${response.status} (${response.statusText}). Are your filename and path correct?`;\n switch (response.status) {\n case 404:\n throw new FetchError(ErrorCode.FETCH_NOT_FOUND_ERROR, errorMsg);\n case 401:\n throw new FetchError(\n ErrorCode.FETCH_UNAUTHORIZED_ERROR,\n errorMsg,\n );\n case 403:\n throw new FetchError(ErrorCode.FETCH_FORBIDDEN_ERROR, errorMsg);\n case 500:\n throw new FetchError(ErrorCode.FETCH_SERVER_ERROR, errorMsg);\n case 503:\n throw new FetchError(\n ErrorCode.FETCH_UNAVAILABLE_ERROR,\n errorMsg,\n );\n default:\n throw new FetchError(ErrorCode.FETCH_ERROR, errorMsg);\n }\n }\n return response;\n}\n","/*! (c) PyScript Development Team */\n\nimport \"@ungap/with-resolvers\";\nimport { $ } from \"basic-devtools\";\nimport { define, XWorker } from \"polyscript\";\nimport sync from \"./sync.js\";\n\nimport stdlib from \"./stdlib.js\";\nimport plugins from \"./plugins.js\";\n\n// TODO: this is not strictly polyscript related but handy ... not sure\n// we should factor this utility out a part but this works anyway.\nimport { queryTarget } from \"../node_modules/polyscript/esm/script-handler.js\";\nimport { dedent } from \"../node_modules/polyscript/esm/utils.js\";\nimport { Hook } from \"../node_modules/polyscript/esm/worker/hooks.js\";\n\nimport { robustFetch as fetch } from \"./fetch.js\";\n\nconst { assign, defineProperty, entries } = Object;\n\nconst getText = (body) => body.text();\n\n// allows lazy element features on code evaluation\nlet currentElement;\n\n// create a unique identifier when/if needed\nlet id = 0;\nconst getID = (prefix = \"py\") => `${prefix}-${id++}`;\n\n// find the shared config for all py-script elements\nlet config;\nlet pyConfig = $(\"py-config\");\nif (pyConfig) config = pyConfig.getAttribute(\"src\") || pyConfig.textContent;\nelse {\n pyConfig = $('script[type=\"py\"]');\n config = pyConfig?.getAttribute(\"config\");\n}\n\nif (/^https?:\\/\\//.test(config)) config = await fetch(config).then(getText);\n\n// generic helper to disambiguate between custom element and script\nconst isScript = ({ tagName }) => tagName === \"SCRIPT\";\n\n// helper for all script[type=\"py\"] out there\nconst before = (script) => {\n defineProperty(document, \"currentScript\", {\n configurable: true,\n get: () => script,\n });\n};\n\nconst after = () => {\n delete document.currentScript;\n};\n\n/**\n * Given a generic DOM Element, tries to fetch the 'src' attribute, if present.\n * It either throws an error if the 'src' can't be fetched or it returns a fallback\n * content as source.\n */\nconst fetchSource = async (tag, io, asText) => {\n if (tag.hasAttribute(\"src\")) {\n try {\n return await fetch(tag.getAttribute(\"src\")).then(getText);\n } catch (error) {\n io.stderr(error);\n }\n }\n\n if (asText) return dedent(tag.textContent);\n\n console.warn(\n 'Deprecated: use <script type=\"py\"> for an always safe content parsing:\\n',\n tag.innerHTML,\n );\n\n return dedent(tag.innerHTML);\n};\n\n// common life-cycle handlers for any node\nconst bootstrapNodeAndPlugins = (pyodide, element, callback, hook) => {\n // make it possible to reach the current target node via Python\n callback(element);\n for (const fn of hooks[hook]) fn(pyodide, element);\n};\n\nlet shouldRegister = true;\nconst registerModule = ({ XWorker: $XWorker, interpreter, io }) => {\n // automatically use the pyscript stderr (when/if defined)\n // this defaults to console.error\n function PyWorker(...args) {\n const worker = $XWorker(...args);\n worker.onerror = ({ error }) => io.stderr(error);\n return worker;\n }\n\n // enrich the Python env with some JS utility for main\n interpreter.registerJsModule(\"_pyscript_js\", {\n PyWorker,\n get target() {\n return isScript(currentElement)\n ? currentElement.target.id\n : currentElement.id;\n },\n });\n\n interpreter.runPython(stdlib, { globals: interpreter.runPython(\"{}\") });\n};\n\nexport const hooks = {\n /** @type {Set<function>} */\n onBeforeRun: new Set(),\n /** @type {Set<function>} */\n onBeforeRunAsync: new Set(),\n /** @type {Set<function>} */\n onAfterRun: new Set(),\n /** @type {Set<function>} */\n onAfterRunAsync: new Set(),\n /** @type {Set<function>} */\n onInterpreterReady: new Set(),\n\n /** @type {Set<string>} */\n codeBeforeRunWorker: new Set(),\n /** @type {Set<string>} */\n codeBeforeRunWorkerAsync: new Set(),\n /** @type {Set<string>} */\n codeAfterRunWorker: new Set(),\n /** @type {Set<string>} */\n codeAfterRunWorkerAsync: new Set(),\n};\n\nconst workerHooks = {\n codeBeforeRunWorker: () =>\n [stdlib, ...hooks.codeBeforeRunWorker].map(dedent).join(\"\\n\"),\n codeBeforeRunWorkerAsync: () =>\n [stdlib, ...hooks.codeBeforeRunWorkerAsync].map(dedent).join(\"\\n\"),\n codeAfterRunWorker: () =>\n [...hooks.codeAfterRunWorker].map(dedent).join(\"\\n\"),\n codeAfterRunWorkerAsync: () =>\n [...hooks.codeAfterRunWorkerAsync].map(dedent).join(\"\\n\"),\n};\n\n// avoid running further script if the previous one had\n// some import that would inevitably delay its execution\nlet queuePlugins;\n\n// define the module as both `<script type=\"py\">` and `<py-script>`\ndefine(\"py\", {\n config,\n env: \"py-script\",\n interpreter: \"pyodide\",\n ...workerHooks,\n onWorkerReady(_, xworker) {\n assign(xworker.sync, sync);\n },\n onBeforeRun(pyodide, element) {\n currentElement = element;\n bootstrapNodeAndPlugins(pyodide, element, before, \"onBeforeRun\");\n },\n onBeforeRunAsync(pyodide, element) {\n currentElement = element;\n bootstrapNodeAndPlugins(pyodide, element, before, \"onBeforeRunAsync\");\n },\n onAfterRun(pyodide, element) {\n bootstrapNodeAndPlugins(pyodide, element, after, \"onAfterRun\");\n },\n onAfterRunAsync(pyodide, element) {\n bootstrapNodeAndPlugins(pyodide, element, after, \"onAfterRunAsync\");\n },\n async onInterpreterReady(pyodide, element) {\n if (shouldRegister) {\n shouldRegister = false;\n registerModule(pyodide);\n }\n\n // load plugins unless specified otherwise\n const toBeAwaited = [];\n for (const [key, value] of entries(plugins)) {\n if (!pyodide.config?.plugins?.includes(`!${key}`))\n toBeAwaited.push(value());\n }\n\n // this grants queued results when first script/tag has plugins\n // and the second one *might* rely on first tag execution\n if (toBeAwaited.length) {\n const all = Promise.all(toBeAwaited);\n queuePlugins = queuePlugins ? queuePlugins.then(() => all) : all;\n }\n\n if (queuePlugins) await queuePlugins;\n\n // allows plugins to do whatever they want with the element\n // before regular stuff happens in here\n for (const callback of hooks.onInterpreterReady)\n callback(pyodide, element);\n if (isScript(element)) {\n const {\n attributes: { async: isAsync, target },\n } = element;\n const hasTarget = !!target?.value;\n const show = hasTarget\n ? queryTarget(target.value)\n : document.createElement(\"script-py\");\n\n if (!hasTarget) {\n const { head, body } = document;\n if (head.contains(element)) body.append(show);\n else element.after(show);\n }\n if (!show.id) show.id = getID();\n\n // allows the code to retrieve the target element via\n // document.currentScript.target if needed\n defineProperty(element, \"target\", { value: show });\n\n pyodide[`run${isAsync ? \"Async\" : \"\"}`](\n await fetchSource(element, pyodide.io, true),\n );\n } else {\n // resolve PyScriptElement to allow connectedCallback\n element._pyodide.resolve(pyodide);\n }\n console.debug(\"[pyscript/main] PyScript Ready\");\n },\n});\n\nclass PyScriptElement extends HTMLElement {\n constructor() {\n assign(super(), {\n _pyodide: Promise.withResolvers(),\n srcCode: \"\",\n executed: false,\n });\n }\n get id() {\n return super.id || (super.id = getID());\n }\n set id(value) {\n super.id = value;\n }\n async connectedCallback() {\n if (!this.executed) {\n this.executed = true;\n const { io, run, runAsync } = await this._pyodide.promise;\n const runner = this.hasAttribute(\"async\") ? runAsync : run;\n this.srcCode = await fetchSource(this, io, !this.childElementCount);\n this.replaceChildren();\n runner(this.srcCode);\n this.style.display = \"block\";\n }\n }\n}\n\ncustomElements.define(\"py-script\", PyScriptElement);\n\n/**\n * A `Worker` facade able to bootstrap on the worker thread only a PyScript module.\n * @param {string} file the python file to run ina worker.\n * @param {{config?: string | object, async?: boolean}} [options] optional configuration for the worker.\n * @returns {Worker & {sync: ProxyHandler<object>}}\n */\nexport function PyWorker(file, options) {\n // this propagates pyscript worker hooks without needing a pyscript\n // bootstrap + it passes arguments and enforces `pyodide`\n // as the interpreter to use in the worker, as all hooks assume that\n // and as `pyodide` is the only default interpreter that can deal with\n // all the features we need to deliver pyscript out there.\n const xworker = XWorker.call(new Hook(null, workerHooks), file, {\n ...options,\n type: \"pyodide\",\n });\n assign(xworker.sync, sync);\n return xworker;\n}\n"],"names":["Promise","withResolvers","a","b","c","this","resolve","reject","promise","$","css","root","document","querySelector","$$","querySelectorAll","$x","path","xpath","XPathEvaluator","createExpression","evaluate","XPathResult","ORDERED_NODE_SNAPSHOT_TYPE","result","i","snapshotLength","push","snapshotItem","env","self","globalThis","deserialize","serialized","_","as","out","index","set","unpair","has","get","type","value","arr","object","key","Date","source","flags","RegExp","map","Map","Set","add","name","message","BigInt","Object","deserializer","EMPTY","toString","keys","typeOf","asString","call","slice","includes","shouldSkip","TYPE","serialize","json","lossy","strict","pair","entry","TypeError","valueOf","toJSON","entries","toISOString","serializer","parse","$parse","stringify","$stringify","JSON","options","str","any","CHANNEL","MAIN","THREAD","waitAsyncFallback","buffer","onmessage","w","Worker","postMessage","Int32Array","SharedArrayBuffer","Uint16Array","BYTES_PER_ELEMENT","I32_BYTES","UI16_BYTES","isArray","Array","notify","wait","waitAsync","Atomics","fromCharCode","String","waitFor","isAsync","sb","then","fn","buffers","WeakSet","context","WeakMap","uid","coincident","transform","post","transfer","args","harakiri","Proxy","action","startsWith","id","at","delete","pop","deadlock","setTimeout","console","warn","clearTimeout","length","bytes","actions","callback","size","results","addEventListener","async","event","details","data","stopImmediatePropagation","rest","Error","ui16a","charCodeAt","OBJECT","FUNCTION","NUMBER","STRING","UNDEFINED","SYMBOL","defineProperty","getOwnPropertyDescriptor","getPrototypeOf","isExtensible","ownKeys","preventExtensions","setPrototypeOf","Reflect","assign","create","TypedArray","Int8Array","augment","descriptor","how","asEntry","symbols","Symbol","filter","s","symbol","Bound","APPLY","CONSTRUCT","DEFINE_PROPERTY","DELETE_PROPERTY","GET","GET_OWN_PROPERTY_DESCRIPTOR","GET_PROTOTYPE_OF","HAS","IS_EXTENSIBLE","OWN_KEYS","PREVENT_EXTENSION","SET","SET_PROTOTYPE_OF","DELETE","main","patch","eventsHandler","EventTarget","prototype","listener","invoke","concat","handleEvent","currentTarget","target","method","thread","ids","values","__thread__","global","sid","registry","FinalizationRegistry","cb","Event","ref","WeakRef","register","deref","trapsHandler","thisArg","apply","proto","trap","proxy","toLowerCase","__proxied__","bound","isProxy","localArray","argument","__main__","proxies","bind","proxyHandler","fromEntry","TRAP","ctx","remoteArray","Worker$1","$coincident","util","dedent","string","t","l","arguments","content","line","split","trim","test","replace","$1","codedent","tpl","defineProperties","all","absoluteURL","base","location","href","URL","nodeInfo","node","tag","tagName","getBuffer","response","arrayBuffer","getJSON","getText","text","workerHooks","Hook","constructor","interpreter","onWorkerReady","stringHooks","hooks","xworker","url","worker","createObjectURL","Blob","isHook","version","config","bootstrap","fetch","code","sync","onerror","writable","configurable","error","workerURL","element","attributes","childElementCount","innerHTML","localName","textContent","io","stdio","init","localIO","stderr","stdout","log","engine","writeFile","FS","PATH","PATH_FS","absPath","mkdirTree","dirname","Uint8Array","canOwn","tree","join","current","branch","mkdir","cwd","joinPaths","parts","res","part","p","fetchPaths","module","config_fetch","files","to_file","from","undefined","endsWith","flatMap","to_folder","file","filename","lastIndexOf","calculateFetchPaths","fetchResolved","registerJSModule","registerJsModule","run","runPython","runAsync","runPythonAsync","runEvent","globals","micropython","loadMicroPython","_module","toJsOptions","dict_converter","fromEntries","pyodide","loadPyodide","indexURL","packages","loadPackage","micropip","pyimport","install","destroy","ffi","PyProxy","toJs","jsType","ruby_wasm_wasi","experimental","DefaultRubyVM","WebAssembly","compile","vm","eval","evalAsync","wrap","wasmoon","LuaFactory","LuaLibraries","createEngine","getTable","Base","setField","doStringSync","doString","cmodule","writeFileShim","configs","selectors","prefixes","import","baseURL","getRuntime","getRuntimeID","queryTarget","script","idOrSelector","parent","parentNode","getRoot","getElementById","targets","targetDescriptor","createElement","handle","handled","interpreters","getValue","prefix","getDetails","runtime","queue","XWorker","$xworker","closest","body","append","after","src","versionValue","configValue","targetValue","currentScript","execute","awaitInterpreter","available","r","ownerElement","el","getAttribute","addAllListeners","CUSTOM_SELECTORS","types","waitList","handleCustomType","selector","matches","known","onInterpreterReady","custom","hasAttribute","defaultRegistry","onBeforeRun","onBeforeRunAsync","onAfterRun","onAfterRunAsync","before","resolved","structuredClone","dontBotherCount","whenDefined","INTERPRETER_SELECTORS","mo","MutationObserver","records","attributeName","addedNodes","nodeType","forEach","observe","childList","subtree","attachShadow","Element","sleep","seconds","python","write","literal","_pyscript","stdlib","plugins","ErrorCode","UserError","errorCode","messageType","super","FetchError","robustFetch","err","errMsg","ok","errorMsg","status","statusText","currentElement","getID","pyConfig","isScript","fetchSource","asText","bootstrapNodeAndPlugins","hook","shouldRegister","codeBeforeRunWorker","codeBeforeRunWorkerAsync","codeAfterRunWorker","codeAfterRunWorkerAsync","queuePlugins","dontBother","splice","indexOf","remove","head","define","$XWorker","PyWorker","registerModule","toBeAwaited","hasTarget","show","contains","_pyodide","debug","PyScriptElement","HTMLElement","srcCode","executed","connectedCallback","runner","replaceChildren","style","display","customElements"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]}
1
+ {"version":3,"file":"core.js","sources":["../node_modules/@ungap/with-resolvers/index.js","../node_modules/basic-devtools/esm/index.js","../node_modules/@ungap/structured-clone/esm/deserialize.js","../node_modules/@ungap/structured-clone/esm/types.js","../node_modules/@ungap/structured-clone/esm/serialize.js","../node_modules/@ungap/structured-clone/esm/json.js","../node_modules/coincident/esm/channel.js","../node_modules/coincident/esm/fallback.js","../node_modules/coincident/esm/index.js","../node_modules/coincident/esm/shared/types.js","../node_modules/coincident/esm/shared/utils.js","../node_modules/coincident/esm/shared/traps.js","../node_modules/coincident/esm/shared/main.js","../node_modules/coincident/esm/window/main.js","../node_modules/coincident/esm/window/thread.js","../node_modules/coincident/esm/shared/thread.js","../node_modules/coincident/esm/shared/worker.js","../node_modules/coincident/esm/window.js","../node_modules/codedent/esm/index.js","../node_modules/plain-tag/esm/index.js","../node_modules/polyscript/esm/utils.js","../node_modules/polyscript/esm/fetch-utils.js","../node_modules/polyscript/esm/worker/hooks.js","../node_modules/polyscript/esm/worker/class.js","../node_modules/polyscript/esm/worker/xworker.js","../node_modules/polyscript/esm/worker/url.js","../node_modules/polyscript/esm/interpreter/_utils.js","../node_modules/polyscript/esm/interpreter/_python.js","../node_modules/polyscript/esm/interpreter/micropython.js","../node_modules/polyscript/esm/interpreter/pyodide.js","../node_modules/polyscript/esm/interpreter/ruby-wasm-wasi.js","../node_modules/polyscript/esm/interpreter/wasmoon.js","../node_modules/polyscript/esm/interpreters.js","../node_modules/polyscript/esm/toml.js","../node_modules/polyscript/esm/loader.js","../node_modules/polyscript/esm/script-handler.js","../node_modules/polyscript/esm/listeners.js","../node_modules/polyscript/esm/custom.js","../node_modules/polyscript/esm/index.js","../src/sync.js","../src/stdlib.js","../src/stdlib/pyscript.js","../src/plugins.js","../src/exceptions.js","../src/fetch.js","../src/core.js"],"sourcesContent":["Promise.withResolvers || (Promise.withResolvers = function withResolvers() {\n var a, b, c = new this(function (resolve, reject) {\n a = resolve;\n b = reject;\n });\n return {resolve: a, reject: b, promise: c};\n});\n","/**\n * Given a CSS selector, returns the first matching node, if any.\n * @param {string} css the CSS selector to query\n * @param {Document | DocumentFragment | Element} [root] the optional parent node to query\n * @returns {Element?} the found element, if any\n */\nconst $ = (css, root = document) => root.querySelector(css);\n\n/**\n * Given a CSS selector, returns a list of all matching nodes.\n * @param {string} css the CSS selector to query\n * @param {Document | DocumentFragment | Element} [root] the optional parent node to query\n * @returns {Element[]} a list of found nodes\n */\nconst $$ = (css, root = document) => [...root.querySelectorAll(css)];\n\n/**\n * Given a XPath selector, returns a list of all matching nodes.\n * @param {string} path the XPath selector to evaluate\n * @param {Document | DocumentFragment | Element} [root] the optional parent node to query\n * @returns {Node[]} a list of found nodes (elements, attributes, text, comments)\n */\nconst $x = (path, root = document) => {\n const expression = (new XPathEvaluator).createExpression(path);\n const xpath = expression.evaluate(root, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE);\n const result = [];\n for (let i = 0, {snapshotLength} = xpath; i < snapshotLength; i++)\n result.push(xpath.snapshotItem(i));\n return result;\n};\n\nexport {$, $$, $x};\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n const as = (out, index) => {\n $.set(index, out);\n return out;\n };\n\n const unpair = index => {\n if ($.has(index))\n return $.get(index);\n\n const [type, value] = _[index];\n switch (type) {\n case PRIMITIVE:\n case VOID:\n return as(value, index);\n case ARRAY: {\n const arr = as([], index);\n for (const index of value)\n arr.push(unpair(index));\n return arr;\n }\n case OBJECT: {\n const object = as({}, index);\n for (const [key, index] of value)\n object[unpair(key)] = unpair(index);\n return object;\n }\n case DATE:\n return as(new Date(value), index);\n case REGEXP: {\n const {source, flags} = value;\n return as(new RegExp(source, flags), index);\n }\n case MAP: {\n const map = as(new Map, index);\n for (const [key, index] of value)\n map.set(unpair(key), unpair(index));\n return map;\n }\n case SET: {\n const set = as(new Set, index);\n for (const index of value)\n set.add(unpair(index));\n return set;\n }\n case ERROR: {\n const {name, message} = value;\n return as(new env[name](message), index);\n }\n case BIGINT:\n return as(BigInt(value), index);\n case 'BigInt':\n return as(Object(BigInt(value)), index);\n }\n return as(new env[type](value), index);\n };\n\n return unpair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","export const VOID = -1;\nexport const PRIMITIVE = 0;\nexport const ARRAY = 1;\nexport const OBJECT = 2;\nexport const DATE = 3;\nexport const REGEXP = 4;\nexport const MAP = 5;\nexport const SET = 6;\nexport const ERROR = 7;\nexport const BIGINT = 8;\n// export const SYMBOL = 9;\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n const type = typeof value;\n if (type !== 'object' || !value)\n return [PRIMITIVE, type];\n\n const asString = toString.call(value).slice(8, -1);\n switch (asString) {\n case 'Array':\n return [ARRAY, EMPTY];\n case 'Object':\n return [OBJECT, EMPTY];\n case 'Date':\n return [DATE, EMPTY];\n case 'RegExp':\n return [REGEXP, EMPTY];\n case 'Map':\n return [MAP, EMPTY];\n case 'Set':\n return [SET, EMPTY];\n }\n\n if (asString.includes('Array'))\n return [ARRAY, asString];\n\n if (asString.includes('Error'))\n return [ERROR, asString];\n\n return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n TYPE === PRIMITIVE &&\n (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n const as = (out, value) => {\n const index = _.push(out) - 1;\n $.set(value, index);\n return index;\n };\n\n const pair = value => {\n if ($.has(value))\n return $.get(value);\n\n let [TYPE, type] = typeOf(value);\n switch (TYPE) {\n case PRIMITIVE: {\n let entry = value;\n switch (type) {\n case 'bigint':\n TYPE = BIGINT;\n entry = value.toString();\n break;\n case 'function':\n case 'symbol':\n if (strict)\n throw new TypeError('unable to serialize ' + type);\n entry = null;\n break;\n case 'undefined':\n return as([VOID], value);\n }\n return as([TYPE, entry], value);\n }\n case ARRAY: {\n if (type)\n return as([type, [...value]], value);\n \n const arr = [];\n const index = as([TYPE, arr], value);\n for (const entry of value)\n arr.push(pair(entry));\n return index;\n }\n case OBJECT: {\n if (type) {\n switch (type) {\n case 'BigInt':\n return as([type, value.toString()], value);\n case 'Boolean':\n case 'Number':\n case 'String':\n return as([type, value.valueOf()], value);\n }\n }\n\n if (json && ('toJSON' in value))\n return pair(value.toJSON());\n\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const key of keys(value)) {\n if (strict || !shouldSkip(typeOf(value[key])))\n entries.push([pair(key), pair(value[key])]);\n }\n return index;\n }\n case DATE:\n return as([TYPE, value.toISOString()], value);\n case REGEXP: {\n const {source, flags} = value;\n return as([TYPE, {source, flags}], value);\n }\n case MAP: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const [key, entry] of value) {\n if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n entries.push([pair(key), pair(entry)]);\n }\n return index;\n }\n case SET: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const entry of value) {\n if (strict || !shouldSkip(typeOf(entry)))\n entries.push(pair(entry));\n }\n return index;\n }\n }\n\n const {message} = value;\n return as([TYPE, {name: type, message}], value);\n };\n\n return pair;\n};\n\n/**\n * @typedef {Array<string,any>} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n * if `true`, will not throw errors on incompatible types, and behave more\n * like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n const _ = [];\n return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","/*! (c) Andrea Giammarchi - ISC */\n\nimport {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\nconst {parse: $parse, stringify: $stringify} = JSON;\nconst options = {json: true, lossy: true};\n\n/**\n * Revive a previously stringified structured clone.\n * @param {string} str previously stringified data as string.\n * @returns {any} whatever was previously stringified as clone.\n */\nexport const parse = str => deserialize($parse(str));\n\n/**\n * Represent a structured clone value as string.\n * @param {any} any some clone-able value to stringify.\n * @returns {string} the value stringified.\n */\nexport const stringify = any => $stringify(serialize(any, options));\n","// ⚠️ AUTOMATICALLY GENERATED - DO NOT CHANGE\nexport const CHANNEL = '3099687a-04a9-4406-a08e-fd1602cb2a81';\n\nexport const MAIN = 'M' + CHANNEL;\nexport const THREAD = 'T' + CHANNEL;\n","// encodeURIComponent('onmessage=({data:b})=>(Atomics.wait(b,0),postMessage(0))')\n\nexport default buffer => ({\n value: new Promise(onmessage => {\n let w = new Worker('data:application/javascript,onmessage%3D(%7Bdata%3Ab%7D)%3D%3E(Atomics.wait(b%2C0)%2CpostMessage(0))');\n w.onmessage = onmessage;\n w.postMessage(buffer);\n })\n});\n","/*! (c) Andrea Giammarchi - ISC */\n\nimport {CHANNEL} from './channel.js';\nimport waitAsyncFallback from './fallback.js';\n\n// just minifier friendly for Blob Workers' cases\nconst {Int32Array, Map, SharedArrayBuffer, Uint16Array} = globalThis;\n\n// common constants / utilities for repeated operations\nconst {BYTES_PER_ELEMENT: I32_BYTES} = Int32Array;\nconst {BYTES_PER_ELEMENT: UI16_BYTES} = Uint16Array;\n\nconst {isArray} = Array;\nconst {notify, wait, waitAsync} = Atomics;\nconst {fromCharCode} = String;\n\n// automatically uses sync wait (worker -> main)\n// or fallback to async wait (main -> worker)\nconst waitFor = (isAsync, sb) => isAsync ?\n (waitAsync || waitAsyncFallback)(sb, 0) :\n (wait(sb, 0), {value: {then: fn => fn()}});\n\n// retain buffers to transfer\nconst buffers = new WeakSet;\n\n// retain either main threads or workers global context\nconst context = new WeakMap;\n\n// used to generate a unique `id` per each worker `postMessage` \"transaction\"\nlet uid = 0;\n\n/**\n * Create once a `Proxy` able to orchestrate synchronous `postMessage` out of the box.\n * @param {globalThis | Worker} self the context in which code should run\n * @param {{parse: (serialized: string) => any, stringify: (serializable: any) => string, transform?: (value:any) => any}} [JSON] an optional `JSON` like interface to `parse` or `stringify` content with extra `transform` ability.\n * @returns {ProxyHandler<globalThis> | ProxyHandler<Worker>}\n */\nconst coincident = (self, {parse, stringify, transform} = JSON) => {\n // create a Proxy once for the given context (globalThis or Worker instance)\n if (!context.has(self)) {\n // ensure the CHANNEL and data are posted correctly\n const post = (transfer, ...args) => self.postMessage({[CHANNEL]: args}, {transfer});\n\n // prevent Harakiri https://github.com/WebReflection/coincident/issues/18\n let harakiri = false;\n\n context.set(self, new Proxy(new Map, {\n // there is very little point in checking prop in proxy for this very specific case\n // and I don't want to orchestrate a whole roundtrip neither, as stuff would fail\n // regardless if from Worker we access non existent Main callback, and vice-versa.\n // This is here mostly to guarantee that if such check is performed, at least the\n // get trap goes through and then it's up to developers guarantee they are accessing\n // stuff that actually exists elsewhere.\n has: (_, action) => typeof action === 'string' && !action.startsWith('_'),\n\n // worker related: get any utility that should be available on the main thread\n get: (_, action) => action === 'then' ? null : ((...args) => {\n // transaction id\n const id = uid++;\n\n // first contact: just ask for how big the buffer should be\n let sb = new Int32Array(new SharedArrayBuffer(I32_BYTES));\n\n // if a transfer list has been passed, drop it from args\n let transfer = [];\n if (buffers.has(args.at(-1) || transfer))\n buffers.delete(transfer = args.pop());\n\n // ask for invoke with arguments and wait for it\n post(transfer, id, sb, action, transform ? args.map(transform) : args);\n\n // helps deciding how to wait for results\n const isAsync = self !== globalThis;\n\n // warn users about possible deadlock still allowing them\n // to explicitly `proxy.invoke().then(...)` without blocking\n let deadlock = 0;\n if (harakiri && isAsync)\n deadlock = setTimeout(console.warn, 1000, `💀🔒 - Possible deadlock if proxy.${action}(...args) is awaited`);\n\n return waitFor(isAsync, sb).value.then(() => {\n clearTimeout(deadlock);\n\n // commit transaction using the returned / needed buffer length\n const length = sb[0];\n\n // filter undefined results\n if (!length) return;\n\n // calculate the needed ui16 bytes length to store the result string\n const bytes = UI16_BYTES * length;\n\n // round up to the next amount of bytes divided by 4 to allow i32 operations\n sb = new Int32Array(new SharedArrayBuffer(bytes + (bytes % I32_BYTES)));\n\n // ask for results and wait for it\n post([], id, sb);\n return waitFor(isAsync, sb).value.then(\n // transform the shared buffer into a string and return it parsed\n () => parse(fromCharCode(...new Uint16Array(sb.buffer).slice(0, length)))\n );\n });\n }),\n\n // main thread related: react to any utility a worker is asking for\n set(actions, action, callback) {\n // lazy event listener and logic handling, triggered once by setters actions\n if (!actions.size) {\n // maps results by `id` as they are asked for\n const results = new Map;\n // add the event listener once (first defined setter, all others work the same)\n self.addEventListener('message', async (event) => {\n // grub the very same library CHANNEL; ignore otherwise\n const details = event.data?.[CHANNEL];\n if (isArray(details)) {\n // if early enough, avoid leaking data to other listeners\n event.stopImmediatePropagation();\n const [id, sb, ...rest] = details;\n // action available: it must be defined/known on the main thread\n if (rest.length) {\n const [action, args] = rest;\n if (actions.has(action)) {\n harakiri = true;\n try {\n // await for result either sync or async and serialize it\n const result = await actions.get(action)(...args);\n if (result !== void 0) {\n const serialized = stringify(transform ? transform(result) : result);\n // store the result for \"the very next\" event listener call\n results.set(id, serialized);\n // communicate the required SharedArrayBuffer length out of the\n // resulting serialized string\n sb[0] = serialized.length;\n }\n }\n finally {\n harakiri = false;\n }\n }\n // unknown action should be notified as missing on the main thread\n else {\n throw new Error(`Unsupported action: ${action}`);\n }\n }\n // no action means: get results out of the well known `id`\n else {\n const result = results.get(id);\n results.delete(id);\n // populate the SharedArrayBuffer with utf-16 chars code\n for (let ui16a = new Uint16Array(sb.buffer), i = 0; i < result.length; i++)\n ui16a[i] = result.charCodeAt(i);\n }\n // release te worker waiting either the length or the result\n notify(sb, 0);\n }\n });\n }\n // store this action callback allowing the setter in the process\n return !!actions.set(action, callback);\n }\n }));\n }\n return context.get(self);\n};\n\ncoincident.transfer = (...args) => (buffers.add(args), args);\n\nexport default coincident;\n","export const OBJECT = 'object';\nexport const FUNCTION = 'function';\nexport const BOOLEAN = 'boolean';\nexport const NUMBER = 'number';\nexport const STRING = 'string';\nexport const UNDEFINED = 'undefined';\nexport const BIGINT = 'bigint';\nexport const SYMBOL = 'symbol';\nexport const NULL = 'null';\n","\nimport {\n OBJECT,\n FUNCTION,\n BOOLEAN,\n NUMBER,\n STRING,\n UNDEFINED,\n BIGINT,\n SYMBOL,\n NULL\n} from './types.js';\n\nconst {\n defineProperty,\n getOwnPropertyDescriptor,\n getPrototypeOf,\n isExtensible,\n ownKeys,\n preventExtensions,\n set,\n setPrototypeOf\n} = Reflect;\n\nconst {assign, create} = Object;\n\nexport const TypedArray = getPrototypeOf(Int8Array);\n\nexport const isArray = 'isArray';\n\nexport {\n assign,\n create,\n defineProperty,\n getOwnPropertyDescriptor,\n getPrototypeOf,\n isExtensible,\n ownKeys,\n preventExtensions,\n set,\n setPrototypeOf\n};\n\nexport const augment = (descriptor, how) => {\n const {get, set, value} = descriptor;\n if (get) descriptor.get = how(get);\n if (set) descriptor.set = how(set);\n if (value) descriptor.value = how(value);\n return descriptor;\n};\n\nexport const entry = (type, value) => [type, value];\n\nexport const asEntry = transform => value => {\n const type = typeof value;\n switch (type) {\n case OBJECT:\n if (value == null)\n return entry(NULL, value);\n if (value === globalThis)\n return entry(OBJECT, null);\n case FUNCTION:\n return transform(type, value);\n case BOOLEAN:\n case NUMBER:\n case STRING:\n case UNDEFINED:\n case BIGINT:\n return entry(type, value);\n case SYMBOL: {\n if (symbols.has(value))\n return entry(type, symbols.get(value));\n }\n }\n throw new Error(`Unable to handle this ${type} type`);\n};\n\nconst symbols = new Map(\n ownKeys(Symbol)\n .filter(s => typeof Symbol[s] === SYMBOL)\n .map(s => [Symbol[s], s])\n);\n \nexport const symbol = value => {\n for (const [symbol, name] of symbols) {\n if (name === value)\n return symbol;\n }\n};\n\nexport function Bound() {\n return this;\n}\n","export const APPLY = 'apply';\nexport const CONSTRUCT = 'construct';\nexport const DEFINE_PROPERTY = 'defineProperty';\nexport const DELETE_PROPERTY = 'deleteProperty';\nexport const GET = 'get';\nexport const GET_OWN_PROPERTY_DESCRIPTOR = 'getOwnPropertyDescriptor';\nexport const GET_PROTOTYPE_OF = 'getPrototypeOf';\nexport const HAS = 'has';\nexport const IS_EXTENSIBLE = 'isExtensible';\nexport const OWN_KEYS = 'ownKeys';\nexport const PREVENT_EXTENSION = 'preventExtensions';\nexport const SET = 'set';\nexport const SET_PROTOTYPE_OF = 'setPrototypeOf';\nexport const DELETE = 'delete';\n","import {\n TypedArray,\n defineProperty,\n getOwnPropertyDescriptor,\n getPrototypeOf,\n isExtensible,\n ownKeys,\n preventExtensions,\n set,\n setPrototypeOf,\n\n assign,\n create,\n augment,\n entry,\n asEntry,\n symbol\n} from './utils.js';\n\nimport {\n OBJECT,\n FUNCTION,\n NUMBER,\n STRING,\n SYMBOL,\n UNDEFINED\n} from './types.js';\n\nimport {\n APPLY,\n CONSTRUCT,\n DEFINE_PROPERTY,\n DELETE_PROPERTY,\n GET,\n GET_OWN_PROPERTY_DESCRIPTOR,\n GET_PROTOTYPE_OF,\n HAS,\n IS_EXTENSIBLE,\n OWN_KEYS,\n PREVENT_EXTENSION,\n SET,\n SET_PROTOTYPE_OF,\n DELETE\n} from './traps.js';\n\nexport default (name, patch) => {\n const eventsHandler = patch && new WeakMap;\n\n // patch once main UI tread\n if (patch) {\n const {addEventListener} = EventTarget.prototype;\n // this should never be on the way as it's extremely light and fast\n // but it's necessary to allow \"preventDefault\" or other event invokes at distance\n defineProperty(EventTarget.prototype, 'addEventListener', {\n value(type, listener, ...options) {\n if (options.at(0)?.invoke) {\n if (!eventsHandler.has(this))\n eventsHandler.set(this, new Map);\n eventsHandler.get(this).set(type, [].concat(options[0].invoke));\n delete options[0].invoke;\n }\n return addEventListener.call(this, type, listener, ...options);\n }\n });\n }\n\n const handleEvent = patch && (event => {\n const {currentTarget, target, type} = event;\n for (const method of eventsHandler.get(currentTarget || target)?.get(type) || [])\n event[method]();\n });\n\n return (thread, MAIN, THREAD, ...args) => {\n let id = 0;\n const ids = new Map;\n const values = new Map;\n\n const {[THREAD]: __thread__} = thread;\n\n const global = args.length ? assign(create(globalThis), ...args) : globalThis;\n\n const result = asEntry((type, value) => {\n if (!ids.has(value)) {\n let sid;\n // a bit apocalyptic scenario but if this main runs forever\n // and the id does a whole int32 roundtrip we might have still\n // some reference danglign around\n while (values.has(sid = id++));\n ids.set(value, sid);\n values.set(sid, value);\n }\n return entry(type, ids.get(value));\n });\n\n const registry = new FinalizationRegistry(id => {\n __thread__(DELETE, entry(STRING, id));\n });\n\n const target = ([type, value]) => {\n switch (type) {\n case OBJECT:\n if (value == null)\n return global;\n if (typeof value === NUMBER)\n return values.get(value);\n if (!(value instanceof TypedArray)) {\n for (const key in value)\n value[key] = target(value[key]);\n }\n return value;\n case FUNCTION:\n if (typeof value === STRING) {\n if (!values.has(value)) {\n const cb = function (...args) {\n if (patch && args.at(0) instanceof Event) handleEvent(...args);\n return __thread__(\n APPLY,\n entry(FUNCTION, value),\n result(this),\n args.map(result)\n );\n };\n const ref = new WeakRef(cb);\n values.set(value, ref);\n registry.register(cb, value, ref);\n }\n return values.get(value).deref();\n }\n return values.get(value);\n case SYMBOL:\n return symbol(value);\n }\n return value;\n };\n\n const trapsHandler = {\n [APPLY]: (target, thisArg, args) => result(target.apply(thisArg, args)),\n [CONSTRUCT]: (target, args) => result(new target(...args)),\n [DEFINE_PROPERTY]: (target, name, descriptor) => result(defineProperty(target, name, descriptor)),\n [DELETE_PROPERTY]: (target, name) => result(delete target[name]),\n [GET_PROTOTYPE_OF]: target => result(getPrototypeOf(target)),\n [GET]: (target, name) => result(target[name]),\n [GET_OWN_PROPERTY_DESCRIPTOR]: (target, name) => {\n const descriptor = getOwnPropertyDescriptor(target, name);\n return descriptor ? entry(OBJECT, augment(descriptor, result)) : entry(UNDEFINED, descriptor);\n },\n [HAS]: (target, name) => result(name in target),\n [IS_EXTENSIBLE]: target => result(isExtensible(target)),\n [OWN_KEYS]: target => entry(OBJECT, ownKeys(target).map(result)),\n [PREVENT_EXTENSION]: target => result(preventExtensions(target)),\n [SET]: (target, name, value) => result(set(target, name, value)),\n [SET_PROTOTYPE_OF]: (target, proto) => result(setPrototypeOf(target, proto)),\n [DELETE](id) {\n ids.delete(values.get(id));\n values.delete(id);\n }\n };\n\n thread[MAIN] = (trap, entry, ...args) => {\n switch (trap) {\n case APPLY:\n args[0] = target(args[0]);\n args[1] = args[1].map(target);\n break;\n case CONSTRUCT:\n args[0] = args[0].map(target);\n break;\n case DEFINE_PROPERTY: {\n const [name, descriptor] = args;\n args[0] = target(name);\n const {get, set, value} = descriptor;\n if (get) descriptor.get = target(get);\n if (set) descriptor.set = target(set);\n if (value) descriptor.value = target(value);\n break;\n }\n default:\n args = args.map(target);\n break;\n }\n return trapsHandler[trap](target(entry), ...args);\n };\n\n return {\n proxy: thread,\n [name.toLowerCase()]: global,\n [`is${name}Proxy`]: () => false\n };\n };\n};\n","import main from '../shared/main.js';\n\nexport default main('Window', true);\n","import thread from '../shared/thread.js';\n\nexport default thread('Window');\n","import {\n Bound,\n TypedArray,\n augment,\n defineProperty,\n entry,\n asEntry,\n symbol,\n isArray\n} from './utils.js';\n\nimport {\n OBJECT,\n FUNCTION,\n NUMBER,\n STRING,\n SYMBOL\n} from './types.js';\n\nimport {\n APPLY,\n CONSTRUCT,\n DEFINE_PROPERTY,\n DELETE_PROPERTY,\n GET,\n GET_OWN_PROPERTY_DESCRIPTOR,\n GET_PROTOTYPE_OF,\n HAS,\n IS_EXTENSIBLE,\n OWN_KEYS,\n PREVENT_EXTENSION,\n SET,\n SET_PROTOTYPE_OF,\n DELETE\n} from './traps.js';\n\nexport default name => {\n let id = 0;\n const ids = new Map;\n const values = new Map;\n\n const __proxied__ = Symbol();\n\n const bound = target => typeof target === FUNCTION ? target() : target;\n\n const isProxy = value => typeof value === OBJECT && !!value && __proxied__ in value;\n\n const localArray = Array[isArray];\n\n const argument = asEntry(\n (type, value) => {\n if (__proxied__ in value)\n return bound(value[__proxied__]);\n if (type === FUNCTION) {\n if (!values.has(value)) {\n let sid;\n // a bit apocalyptic scenario but if this thread runs forever\n // and the id does a whole int32 roundtrip we might have still\n // some reference dangling around\n while (values.has(sid = String(id++)));\n ids.set(value, sid);\n values.set(sid, value);\n }\n return entry(type, ids.get(value));\n }\n if (!(value instanceof TypedArray)) {\n for(const key in value)\n value[key] = argument(value[key]);\n }\n return entry(type, value);\n }\n );\n\n return (main, MAIN, THREAD) => {\n const { [MAIN]: __main__ } = main;\n\n const proxies = new Map;\n\n const registry = new FinalizationRegistry(id => {\n proxies.delete(id);\n __main__(DELETE, argument(id));\n });\n\n const register = (entry) => {\n const [type, value] = entry;\n if (!proxies.has(value)) {\n const target = type === FUNCTION ? Bound.bind(entry) : entry;\n const proxy = new Proxy(target, proxyHandler);\n const ref = new WeakRef(proxy);\n proxies.set(value, ref);\n registry.register(proxy, value, ref);\n }\n return proxies.get(value).deref();\n };\n\n const fromEntry = entry => {\n const [type, value] = entry;\n switch (type) {\n case OBJECT:\n return value === null ? globalThis : (\n typeof value === NUMBER ? register(entry) : value\n );\n case FUNCTION:\n return typeof value === STRING ? values.get(value) : register(entry);\n case SYMBOL:\n return symbol(value);\n }\n return value;\n };\n\n const result = (TRAP, target, ...args) => fromEntry(__main__(TRAP, bound(target), ...args));\n\n const proxyHandler = {\n [APPLY]: (target, thisArg, args) => result(APPLY, target, argument(thisArg), args.map(argument)),\n [CONSTRUCT]: (target, args) => result(CONSTRUCT, target, args.map(argument)),\n [DEFINE_PROPERTY]: (target, name, descriptor) => {\n const { get, set, value } = descriptor;\n if (typeof get === FUNCTION) descriptor.get = argument(get);\n if (typeof set === FUNCTION) descriptor.set = argument(set);\n if (typeof value === FUNCTION) descriptor.value = argument(value);\n return result(DEFINE_PROPERTY, target, argument(name), descriptor);\n },\n [DELETE_PROPERTY]: (target, name) => result(DELETE_PROPERTY, target, argument(name)),\n [GET_PROTOTYPE_OF]: target => result(GET_PROTOTYPE_OF, target),\n [GET]: (target, name) => name === __proxied__ ? target : result(GET, target, argument(name)),\n [GET_OWN_PROPERTY_DESCRIPTOR]: (target, name) => {\n const descriptor = result(GET_OWN_PROPERTY_DESCRIPTOR, target, argument(name));\n return descriptor && augment(descriptor, fromEntry);\n },\n [HAS]: (target, name) => name === __proxied__ || result(HAS, target, argument(name)),\n [IS_EXTENSIBLE]: target => result(IS_EXTENSIBLE, target),\n [OWN_KEYS]: target => result(OWN_KEYS, target).map(fromEntry),\n [PREVENT_EXTENSION]: target => result(PREVENT_EXTENSION, target),\n [SET]: (target, name, value) => result(SET, target, argument(name), argument(value)),\n [SET_PROTOTYPE_OF]: (target, proto) => result(SET_PROTOTYPE_OF, target, argument(proto)),\n };\n\n main[THREAD] = (trap, entry, ctx, args) => {\n switch (trap) {\n case APPLY:\n return fromEntry(entry).apply(fromEntry(ctx), args.map(fromEntry));\n case DELETE: {\n const id = fromEntry(entry);\n ids.delete(values.get(id));\n values.delete(id);\n }\n }\n };\n\n const global = new Proxy([OBJECT, null], proxyHandler);\n\n // this is needed to avoid confusion when new Proxy([type, value])\n // passes through `isArray` check, as that would return always true\n // by specs and there's no Proxy trap to avoid it.\n const remoteArray = global.Array[isArray];\n defineProperty(Array, isArray, {\n value: ref => isProxy(ref) ? remoteArray(ref) : localArray(ref)\n });\n\n return {\n [name.toLowerCase()]: global,\n [`is${name}Proxy`]: isProxy,\n proxy: main\n };\n };\n};\n","export default typeof Worker === 'function' ? Worker : class {};\n","import {MAIN, THREAD} from './channel.js';\nimport $coincident from './index.js';\nimport main from './window/main.js';\nimport thread from './window/thread.js';\nimport Worker from './shared/worker.js';\n\nconst proxies = new WeakMap;\n\n/**\n * @typedef {object} Coincident\n * @property {ProxyHandler<globalThis>} proxy\n * @property {ProxyHandler<Window>} window\n * @property {(value: any) => boolean} isWindowProxy\n */\n\n/**\n * Create once a `Proxy` able to orchestrate synchronous `postMessage` out of the box.\n * In workers, returns a `{proxy, window, isWindowProxy}` namespace to reach main globals synchronously.\n * @param {Worker | globalThis} self the context in which code should run\n * @returns {ProxyHandler<Worker> | Coincident}\n */\nconst coincident = (self, ...args) => {\n const proxy = $coincident(self, ...args);\n if (!proxies.has(proxy)) {\n const util = self instanceof Worker ? main : thread;\n proxies.set(proxy, util(proxy, MAIN, THREAD));\n }\n return proxies.get(proxy);\n}\n\ncoincident.transfer = $coincident.transfer;\n\nexport default coincident;\n","import content from 'plain-tag';\n\nconst dedent = {\n object(...args) {\n return this.string(content(...args));\n },\n string(content) {\n for (const line of content.split(/[\\r\\n]+/)) {\n // skip initial empty lines\n if (line.trim().length) {\n // trap indentation at the very first line of code\n if (/^(\\s+)/.test(line))\n content = content.replace(new RegExp('^' + RegExp.$1, 'gm'), '');\n // no indentation? all good: get out of here!\n break;\n }\n }\n return content;\n }\n};\n\n/**\n * Usable both as template literal tag or just as callback for strings, removes all spaces found\n * at the very first line of code encountered while sanitizing, keeping everything else around.\n * @param {string | TemplateStringsArray} tpl either code as string or as template, when used as tag\n * @param {...any} values the template interpolations, when used as tag\n * @returns {string} code without undesired indentation\n */\nconst codedent = (tpl, ...values) => dedent[typeof tpl](tpl, ...values);\n\nexport default codedent;\n","export default function (t) {\n for (var s = t[0], i = 1, l = arguments.length; i < l; i++)\n s += arguments[i] + t[i];\n return s;\n};\n","import dedent from 'codedent';\n\nconst { isArray } = Array;\n\nconst { assign, create, defineProperties, defineProperty, entries } = Object;\n\nconst { all, resolve } = new Proxy(Promise, {\n get: ($, name) => $[name].bind($),\n});\n\nconst absoluteURL = (path, base = location.href) => new URL(path, base).href;\n\n/* c8 ignore start */\nlet id = 0;\nconst nodeInfo = (node, type) => ({\n id: node.id || (node.id = `${type}-w${id++}`),\n tag: node.tagName\n});\n\n/**\n * Notify the main thread about element \"readiness\".\n * @param {HTMLScriptElement | HTMLElement} target the script or custom-type element\n * @param {string} type the custom/type as event prefix\n * @param {boolean} [worker = false] `true` if dispatched form a worker, `false` by default if in main\n * @param {globalThis.CustomEvent} [CustomEvent = globalThis.CustomEvent] the `CustomEvent` to use\n */\nconst dispatch = (target, type, worker = false, CE = CustomEvent) => {\n target.dispatchEvent(\n new CE(`${type}:ready`, {\n bubbles: true,\n detail: { worker },\n })\n );\n};\n/* c8 ignore stop */\n\nexport {\n dedent,\n dispatch,\n isArray,\n assign,\n create,\n defineProperties,\n defineProperty,\n entries,\n all,\n resolve,\n absoluteURL,\n nodeInfo,\n};\n","/** @param {Response} response */\nexport const getBuffer = (response) => response.arrayBuffer();\n\n/** @param {Response} response */\nexport const getJSON = (response) => response.json();\n\n/** @param {Response} response */\nexport const getText = (response) => response.text();\n","import { dedent } from '../utils.js';\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nconst workerHooks = [\n ['beforeRun', 'codeBeforeRunWorker'],\n ['beforeRunAsync', 'codeBeforeRunWorkerAsync'],\n ['afterRun', 'codeAfterRunWorker'],\n ['afterRunAsync', 'codeAfterRunWorkerAsync'],\n];\n\nexport class Hook {\n constructor(interpreter, options) {\n this.interpreter = interpreter;\n this.onWorkerReady = options.onWorkerReady;\n for (const [key, value] of workerHooks)\n this[key] = options[value]?.();\n }\n get stringHooks() {\n const hooks = {};\n for (const [key] of workerHooks) {\n if (this[key]) hooks[key] = dedent(this[key]);\n }\n return hooks;\n }\n}\n/* c8 ignore stop */\n","import * as JSON from '@ungap/structured-clone/json';\nimport coincident from 'coincident/window';\nimport xworker from './xworker.js';\nimport { assign, defineProperties, absoluteURL } from '../utils.js';\nimport { getText } from '../fetch-utils.js';\nimport { Hook } from './hooks.js';\n\n/**\n * @typedef {Object} WorkerOptions custom configuration\n * @prop {string} type the interpreter type to use\n * @prop {string} [version] the optional interpreter version to use\n * @prop {string} [config] the optional config to use within such interpreter\n */\n\nexport default (...args) =>\n /**\n * A XWorker is a Worker facade able to bootstrap a channel with any desired interpreter.\n * @param {string} url the remote file to evaluate on bootstrap\n * @param {WorkerOptions} [options] optional arguments to define the interpreter to use\n * @returns {Worker}\n */\n function XWorker(url, options) {\n const worker = xworker();\n const { postMessage } = worker;\n const isHook = this instanceof Hook;\n\n if (args.length) {\n const [type, version] = args;\n options = assign({}, options || { type, version });\n if (!options.type) options.type = type;\n }\n\n // provide a base url to fetch or load config files from a Worker\n // because there's no location at all in the Worker as it's embedded.\n // fallback to a generic, ignored, config.txt file to still provide a URL.\n const { config: c } = options;\n const config = absoluteURL(c && typeof c === 'string' ? c : './config.txt');\n\n const bootstrap = fetch(url)\n .then(getText)\n .then(code => {\n const hooks = isHook ? this.stringHooks : void 0;\n postMessage.call(worker, { options, config, code, hooks });\n });\n\n defineProperties(worker, {\n postMessage: {\n value: (data, ...rest) =>\n bootstrap.then(() =>\n postMessage.call(worker, data, ...rest),\n ),\n },\n sync: {\n value: coincident(worker, JSON).proxy,\n },\n onerror: {\n writable: true,\n configurable: true,\n value: console.error\n }\n });\n\n if (isHook) this.onWorkerReady?.(this.interpreter, worker);\n\n worker.addEventListener('message', event => {\n const { data } = event;\n if (data instanceof Error) {\n event.stopImmediatePropagation();\n worker.onerror(Object.create(event, {\n type: { value: 'error' },\n error: { value: data }\n }));\n }\n });\n\n return worker;\n };\n","/* c8 ignore next */\nexport default () => new Worker(URL.createObjectURL(new Blob([\"const e=\\\"object\\\"==typeof self?self:globalThis,t=t=>((t,r)=>{const n=(e,r)=>(t.set(r,e),e),s=o=>{if(t.has(o))return t.get(o);const[a,i]=r[o];switch(a){case 0:case-1:return n(i,o);case 1:{const e=n([],o);for(const t of i)e.push(s(t));return e}case 2:{const e=n({},o);for(const[t,r]of i)e[s(t)]=s(r);return e}case 3:return n(new Date(i),o);case 4:{const{source:e,flags:t}=i;return n(new RegExp(e,t),o)}case 5:{const e=n(new Map,o);for(const[t,r]of i)e.set(s(t),s(r));return e}case 6:{const e=n(new Set,o);for(const t of i)e.add(s(t));return e}case 7:{const{name:t,message:r}=i;return n(new e[t](r),o)}case 8:return n(BigInt(i),o);case\\\"BigInt\\\":return n(Object(BigInt(i)),o)}return n(new e[a](i),o)};return s})(new Map,t)(0),r=\\\"\\\",{toString:n}={},{keys:s}=Object,o=e=>{const t=typeof e;if(\\\"object\\\"!==t||!e)return[0,t];const s=n.call(e).slice(8,-1);switch(s){case\\\"Array\\\":return[1,r];case\\\"Object\\\":return[2,r];case\\\"Date\\\":return[3,r];case\\\"RegExp\\\":return[4,r];case\\\"Map\\\":return[5,r];case\\\"Set\\\":return[6,r]}return s.includes(\\\"Array\\\")?[1,s]:s.includes(\\\"Error\\\")?[7,s]:[2,s]},a=([e,t])=>0===e&&(\\\"function\\\"===t||\\\"symbol\\\"===t),i=(e,{json:t,lossy:r}={})=>{const n=[];return((e,t,r,n)=>{const i=(e,t)=>{const s=n.push(e)-1;return r.set(t,s),s},c=n=>{if(r.has(n))return r.get(n);let[l,u]=o(n);switch(l){case 0:{let t=n;switch(u){case\\\"bigint\\\":l=8,t=n.toString();break;case\\\"function\\\":case\\\"symbol\\\":if(e)throw new TypeError(\\\"unable to serialize \\\"+u);t=null;break;case\\\"undefined\\\":return i([-1],n)}return i([l,t],n)}case 1:{if(u)return i([u,[...n]],n);const e=[],t=i([l,e],n);for(const t of n)e.push(c(t));return t}case 2:{if(u)switch(u){case\\\"BigInt\\\":return i([u,n.toString()],n);case\\\"Boolean\\\":case\\\"Number\\\":case\\\"String\\\":return i([u,n.valueOf()],n)}if(t&&\\\"toJSON\\\"in n)return c(n.toJSON());const r=[],f=i([l,r],n);for(const t of s(n))!e&&a(o(n[t]))||r.push([c(t),c(n[t])]);return f}case 3:return i([l,n.toISOString()],n);case 4:{const{source:e,flags:t}=n;return i([l,{source:e,flags:t}],n)}case 5:{const t=[],r=i([l,t],n);for(const[r,s]of n)(e||!a(o(r))&&!a(o(s)))&&t.push([c(r),c(s)]);return r}case 6:{const t=[],r=i([l,t],n);for(const r of n)!e&&a(o(r))||t.push(c(r));return r}}const{message:f}=n;return i([l,{name:u,message:f}],n)};return c})(!(t||r),!!t,new Map,n)(e),n},{parse:c,stringify:l}=JSON,u={json:!0,lossy:!0};var f=Object.freeze({__proto__:null,parse:e=>t(c(e)),stringify:e=>l(i(e,u))});const p=\\\"3099687a-04a9-4406-a08e-fd1602cb2a81\\\",d=\\\"M\\\"+p,g=\\\"T\\\"+p;var y=e=>({value:new Promise((t=>{let r=new Worker(\\\"data:application/javascript,onmessage%3D(%7Bdata%3Ab%7D)%3D%3E(Atomics.wait(b%2C0)%2CpostMessage(0))\\\");r.onmessage=t,r.postMessage(e)}))})\\n/*! (c) Andrea Giammarchi - ISC */;const{Int32Array:h,Map:w,SharedArrayBuffer:m,Uint16Array:b}=globalThis,{BYTES_PER_ELEMENT:v}=h,{BYTES_PER_ELEMENT:S}=b,{isArray:E}=Array,{notify:P,wait:A,waitAsync:M}=Atomics,{fromCharCode:$}=String,j=(e,t)=>e?(M||y)(t,0):(A(t,0),{value:{then:e=>e()}}),k=new WeakSet,x=new WeakMap;let T=0;const _=(e,{parse:t,stringify:r,transform:n}=JSON)=>{if(!x.has(e)){const s=(t,...r)=>e.postMessage({[p]:r},{transfer:t});let o=!1;x.set(e,new Proxy(new w,{has:(e,t)=>\\\"string\\\"==typeof t&&!t.startsWith(\\\"_\\\"),get:(r,a)=>\\\"then\\\"===a?null:(...r)=>{const i=T++;let c=new h(new m(v)),l=[];k.has(r.at(-1)||l)&&k.delete(l=r.pop()),s(l,i,c,a,n?r.map(n):r);const u=e!==globalThis;let f=0;return o&&u&&(f=setTimeout(console.warn,1e3,`💀🔒 - Possible deadlock if proxy.${a}(...args) is awaited`)),j(u,c).value.then((()=>{clearTimeout(f);const e=c[0];if(!e)return;const r=S*e;return c=new h(new m(r+r%v)),s([],i,c),j(u,c).value.then((()=>t($(...new b(c.buffer).slice(0,e)))))}))},set(t,s,a){if(!t.size){const s=new w;e.addEventListener(\\\"message\\\",(async e=>{const a=e.data?.[p];if(E(a)){e.stopImmediatePropagation();const[i,c,...l]=a;if(l.length){const[e,a]=l;if(!t.has(e))throw new Error(`Unsupported action: ${e}`);o=!0;try{const o=await t.get(e)(...a);if(void 0!==o){const e=r(n?n(o):o);s.set(i,e),c[0]=e.length}}finally{o=!1}}else{const e=s.get(i);s.delete(i);for(let t=new b(c.buffer),r=0;r<e.length;r++)t[r]=e.charCodeAt(r)}P(c,0)}}))}return!!t.set(s,a)}}))}return x.get(e)};_.transfer=(...e)=>(k.add(e),e);const O=\\\"object\\\",F=\\\"function\\\",W=\\\"number\\\",R=\\\"string\\\",B=\\\"undefined\\\",J=\\\"symbol\\\",{defineProperty:C,getOwnPropertyDescriptor:I,getPrototypeOf:L,isExtensible:H,ownKeys:D,preventExtensions:N,set:U,setPrototypeOf:z}=Reflect,{assign:q,create:K}=Object,Y=L(Int8Array),G=\\\"isArray\\\",V=(e,t)=>{const{get:r,set:n,value:s}=e;return r&&(e.get=t(r)),n&&(e.set=t(n)),s&&(e.value=t(s)),e},Q=(e,t)=>[e,t],X=e=>t=>{const r=typeof t;switch(r){case O:if(null==t)return Q(\\\"null\\\",t);if(t===globalThis)return Q(O,null);case F:return e(r,t);case\\\"boolean\\\":case W:case R:case B:case\\\"bigint\\\":return Q(r,t);case J:if(Z.has(t))return Q(r,Z.get(t))}throw new Error(`Unable to handle this ${r} type`)},Z=new Map(D(Symbol).filter((e=>typeof Symbol[e]===J)).map((e=>[Symbol[e],e]))),ee=e=>{for(const[t,r]of Z)if(r===e)return t};function te(){return this}const re=\\\"apply\\\",ne=\\\"construct\\\",se=\\\"defineProperty\\\",oe=\\\"deleteProperty\\\",ae=\\\"get\\\",ie=\\\"getOwnPropertyDescriptor\\\",ce=\\\"getPrototypeOf\\\",le=\\\"has\\\",ue=\\\"isExtensible\\\",fe=\\\"ownKeys\\\",pe=\\\"preventExtensions\\\",de=\\\"set\\\",ge=\\\"setPrototypeOf\\\",ye=\\\"delete\\\";var he=((e,t)=>{const r=t&&new WeakMap;if(t){const{addEventListener:e}=EventTarget.prototype;C(EventTarget.prototype,\\\"addEventListener\\\",{value(t,n,...s){return s.at(0)?.invoke&&(r.has(this)||r.set(this,new Map),r.get(this).set(t,[].concat(s[0].invoke)),delete s[0].invoke),e.call(this,t,n,...s)}})}const n=t&&(e=>{const{currentTarget:t,target:n,type:s}=e;for(const o of r.get(t||n)?.get(s)||[])e[o]()});return(r,s,o,...a)=>{let i=0;const c=new Map,l=new Map,{[o]:u}=r,f=a.length?q(K(globalThis),...a):globalThis,p=X(((e,t)=>{if(!c.has(t)){let e;for(;l.has(e=i++););c.set(t,e),l.set(e,t)}return Q(e,c.get(t))})),d=new FinalizationRegistry((e=>{u(ye,Q(R,e))})),g=([e,r])=>{switch(e){case O:if(null==r)return f;if(typeof r===W)return l.get(r);if(!(r instanceof Y))for(const e in r)r[e]=g(r[e]);return r;case F:if(typeof r===R){if(!l.has(r)){const e=function(...e){return t&&e.at(0)instanceof Event&&n(...e),u(re,Q(F,r),p(this),e.map(p))},s=new WeakRef(e);l.set(r,s),d.register(e,r,s)}return l.get(r).deref()}return l.get(r);case J:return ee(r)}return r},y={[re]:(e,t,r)=>p(e.apply(t,r)),[ne]:(e,t)=>p(new e(...t)),[se]:(e,t,r)=>p(C(e,t,r)),[oe]:(e,t)=>p(delete e[t]),[ce]:e=>p(L(e)),[ae]:(e,t)=>p(e[t]),[ie]:(e,t)=>{const r=I(e,t);return r?Q(O,V(r,p)):Q(B,r)},[le]:(e,t)=>p(t in e),[ue]:e=>p(H(e)),[fe]:e=>Q(O,D(e).map(p)),[pe]:e=>p(N(e)),[de]:(e,t,r)=>p(U(e,t,r)),[ge]:(e,t)=>p(z(e,t)),[ye](e){c.delete(l.get(e)),l.delete(e)}};return r[s]=(e,t,...r)=>{switch(e){case re:r[0]=g(r[0]),r[1]=r[1].map(g);break;case ne:r[0]=r[0].map(g);break;case se:{const[e,t]=r;r[0]=g(e);const{get:n,set:s,value:o}=t;n&&(t.get=g(n)),s&&(t.set=g(s)),o&&(t.value=g(o));break}default:r=r.map(g)}return y[e](g(t),...r)},{proxy:r,[e.toLowerCase()]:f,[`is${e}Proxy`]:()=>!1}}})(\\\"Window\\\",!0),we=(e=>{let t=0;const r=new Map,n=new Map,s=Symbol(),o=e=>typeof e===F?e():e,a=e=>typeof e===O&&!!e&&s in e,i=Array[G],c=X(((e,a)=>{if(s in a)return o(a[s]);if(e===F){if(!n.has(a)){let e;for(;n.has(e=String(t++)););r.set(a,e),n.set(e,a)}return Q(e,r.get(a))}if(!(a instanceof Y))for(const e in a)a[e]=c(a[e]);return Q(e,a)}));return(t,l,u)=>{const{[l]:f}=t,p=new Map,d=new FinalizationRegistry((e=>{p.delete(e),f(ye,c(e))})),g=e=>{const[t,r]=e;if(!p.has(r)){const n=t===F?te.bind(e):e,s=new Proxy(n,w),o=new WeakRef(s);p.set(r,o),d.register(s,r,o)}return p.get(r).deref()},y=e=>{const[t,r]=e;switch(t){case O:return null===r?globalThis:typeof r===W?g(e):r;case F:return typeof r===R?n.get(r):g(e);case J:return ee(r)}return r},h=(e,t,...r)=>y(f(e,o(t),...r)),w={[re]:(e,t,r)=>h(re,e,c(t),r.map(c)),[ne]:(e,t)=>h(ne,e,t.map(c)),[se]:(e,t,r)=>{const{get:n,set:s,value:o}=r;return typeof n===F&&(r.get=c(n)),typeof s===F&&(r.set=c(s)),typeof o===F&&(r.value=c(o)),h(se,e,c(t),r)},[oe]:(e,t)=>h(oe,e,c(t)),[ce]:e=>h(ce,e),[ae]:(e,t)=>t===s?e:h(ae,e,c(t)),[ie]:(e,t)=>{const r=h(ie,e,c(t));return r&&V(r,y)},[le]:(e,t)=>t===s||h(le,e,c(t)),[ue]:e=>h(ue,e),[fe]:e=>h(fe,e).map(y),[pe]:e=>h(pe,e),[de]:(e,t,r)=>h(de,e,c(t),c(r)),[ge]:(e,t)=>h(ge,e,c(t))};t[u]=(e,t,s,o)=>{switch(e){case re:return y(t).apply(y(s),o.map(y));case ye:{const e=y(t);r.delete(n.get(e)),n.delete(e)}}};const m=new Proxy([O,null],w),b=m.Array[G];return C(Array,G,{value:e=>a(e)?b(e):i(e)}),{[e.toLowerCase()]:m,[`is${e}Proxy`]:a,proxy:t}}})(\\\"Window\\\"),me=\\\"function\\\"==typeof Worker?Worker:class{};const be=new WeakMap,ve=(e,...t)=>{const r=_(e,...t);if(!be.has(r)){const t=e instanceof me?he:we;be.set(r,t(r,d,g))}return be.get(r)};ve.transfer=_.transfer;const Se={object(...e){return this.string(function(e){for(var t=e[0],r=1,n=arguments.length;r<n;r++)t+=arguments[r]+e[r];return t}(...e))},string(e){for(const t of e.split(/[\\\\r\\\\n]+/))if(t.trim().length){/^(\\\\s+)/.test(t)&&(e=e.replace(new RegExp(\\\"^\\\"+RegExp.$1,\\\"gm\\\"),\\\"\\\"));break}return e}},Ee=(e,...t)=>Se[typeof e](e,...t),{isArray:Pe}=Array,{assign:Ae,create:Me,defineProperties:$e,defineProperty:je,entries:ke}=Object,{all:xe,resolve:Te}=new Proxy(Promise,{get:(e,t)=>e[t].bind(e)}),_e=(e,t=location.href)=>new URL(e,t).href,Oe=(e,t,r=!1,n=CustomEvent)=>{e.dispatchEvent(new n(`${t}:ready`,{bubbles:!0,detail:{worker:r}}))};Promise.withResolvers||(Promise.withResolvers=function(){var e,t,r=new this((function(r,n){e=r,t=n}));return{resolve:e,reject:t,promise:r}});const Fe=e=>e.arrayBuffer(),We=e=>e.json(),Re=e=>e.text(),Be=new WeakMap,Je=e=>{const t=e||console,r={stderr:(t.stderr||console.error).bind(t),stdout:(t.stdout||console.log).bind(t)};return{stderr:(...e)=>r.stderr(...e),stdout:(...e)=>r.stdout(...e),async get(e){const t=await e;return Be.set(t,r),t}}},Ce=({FS:e,PATH:t,PATH_FS:r},n,s)=>{const o=r.resolve(n);return e.mkdirTree(t.dirname(o)),e.writeFile(o,new Uint8Array(s),{canOwn:!0})},Ie=e=>{const t=e.split(\\\"/\\\");return t.pop(),t.join(\\\"/\\\")},Le=(e,t)=>{const r=[];for(const n of t.split(\\\"/\\\"))\\\".\\\"!==n&&(r.push(n),n&&e.mkdir(r.join(\\\"/\\\")))},He=(e,t)=>{const r=[];for(const e of t.split(\\\"/\\\"))switch(e){case\\\"\\\":case\\\".\\\":break;case\\\"..\\\":r.pop();break;default:r.push(e)}return[e.cwd()].concat(r).join(\\\"/\\\").replace(/^\\\\/+/,\\\"/\\\")},De=e=>{const t=e.map((e=>e.trim().replace(/(^[/]*|[/]*$)/g,\\\"\\\"))).filter((e=>\\\"\\\"!==e&&\\\".\\\"!==e)).join(\\\"/\\\");return e[0].startsWith(\\\"/\\\")?`/${t}`:t},Ne=new WeakMap,Ue=(e,t,r)=>xe((e=>{for(const{files:t,to_file:r,from:n=\\\"\\\"}of e){if(void 0!==t&&void 0!==r)throw new Error(\\\"Cannot use 'to_file' and 'files' parameters together!\\\");if(void 0===t&&void 0===r&&n.endsWith(\\\"/\\\"))throw new Error(`Couldn't determine the filename from the path ${n}, please supply 'to_file' parameter.`)}return e.flatMap((({from:e=\\\"\\\",to_folder:t=\\\".\\\",to_file:r,files:n})=>{if(Pe(n))return n.map((r=>({url:De([e,r]),path:De([t,r])})));const s=r||e.slice(1+e.lastIndexOf(\\\"/\\\"));return[{url:e,path:De([t,s])}]}))})(r).map((({url:n,path:s})=>((e,t)=>fetch(_e(t,Ne.get(e))))(r,n).then(Fe).then((r=>e.writeFile(t,s,r)))))),ze=(e,t,r)=>{e.registerJsModule(t,r)},qe=(e,t,...r)=>{try{return e.runPython(Ee(t),...r)}catch(t){Be.get(e).stderr(t)}},Ke=async(e,t,...r)=>{try{return await e.runPythonAsync(Ee(t),...r)}catch(t){Be.get(e).stderr(t)}},Ye=async(e,t,r)=>{const[n,...s]=t.split(\\\".\\\");let o,a=e.globals.get(n);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,r)}catch(t){Be.get(e).stderr(t)}};var Ge={type:\\\"micropython\\\",module:(e=\\\"1.20.0-297\\\")=>`https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${e}/micropython.mjs`,async engine({loadMicroPython:e},t,r){const{stderr:n,stdout:s,get:o}=Je();r=r.replace(/\\\\.m?js$/,\\\".wasm\\\");const a=await o(e({stderr:n,stdout:s,url:r}));return t.fetch&&await Ue(this,a,t.fetch),a},registerJSModule:ze,run:qe,runAsync:Ke,runEvent:Ye,transform:(e,t)=>t,writeFile:({FS:e,_module:{PATH:t,PATH_FS:r}},n,s)=>Ce({FS:e,PATH:t,PATH_FS:r},n,s)};const Ve={dict_converter:Object.fromEntries};var Qe={type:\\\"pyodide\\\",module:(e=\\\"0.23.4\\\")=>`https://cdn.jsdelivr.net/pyodide/v${e}/full/pyodide.mjs`,async engine({loadPyodide:e},t,r){const{stderr:n,stdout:s,get:o}=Je(),a=r.slice(0,r.lastIndexOf(\\\"/\\\")),i=await o(e({stderr:n,stdout:s,indexURL:a}));if(t.fetch&&await Ue(this,i,t.fetch),t.packages){await i.loadPackage(\\\"micropip\\\");const e=await i.pyimport(\\\"micropip\\\");await e.install(t.packages),e.destroy()}return i},registerJSModule:ze,run:qe,runAsync:Ke,runEvent:Ye,transform:(e,t)=>t instanceof e.ffi.PyProxy?t.toJs(Ve):t,writeFile:({FS:e,PATH:t,_module:{PATH_FS:r}},n,s)=>Ce({FS:e,PATH:t,PATH_FS:r},n,s)};const Xe=\\\"ruby-wasm-wasi\\\",Ze=Xe.replace(/\\\\W+/g,\\\"_\\\");var et={type:Xe,experimental:!0,module:(e=\\\"2.0.0\\\")=>`https://cdn.jsdelivr.net/npm/ruby-3_2-wasm-wasi@${e}/dist/browser.esm.js`,async engine({DefaultRubyVM:e},t,r){const n=await fetch(`${r.slice(0,r.lastIndexOf(\\\"/\\\"))}/ruby.wasm`),s=await WebAssembly.compile(await n.arrayBuffer()),{vm:o}=await e(s);return t.fetch&&await Ue(this,o,t.fetch),o},registerJSModule(e,t,r){const n=`__module_${Ze}_${t}`;globalThis[n]=r,this.run(e,`require \\\"js\\\";$${t}=JS.global[:${n}]`),delete globalThis[n]},run:(e,t,...r)=>e.eval(Ee(t),...r),runAsync:(e,t,...r)=>e.evalAsync(Ee(t),...r),async runEvent(e,t,r){if(/^xworker\\\\.(on\\\\w+)$/.test(t)){const{$1:t}=RegExp,n=`__module_${Ze}_event`;globalThis[n]=r,this.run(e,`require \\\"js\\\";$xworker.call(\\\"${t}\\\",JS.global[:${n}])`),delete globalThis[n]}else{const n=this.run(e,`method(:${t})`);await n.call(t,e.wrap(r))}},transform:(e,t)=>t,writeFile:()=>{throw new Error(`writeFile is not supported in ${Xe}`)}};var tt={type:\\\"wasmoon\\\",module:(e=\\\"1.15.0\\\")=>`https://cdn.jsdelivr.net/npm/wasmoon@${e}/+esm`,async engine({LuaFactory:e,LuaLibraries:t},r){const{stderr:n,stdout:s,get:o}=Je(),a=await o((new e).createEngine());return a.global.getTable(t.Base,(e=>{a.global.setField(e,\\\"print\\\",s),a.global.setField(e,\\\"printErr\\\",n)})),r.fetch&&await Ue(this,a,r.fetch),a},registerJSModule:(e,t,r)=>{e.global.set(t,r)},run:(e,t,...r)=>{try{return e.doStringSync(Ee(t),...r)}catch(t){Be.get(e).stderr(t)}},runAsync:async(e,t,...r)=>{try{return await e.doString(Ee(t),...r)}catch(t){Be.get(e).stderr(t)}},runEvent:async(e,t,r)=>{const[n,...s]=t.split(\\\".\\\");let o,a=e.global.get(n);for(const e of s)[o,a]=[a,a[e]];try{await a.call(o,r)}catch(t){Be.get(e).stderr(t)}},transform:(e,t)=>t,writeFile:({cmodule:{module:{FS:e}}},t,r)=>((e,t,r)=>(Le(e,Ie(t)),t=He(e,t),e.writeFile(t,new Uint8Array(r),{canOwn:!0})))(e,t,r)};const rt=new Map,nt=new Map,st=new Proxy(new Map,{get(e,t){if(!e.has(t)){const[r,...n]=t.split(\\\"@\\\"),s=rt.get(r),o=/^https?:\\\\/\\\\//i.test(n)?n.join(\\\"@\\\"):s.module(...n);e.set(t,{url:o,module:import(o),engine:s.engine.bind(s)})}const{url:r,module:n,engine:s}=e.get(t);return(e,o)=>n.then((n=>{nt.set(t,e);const a=e?.fetch;return a&&Ne.set(a,o),s(n,e,r)}))}}),ot=e=>{for(const t of[].concat(e.type))rt.set(t,e)};for(const e of[Ge,Qe,et,tt])ot(e);const at=async e=>(await import(\\\"https://cdn.jsdelivr.net/npm/basic-toml@0.3.1/es.js\\\")).parse(e);try{new SharedArrayBuffer(4)}catch(e){throw new Error([\\\"Unable to use SharedArrayBuffer due insecure environment.\\\",\\\"Please read requirements in MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer#security_requirements\\\"].join(\\\"\\\\n\\\"))}let it,ct,lt;const ut=(e,t)=>{addEventListener(e,t||(async t=>{try{await it,ct(`xworker.on${e}`,t)}catch(e){postMessage(e)}}),!!t&&{once:!0})},{parse:ft,stringify:pt}=f,{proxy:dt,window:gt,isWindowProxy:yt}=ve(self,{parse:ft,stringify:pt,transform:e=>lt?lt(e):e}),ht={sync:dt,window:gt,isWindowProxy:yt,onmessage:console.info,onerror:console.error,onmessageerror:console.warn,postMessage:postMessage.bind(self)};ut(\\\"message\\\",(({data:{options:e,config:t,code:r,hooks:n}})=>{it=(async()=>{try{const{id:s,tag:o,type:a,custom:i,version:c,config:l,async:u}=e,f=await((e,t,r={})=>{if(t)if(t.endsWith(\\\".json\\\"))r=fetch(t).then(We),t=_e(t);else if(t.endsWith(\\\".toml\\\"))r=fetch(t).then(Re).then(at),t=_e(t);else if(!t.endsWith(\\\".txt\\\")){try{r=JSON.parse(t)}catch(e){r=at(t)}t=_e(\\\"./config.txt\\\")}return Te(r).then((r=>st[e](r,t)))})(((e,t=\\\"\\\")=>`${e}@${t}`.replace(/@$/,\\\"\\\"))(a,c),t,l),p=Me(rt.get(a)),d=\\\"run\\\"+(u?\\\"Async\\\":\\\"\\\");if(n){const{beforeRun:e,beforeRunAsync:t,afterRun:r,afterRunAsync:s}=n,o=r||s,a=e||t;if(o){const e=p[d].bind(p);p[d]=(t,r,...n)=>e(t,`${r}\\\\n${o}`,...n)}if(a){const e=p[d].bind(p);p[d]=(t,r,...n)=>e(t,`${a}\\\\n${r}`,...n)}}const{CustomEvent:g,document:y}=gt,h=s&&y.getElementById(s)||null;let w=\\\"\\\";return p.registerJSModule(f,\\\"polyscript\\\",{xworker:ht,get target(){return!w&&h&&(\\\"SCRIPT\\\"===o?h.after(Ae(y.createElement(`script-${i||a}`),{id:w=`${s}-target`})):(w=s,h.replaceChildren(),h.style.display=\\\"block\\\")),w}}),ct=p.runEvent.bind(p,f),lt=p.transform.bind(p,f),h&&Oe(h,i||a,!0,g),await p[d](f,r),f}catch(e){postMessage(e)}})(),ut(\\\"error\\\"),ut(\\\"message\\\"),ut(\\\"messageerror\\\")}));\\n\"],{type:'application/javascript'})),{type:'module'});","import { dedent } from '../utils.js';\n\n/* c8 ignore start */ // tested via integration\nexport default element => {\n const { worker } = element.attributes;\n if (worker) {\n let { value } = worker;\n if (!value) {\n if (!element.childElementCount)\n value = element.textContent;\n else {\n const { innerHTML, localName, type } = element;\n const name = type || localName.replace(/-script$/, '');\n console.warn(\n `Deprecated: use <script type=\"${name}\"> for an always safe content parsing:\\n`,\n innerHTML,\n );\n value = innerHTML;\n }\n\n const url = URL.createObjectURL(new Blob([dedent(value)], { type: 'text/plain' }));\n // TODO: should we really clean up this? debugging non-existent resources\n // at distance might be very problematic if the url is revoked.\n // setTimeout(URL.revokeObjectURL, 5000, url);\n return url;\n }\n return value;\n }\n};\n/* c8 ignore stop */\n","import '@ungap/with-resolvers';\n\nimport { getBuffer } from '../fetch-utils.js';\nimport { absoluteURL } from '../utils.js';\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nexport const io = new WeakMap();\nexport const stdio = (init) => {\n const context = init || console;\n const localIO = {\n stderr: (context.stderr || console.error).bind(context),\n stdout: (context.stdout || console.log).bind(context),\n };\n return {\n stderr: (...args) => localIO.stderr(...args),\n stdout: (...args) => localIO.stdout(...args),\n async get(engine) {\n const interpreter = await engine;\n io.set(interpreter, localIO);\n return interpreter;\n },\n };\n};\n\n// This should be the only helper needed for all Emscripten based FS exports\nexport const writeFile = ({ FS, PATH, PATH_FS }, path, buffer) => {\n const absPath = PATH_FS.resolve(path);\n FS.mkdirTree(PATH.dirname(absPath));\n return FS.writeFile(absPath, new Uint8Array(buffer), {\n canOwn: true,\n });\n};\n/* c8 ignore stop */\n\n// This is instead a fallback for Lua or others\nexport const writeFileShim = (FS, path, buffer) => {\n mkdirTree(FS, dirname(path));\n path = resolve(FS, path);\n return FS.writeFile(path, new Uint8Array(buffer), { canOwn: true });\n};\n\nconst dirname = (path) => {\n const tree = path.split('/');\n tree.pop();\n return tree.join('/');\n};\n\nconst mkdirTree = (FS, path) => {\n const current = [];\n for (const branch of path.split('/')) {\n if (branch === '.') continue;\n current.push(branch);\n if (branch) FS.mkdir(current.join('/'));\n }\n};\n\nconst resolve = (FS, path) => {\n const tree = [];\n for (const branch of path.split('/')) {\n switch (branch) {\n case '':\n break;\n case '.':\n break;\n case '..':\n tree.pop();\n break;\n default:\n tree.push(branch);\n }\n }\n return [FS.cwd()].concat(tree).join('/').replace(/^\\/+/, '/');\n};\n\nimport { all, isArray } from '../utils.js';\n\nconst calculateFetchPaths = (config_fetch) => {\n // REQUIRES INTEGRATION TEST\n /* c8 ignore start */\n for (const { files, to_file, from = '' } of config_fetch) {\n if (files !== undefined && to_file !== undefined)\n throw new Error(\n 'Cannot use \\'to_file\\' and \\'files\\' parameters together!',\n );\n if (files === undefined && to_file === undefined && from.endsWith('/'))\n throw new Error(\n `Couldn't determine the filename from the path ${from}, please supply 'to_file' parameter.`,\n );\n }\n /* c8 ignore stop */\n return config_fetch.flatMap(\n ({ from = '', to_folder = '.', to_file, files }) => {\n if (isArray(files))\n return files.map((file) => ({\n url: joinPaths([from, file]),\n path: joinPaths([to_folder, file]),\n }));\n const filename = to_file || from.slice(1 + from.lastIndexOf('/'));\n return [{ url: from, path: joinPaths([to_folder, filename]) }];\n },\n );\n};\n\nconst joinPaths = (parts) => {\n const res = parts\n .map((part) => part.trim().replace(/(^[/]*|[/]*$)/g, ''))\n .filter((p) => p !== '' && p !== '.')\n .join('/');\n\n return parts[0].startsWith('/') ? `/${res}` : res;\n};\n\nconst fetchResolved = (config_fetch, url) =>\n fetch(absoluteURL(url, base.get(config_fetch)));\n\nexport const base = new WeakMap();\n\nexport const fetchPaths = (module, interpreter, config_fetch) =>\n all(\n calculateFetchPaths(config_fetch).map(({ url, path }) =>\n fetchResolved(config_fetch, url)\n .then(getBuffer)\n .then((buffer) => module.writeFile(interpreter, path, buffer)),\n ),\n );\n/* c8 ignore stop */\n","import { dedent } from '../utils.js';\nimport { io } from './_utils.js';\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nexport const registerJSModule = (interpreter, name, value) => {\n interpreter.registerJsModule(name, value);\n};\n\nexport const run = (interpreter, code, ...args) => {\n try {\n return interpreter.runPython(dedent(code), ...args);\n }\n catch (error) {\n io.get(interpreter).stderr(error);\n }\n};\n\nexport const runAsync = async (interpreter, code, ...args) => {\n try {\n return await interpreter.runPythonAsync(dedent(code), ...args);\n }\n catch (error) {\n io.get(interpreter).stderr(error);\n }\n};\n\nexport const runEvent = async (interpreter, code, event) => {\n // allows method(event) as well as namespace.method(event)\n // it does not allow fancy brackets names for now\n const [name, ...keys] = code.split('.');\n let target = interpreter.globals.get(name);\n let context;\n for (const key of keys) [context, target] = [target, target[key]];\n try {\n await target.call(context, event);\n }\n catch (error) {\n io.get(interpreter).stderr(error);\n }\n};\n/* c8 ignore stop */\n","import { fetchPaths, stdio, writeFile } from './_utils.js';\nimport { registerJSModule, run, runAsync, runEvent } from './_python.js';\n\nconst type = 'micropython';\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nexport default {\n type,\n module: (version = '1.20.0-297') =>\n `https://cdn.jsdelivr.net/npm/@micropython/micropython-webassembly-pyscript@${version}/micropython.mjs`,\n async engine({ loadMicroPython }, config, url) {\n const { stderr, stdout, get } = stdio();\n url = url.replace(/\\.m?js$/, '.wasm');\n const interpreter = await get(loadMicroPython({ stderr, stdout, url }));\n if (config.fetch) await fetchPaths(this, interpreter, config.fetch);\n return interpreter;\n },\n registerJSModule,\n run,\n runAsync,\n runEvent,\n transform: (_, value) => value,\n writeFile: ({ FS, _module: { PATH, PATH_FS } }, path, buffer) =>\n writeFile({ FS, PATH, PATH_FS }, path, buffer),\n};\n/* c8 ignore stop */\n","import { fetchPaths, stdio, writeFile } from './_utils.js';\nimport { registerJSModule, run, runAsync, runEvent } from './_python.js';\n\nconst type = 'pyodide';\nconst toJsOptions = { dict_converter: Object.fromEntries };\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nexport default {\n type,\n module: (version = '0.23.4') =>\n `https://cdn.jsdelivr.net/pyodide/v${version}/full/pyodide.mjs`,\n async engine({ loadPyodide }, config, url) {\n const { stderr, stdout, get } = stdio();\n const indexURL = url.slice(0, url.lastIndexOf('/'));\n const interpreter = await get(\n loadPyodide({ stderr, stdout, indexURL }),\n );\n if (config.fetch) await fetchPaths(this, interpreter, config.fetch);\n if (config.packages) {\n await interpreter.loadPackage('micropip');\n const micropip = await interpreter.pyimport('micropip');\n await micropip.install(config.packages);\n micropip.destroy();\n }\n return interpreter;\n },\n registerJSModule,\n run,\n runAsync,\n runEvent,\n transform: (interpreter, value) => (\n value instanceof interpreter.ffi.PyProxy ?\n value.toJs(toJsOptions) :\n value\n ),\n writeFile: ({ FS, PATH, _module: { PATH_FS } }, path, buffer) =>\n writeFile({ FS, PATH, PATH_FS }, path, buffer),\n};\n/* c8 ignore stop */\n","import { dedent } from '../utils.js';\nimport { fetchPaths } from './_utils.js';\n\nconst type = 'ruby-wasm-wasi';\nconst jsType = type.replace(/\\W+/g, '_');\n\n// MISSING:\n// * there is no VFS apparently or I couldn't reach any\n// * I've no idea how to override the stderr and stdout\n// * I've no idea how to import packages\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nexport default {\n type,\n experimental: true,\n module: (version = '2.0.0') =>\n `https://cdn.jsdelivr.net/npm/ruby-3_2-wasm-wasi@${version}/dist/browser.esm.js`,\n async engine({ DefaultRubyVM }, config, url) {\n const response = await fetch(\n `${url.slice(0, url.lastIndexOf('/'))}/ruby.wasm`,\n );\n const module = await WebAssembly.compile(await response.arrayBuffer());\n const { vm: interpreter } = await DefaultRubyVM(module);\n if (config.fetch) await fetchPaths(this, interpreter, config.fetch);\n return interpreter;\n },\n // Fallback to globally defined module fields (i.e. $xworker)\n registerJSModule(interpreter, name, value) {\n const id = `__module_${jsType}_${name}`;\n globalThis[id] = value;\n this.run(interpreter, `require \"js\";$${name}=JS.global[:${id}]`);\n delete globalThis[id];\n },\n run: (interpreter, code, ...args) => interpreter.eval(dedent(code), ...args),\n runAsync: (interpreter, code, ...args) => interpreter.evalAsync(dedent(code), ...args),\n async runEvent(interpreter, code, event) {\n // patch common xworker.onmessage/onerror cases\n if (/^xworker\\.(on\\w+)$/.test(code)) {\n const { $1: name } = RegExp;\n const id = `__module_${jsType}_event`;\n globalThis[id] = event;\n this.run(\n interpreter,\n `require \"js\";$xworker.call(\"${name}\",JS.global[:${id}])`,\n );\n delete globalThis[id];\n } else {\n // Experimental: allows only events by fully qualified method name\n const method = this.run(interpreter, `method(:${code})`);\n await method.call(code, interpreter.wrap(event));\n }\n },\n transform: (_, value) => value,\n writeFile: () => {\n throw new Error(`writeFile is not supported in ${type}`);\n },\n};\n/* c8 ignore stop */\n","import { dedent } from '../utils.js';\nimport { fetchPaths, io, stdio, writeFileShim } from './_utils.js';\n\nconst type = 'wasmoon';\n\n// MISSING:\n// * I've no idea how to import packages\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\nexport default {\n type,\n module: (version = '1.15.0') =>\n `https://cdn.jsdelivr.net/npm/wasmoon@${version}/+esm`,\n async engine({ LuaFactory, LuaLibraries }, config) {\n const { stderr, stdout, get } = stdio();\n const interpreter = await get(new LuaFactory().createEngine());\n interpreter.global.getTable(LuaLibraries.Base, (index) => {\n interpreter.global.setField(index, 'print', stdout);\n interpreter.global.setField(index, 'printErr', stderr);\n });\n if (config.fetch) await fetchPaths(this, interpreter, config.fetch);\n return interpreter;\n },\n // Fallback to globally defined module fields\n registerJSModule: (interpreter, name, value) => {\n interpreter.global.set(name, value);\n },\n run: (interpreter, code, ...args) => {\n try {\n return interpreter.doStringSync(dedent(code), ...args);\n }\n catch (error) {\n io.get(interpreter).stderr(error);\n }\n },\n runAsync: async (interpreter, code, ...args) => {\n try {\n return await interpreter.doString(dedent(code), ...args);\n }\n catch (error) {\n io.get(interpreter).stderr(error);\n }\n },\n runEvent: async (interpreter, code, event) => {\n // allows method(event) as well as namespace.method(event)\n // it does not allow fancy brackets names for now\n const [name, ...keys] = code.split('.');\n let target = interpreter.global.get(name);\n let context;\n for (const key of keys) [context, target] = [target, target[key]];\n try {\n await target.call(context, event);\n }\n catch (error) {\n io.get(interpreter).stderr(error);\n }\n },\n transform: (_, value) => value,\n writeFile: (\n {\n cmodule: {\n module: { FS },\n },\n },\n path,\n buffer,\n ) => writeFileShim(FS, path, buffer),\n};\n/* c8 ignore stop */\n","// ⚠️ Part of this file is automatically generated\n// The :RUNTIMES comment is a delimiter and no code should be written/changed after\n// See rollup/build_interpreters.cjs to know more\n\nimport { base } from './interpreter/_utils.js';\n\n/** @type {Map<string, object>} */\nexport const registry = new Map();\n\n/** @type {Map<string, object>} */\nexport const configs = new Map();\n\n/** @type {string[]} */\nexport const selectors = [];\n\n/** @type {string[]} */\nexport const prefixes = [];\n\nexport const interpreter = new Proxy(new Map(), {\n get(map, id) {\n if (!map.has(id)) {\n const [type, ...rest] = id.split('@');\n const interpreter = registry.get(type);\n const url = /^https?:\\/\\//i.test(rest)\n ? rest.join('@')\n : interpreter.module(...rest);\n map.set(id, {\n url,\n module: import(/* webpackIgnore: true */url),\n engine: interpreter.engine.bind(interpreter),\n });\n }\n const { url, module, engine } = map.get(id);\n return (config, baseURL) =>\n module.then((module) => {\n configs.set(id, config);\n const fetch = config?.fetch;\n if (fetch) base.set(fetch, baseURL);\n return engine(module, config, url);\n });\n },\n});\n\nconst register = (interpreter) => {\n for (const type of [].concat(interpreter.type)) {\n registry.set(type, interpreter);\n selectors.push(`script[type=\"${type}\"]`);\n prefixes.push(`${type}-`);\n }\n};\n\n//:RUNTIMES\nimport micropython from './interpreter/micropython.js';\nimport pyodide from './interpreter/pyodide.js';\nimport ruby_wasm_wasi from './interpreter/ruby-wasm-wasi.js';\nimport wasmoon from './interpreter/wasmoon.js';\nfor (const interpreter of [micropython, pyodide, ruby_wasm_wasi, wasmoon])\n register(interpreter);\n","// lazy TOML parser (fast-toml might be a better alternative)\nconst TOML_LIB = 'https://cdn.jsdelivr.net/npm/basic-toml@0.3.1/es.js';\n\n/**\n * @param {string} text TOML text to parse\n * @returns {object} the resulting JS object\n */\nexport const parse = async (text) => (await import(/* webpackIgnore: true */TOML_LIB)).parse(text);\n","import { interpreter } from './interpreters.js';\nimport { absoluteURL, resolve } from './utils.js';\nimport { parse } from './toml.js';\nimport { getJSON, getText } from './fetch-utils.js';\n\n/**\n * Parse a generic config if it came from an attribute either as URL\n * or as a serialized string. In XWorker case, accepts a pre-defined\n * options to use as it is to avoid needing at all a fetch operation.\n * In latter case, config will be suffixed as `config.txt`.\n * @param {string} id the interpreter name @ version identifier\n * @param {string} [config] optional config file to parse\n * @param {object} [options] optional options used to bootstrap XWorker\n * @returns\n */\nexport const getRuntime = (id, config, options = {}) => {\n if (config) {\n // REQUIRES INTEGRATION TEST\n /* c8 ignore start */\n if (config.endsWith('.json')) {\n options = fetch(config).then(getJSON);\n config = absoluteURL(config);\n } else if (config.endsWith('.toml')) {\n options = fetch(config).then(getText).then(parse);\n config = absoluteURL(config);\n } else if (!config.endsWith('.txt')) {\n try {\n options = JSON.parse(config);\n } catch (_) {\n options = parse(config);\n }\n // make the config a URL to be able to retrieve relative paths from it\n config = absoluteURL('./config.txt');\n }\n /* c8 ignore stop */\n }\n return resolve(options).then(options => interpreter[id](options, config));\n};\n\n/**\n * @param {string} type the interpreter type\n * @param {string} [version] the optional interpreter version\n * @returns\n */\nexport const getRuntimeID = (type, version = '') =>\n `${type}@${version}`.replace(/@$/, '');\n","import { $ } from 'basic-devtools';\n\nimport $xworker from './worker/class.js';\nimport workerURL from './worker/url.js';\nimport { getRuntime, getRuntimeID } from './loader.js';\nimport { registry } from './interpreters.js';\nimport { all, dispatch, resolve, defineProperty, nodeInfo } from './utils.js';\nimport { getText } from './fetch-utils.js';\n\nconst getRoot = (script) => {\n let parent = script;\n while (parent.parentNode) parent = parent.parentNode;\n return parent;\n};\n\nexport const queryTarget = (script, idOrSelector) => {\n const root = getRoot(script);\n return root.getElementById(idOrSelector) || $(idOrSelector, root);\n};\n\nconst targets = new WeakMap();\nconst targetDescriptor = {\n get() {\n let target = targets.get(this);\n if (!target) {\n target = document.createElement(`${this.type}-script`);\n targets.set(this, target);\n handle(this);\n }\n return target;\n },\n set(target) {\n if (typeof target === 'string')\n targets.set(this, queryTarget(this, target));\n else {\n targets.set(this, target);\n handle(this);\n }\n },\n};\n\nconst handled = new WeakMap();\n\nexport const interpreters = new Map();\n\nconst execute = async (script, source, XWorker, isAsync) => {\n const { type } = script;\n const module = registry.get(type);\n /* c8 ignore start */\n if (module.experimental)\n console.warn(`The ${type} interpreter is experimental`);\n const [interpreter, content] = await all([\n handled.get(script).interpreter,\n source,\n ]);\n try {\n // temporarily override inherited document.currentScript in a non writable way\n // but it deletes it right after to preserve native behavior (as it's sync: no trouble)\n defineProperty(document, 'currentScript', {\n configurable: true,\n get: () => script,\n });\n module.registerJSModule(interpreter, 'polyscript', { XWorker });\n dispatch(script, type);\n return module[isAsync ? 'runAsync' : 'run'](interpreter, content);\n } finally {\n delete document.currentScript;\n }\n /* c8 ignore stop */\n};\n\nconst getValue = (ref, prefix) => {\n const value = ref?.value;\n return value ? prefix + value : '';\n};\n\nexport const getDetails = (type, id, name, version, config, runtime = type) => {\n if (!interpreters.has(id)) {\n const details = {\n interpreter: getRuntime(name, config),\n queue: resolve(),\n XWorker: $xworker(type, version),\n };\n interpreters.set(id, details);\n // enable sane defaults when single interpreter *of kind* is used in the page\n // this allows `xxx-*` attributes to refer to such interpreter without `env` around\n /* c8 ignore start *//* this is tested very well in PyScript */\n if (!interpreters.has(type)) interpreters.set(type, details);\n if (!interpreters.has(runtime)) interpreters.set(runtime, details);\n /* c8 ignore stopt */\n }\n return interpreters.get(id);\n};\n\n/**\n * @param {HTMLScriptElement} script a special type of <script>\n */\nexport const handle = async (script) => {\n // known node, move its companion target after\n // vDOM or other use cases where the script is a tracked element\n if (handled.has(script)) {\n const { target } = script;\n if (target) {\n // if the script is in the head just append target to the body\n if (script.closest('head')) document.body.append(target);\n // in any other case preserve the script position\n else script.after(target);\n }\n }\n // new script to handle ... allow newly created scripts to work\n // just exactly like any other script would\n else {\n // allow a shared config among scripts, beside interpreter,\n // and/or source code with different config or interpreter\n const {\n attributes: { async: isAsync, config, env, target, version },\n src,\n type,\n } = script;\n\n const versionValue = version?.value;\n const name = getRuntimeID(type, versionValue);\n let configValue = getValue(config, '|');\n const id = getValue(env, '') || `${name}${configValue}`;\n configValue = configValue.slice(1);\n\n /* c8 ignore start */\n const url = workerURL(script);\n if (url) {\n const XWorker = $xworker(type, versionValue);\n const xworker = new XWorker(url, {\n ...nodeInfo(script, type),\n async: !!isAsync,\n config: configValue\n });\n handled.set(\n defineProperty(script, 'xworker', { value: xworker }),\n { xworker }\n );\n return;\n }\n /* c8 ignore stop */\n\n const targetValue = getValue(target, '');\n const details = getDetails(type, id, name, versionValue, configValue);\n\n handled.set(\n defineProperty(script, 'target', targetDescriptor),\n details,\n );\n\n if (targetValue) targets.set(script, queryTarget(script, targetValue));\n\n // start fetching external resources ASAP\n const source = src ? fetch(src).then(getText) : script.textContent;\n details.queue = details.queue.then(() =>\n execute(script, source, details.XWorker, !!isAsync),\n );\n }\n};\n","import { $x } from 'basic-devtools';\n\nimport { interpreters } from './script-handler.js';\nimport { all, create } from './utils.js';\nimport { registry, prefixes } from './interpreters.js';\n\nexport const env = new Proxy(create(null), {\n get: (_, name) => awaitInterpreter(name),\n});\n\n/* c8 ignore start */ // attributes are tested via integration / e2e\n// ensure both interpreter and its queue are awaited then returns the interpreter\nconst awaitInterpreter = async (key) => {\n if (interpreters.has(key)) {\n const { interpreter, queue } = interpreters.get(key);\n return (await all([interpreter, queue]))[0];\n }\n\n const available = interpreters.size\n ? `Available interpreters are: ${[...interpreters.keys()]\n .map((r) => `\"${r}\"`)\n .join(', ')}.`\n : 'There are no interpreters in this page.';\n\n throw new Error(`The interpreter \"${key}\" was not found. ${available}`);\n};\n\nexport const listener = async (event) => {\n const { type, currentTarget } = event;\n for (let { name, value, ownerElement: el } of $x(\n `./@*[${prefixes.map((p) => `name()=\"${p}${type}\"`).join(' or ')}]`,\n currentTarget,\n )) {\n name = name.slice(0, -(type.length + 1));\n const interpreter = await awaitInterpreter(\n el.getAttribute(`${name}-env`) || name,\n );\n const handler = registry.get(name);\n handler.runEvent(interpreter, value, event);\n }\n};\n\n/**\n * Look for known prefixes and add related listeners.\n * @param {Document | Element} root\n */\nexport const addAllListeners = (root) => {\n for (let { name, ownerElement: el } of $x(\n `.//@*[${prefixes\n .map((p) => `starts-with(name(),\"${p}\")`)\n .join(' or ')}]`,\n root,\n )) {\n name = name.slice(name.lastIndexOf('-') + 1);\n if (name !== 'env') el.addEventListener(name, listener);\n }\n};\n/* c8 ignore stop */\n","import '@ungap/with-resolvers';\nimport { $$ } from 'basic-devtools';\n\nimport { assign, create, defineProperty, nodeInfo } from './utils.js';\nimport { getDetails } from './script-handler.js';\nimport { registry as defaultRegistry, prefixes, configs } from './interpreters.js';\nimport { getRuntimeID } from './loader.js';\nimport { io } from './interpreter/_utils.js';\nimport { addAllListeners } from './listeners.js';\nimport { Hook } from './worker/hooks.js';\nimport workerURL from './worker/url.js';\nimport { XWorker } from './index.js';\n\nexport const CUSTOM_SELECTORS = [];\n\n/**\n * @typedef {Object} Runtime custom configuration\n * @prop {object} interpreter the bootstrapped interpreter\n * @prop {(url:string, options?: object) => Worker} XWorker an XWorker constructor that defaults to same interpreter on the Worker.\n * @prop {object} config a cloned config used to bootstrap the interpreter\n * @prop {(code:string) => any} run an utility to run code within the interpreter\n * @prop {(code:string) => Promise<any>} runAsync an utility to run code asynchronously within the interpreter\n * @prop {(path:string, data:ArrayBuffer) => void} writeFile an utility to write a file in the virtual FS, if available\n */\n\nconst types = new Map();\nconst waitList = new Map();\n\n// REQUIRES INTEGRATION TEST\n/* c8 ignore start */\n/**\n * @param {Element} node any DOM element registered via define.\n */\nexport const handleCustomType = (node) => {\n for (const selector of CUSTOM_SELECTORS) {\n if (node.matches(selector)) {\n const type = types.get(selector);\n const { resolve } = waitList.get(type);\n const { options, known } = registry.get(type);\n if (!known.has(node)) {\n known.add(node);\n const {\n interpreter: runtime,\n config,\n version,\n env,\n onInterpreterReady,\n } = options;\n\n const worker = workerURL(node);\n if (worker) {\n const xworker = XWorker.call(new Hook(null, options), worker, {\n ...nodeInfo(node, type),\n version,\n type: runtime,\n custom: type,\n config: config || {},\n async: node.hasAttribute('async')\n });\n defineProperty(node, 'xworker', { value: xworker });\n resolve({ type, xworker });\n return;\n }\n\n const name = getRuntimeID(runtime, version);\n const id = env || `${name}${config ? `|${config}` : ''}`;\n const { interpreter: engine, XWorker: Worker } = getDetails(\n type,\n id,\n name,\n version,\n config,\n runtime\n );\n engine.then((interpreter) => {\n const module = create(defaultRegistry.get(runtime));\n\n const {\n onBeforeRun,\n onBeforeRunAsync,\n onAfterRun,\n onAfterRunAsync,\n } = options;\n\n const hooks = new Hook(interpreter, options);\n\n const XWorker = function XWorker(...args) {\n return Worker.apply(hooks, args);\n };\n\n // These two loops mimic a `new Map(arrayContent)` without needing\n // the new Map overhead so that [name, [before, after]] can be easily destructured\n // and new sync or async patches become easy to add (when the logic is the same).\n\n // patch sync\n for (const [name, [before, after]] of [\n ['run', [onBeforeRun, onAfterRun]],\n ]) {\n const method = module[name];\n module[name] = function (interpreter, code, ...args) {\n if (before) before.call(this, resolved, node);\n const result = method.call(this, interpreter, code, ...args);\n if (after) after.call(this, resolved, node);\n return result;\n };\n }\n\n // patch async\n for (const [name, [before, after]] of [\n ['runAsync', [onBeforeRunAsync, onAfterRunAsync]],\n ]) {\n const method = module[name];\n module[name] = async function (interpreter, code, ...args) {\n if (before) await before.call(this, resolved, node);\n const result = await method.call(\n this,\n interpreter,\n code,\n ...args\n );\n if (after) await after.call(this, resolved, node);\n return result;\n };\n }\n\n module.registerJSModule(interpreter, 'polyscript', { XWorker });\n\n const resolved = {\n type,\n interpreter,\n XWorker,\n io: io.get(interpreter),\n config: structuredClone(configs.get(name)),\n run: module.run.bind(module, interpreter),\n runAsync: module.runAsync.bind(module, interpreter),\n runEvent: module.runEvent.bind(module, interpreter),\n };\n\n resolve(resolved);\n\n onInterpreterReady?.(resolved, node);\n });\n }\n }\n }\n};\n\n/**\n * @type {Map<string, {options:object, known:WeakSet<Element>}>}\n */\nconst registry = new Map();\n\n/**\n * @typedef {Object} CustomOptions custom configuration\n * @prop {'pyodide' | 'micropython' | 'wasmoon' | 'ruby-wasm-wasi'} interpreter the interpreter to use\n * @prop {string} [version] the optional interpreter version to use\n * @prop {string} [config] the optional config to use within such interpreter\n * @prop {(environment: object, node: Element) => void} [onInterpreterReady] the callback that will be invoked once\n */\n\nlet dontBotherCount = 0;\n\n/**\n * Allows custom types and components on the page to receive interpreters to execute any code\n * @param {string} type the unique `<script type=\"...\">` identifier\n * @param {CustomOptions} options the custom type configuration\n */\nexport const define = (type, options) => {\n // allow no-type to be bootstrapped out of the box\n let dontBother = type == null;\n\n if (dontBother)\n type = `_ps${dontBotherCount++}`;\n else if (defaultRegistry.has(type) || registry.has(type))\n throw new Error(`<script type=\"${type}\"> already registered`);\n\n if (!defaultRegistry.has(options?.interpreter))\n throw new Error('Unspecified interpreter');\n\n // allows reaching out the interpreter helpers on events\n defaultRegistry.set(type, defaultRegistry.get(options.interpreter));\n\n // allows selector -> registry by type\n const selectors = [`script[type=\"${type}\"]`];\n\n // ensure a Promise can resolve once a custom type has been bootstrapped\n whenDefined(type);\n\n if (dontBother) {\n // add a script then cleanup everything once that's ready\n const { onInterpreterReady } = options;\n options = {\n ...options,\n onInterpreterReady(resolved, node) {\n CUSTOM_SELECTORS.splice(CUSTOM_SELECTORS.indexOf(type), 1);\n defaultRegistry.delete(type);\n registry.delete(type);\n waitList.delete(type);\n node.remove();\n onInterpreterReady?.(resolved);\n }\n };\n document.head.append(\n assign(document.createElement('script'), { type })\n );\n }\n else {\n selectors.push(`${type}-script`);\n prefixes.push(`${type}-`);\n }\n\n for (const selector of selectors) types.set(selector, type);\n CUSTOM_SELECTORS.push(...selectors);\n\n // ensure always same env for this custom type\n registry.set(type, {\n options: assign({ env: type }, options),\n known: new WeakSet(),\n });\n\n if (!dontBother) addAllListeners(document);\n $$(selectors.join(',')).forEach(handleCustomType);\n};\n\n/**\n * Resolves whenever a defined custom type is bootstrapped on the page\n * @param {string} type the unique `<script type=\"...\">` identifier\n * @returns {Promise<object>}\n */\nexport const whenDefined = (type) => {\n if (!waitList.has(type)) waitList.set(type, Promise.withResolvers());\n return waitList.get(type).promise;\n};\n/* c8 ignore stop */\n","import { $$ } from 'basic-devtools';\n\nimport xworker from './worker/class.js';\nimport { handle } from './script-handler.js';\nimport { assign } from './utils.js';\nimport { selectors, prefixes } from './interpreters.js';\nimport { CUSTOM_SELECTORS, handleCustomType } from './custom.js';\nimport { listener, addAllListeners } from './listeners.js';\n\nexport { define, whenDefined } from './custom.js';\nexport { env } from './listeners.js';\nexport const XWorker = xworker();\n\nconst INTERPRETER_SELECTORS = selectors.join(',');\n\nconst mo = new MutationObserver((records) => {\n for (const { type, target, attributeName, addedNodes } of records) {\n // attributes are tested via integration / e2e\n /* c8 ignore start */\n if (type === 'attributes') {\n const i = attributeName.lastIndexOf('-') + 1;\n if (i) {\n const prefix = attributeName.slice(0, i);\n for (const p of prefixes) {\n if (prefix === p) {\n const type = attributeName.slice(i);\n if (type !== 'env') {\n const method = target.hasAttribute(attributeName)\n ? 'add'\n : 'remove';\n target[`${method}EventListener`](type, listener);\n }\n break;\n }\n }\n }\n continue;\n }\n for (const node of addedNodes) {\n if (node.nodeType === 1) {\n addAllListeners(node);\n if (node.matches(INTERPRETER_SELECTORS)) handle(node);\n else {\n $$(INTERPRETER_SELECTORS, node).forEach(handle);\n if (!CUSTOM_SELECTORS.length) continue;\n handleCustomType(node);\n $$(CUSTOM_SELECTORS.join(','), node).forEach(\n handleCustomType,\n );\n }\n }\n }\n /* c8 ignore stop */\n }\n});\n\nconst observe = (root) => {\n mo.observe(root, { childList: true, subtree: true, attributes: true });\n return root;\n};\n\nconst { attachShadow } = Element.prototype;\nassign(Element.prototype, {\n attachShadow(init) {\n return observe(attachShadow.call(this, init));\n },\n});\n\naddAllListeners(observe(document));\n$$(INTERPRETER_SELECTORS, document).forEach(handle);\n","export default {\n sleep(seconds) {\n return new Promise(($) => setTimeout($, seconds * 1000));\n },\n};\n","/**\n * Create through Python the pyscript module through\n * the artifact generated at build time.\n * This the returned value is a string that must be used\n * either before a worker execute code or when the module\n * is registered on the main thread.\n */\n\nimport pyscript from \"./stdlib/pyscript.js\";\n\nconst { entries } = Object;\n\nconst python = [\"from pathlib import Path as _Path\"];\n\nconst write = (base, literal) => {\n for (const [key, value] of entries(literal)) {\n const path = `_Path(\"${base}/${key}\")`;\n if (typeof value === \"string\") {\n const code = JSON.stringify(value);\n python.push(`${path}.write_text(${code})`);\n } else {\n python.push(`${path}.mkdir(parents=True, exist_ok=True)`);\n write(`${base}/${key}`, value);\n }\n }\n};\n\nwrite(\".\", pyscript);\n\npython.push(\"del _Path\");\npython.push(\"\\n\");\n\nexport default python.join(\"\\n\");\n","// ⚠️ This file is an artifact: DO NOT MODIFY\nexport default {\n \"_pyscript\": {\n \"__init__.py\": \"import js as window\\n\\nIS_WORKER = not hasattr(window, \\\"document\\\")\\n\\nif IS_WORKER:\\n from polyscript import xworker as _xworker\\n\\n window = _xworker.window\\n document = window.document\\n sync = _xworker.sync\\nelse:\\n document = window.document\\n\",\n \"display.py\": \"import base64\\nimport html\\nimport io\\nimport re\\n\\nfrom . import document, window\\n\\n_MIME_METHODS = {\\n \\\"__repr__\\\": \\\"text/plain\\\",\\n \\\"_repr_html_\\\": \\\"text/html\\\",\\n \\\"_repr_markdown_\\\": \\\"text/markdown\\\",\\n \\\"_repr_svg_\\\": \\\"image/svg+xml\\\",\\n \\\"_repr_png_\\\": \\\"image/png\\\",\\n \\\"_repr_pdf_\\\": \\\"application/pdf\\\",\\n \\\"_repr_jpeg_\\\": \\\"image/jpeg\\\",\\n \\\"_repr_latex\\\": \\\"text/latex\\\",\\n \\\"_repr_json_\\\": \\\"application/json\\\",\\n \\\"_repr_javascript_\\\": \\\"application/javascript\\\",\\n \\\"savefig\\\": \\\"image/png\\\",\\n}\\n\\n\\ndef _render_image(mime, value, meta):\\n # If the image value is using bytes we should convert it to base64\\n # otherwise it will return raw bytes and the browser will not be able to\\n # render it.\\n if isinstance(value, bytes):\\n value = base64.b64encode(value).decode(\\\"utf-8\\\")\\n\\n # This is the pattern of base64 strings\\n base64_pattern = re.compile(\\n r\\\"^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$\\\"\\n )\\n # If value doesn't match the base64 pattern we should encode it to base64\\n if len(value) > 0 and not base64_pattern.match(value):\\n value = base64.b64encode(value.encode(\\\"utf-8\\\")).decode(\\\"utf-8\\\")\\n\\n data = f\\\"data:{mime};charset=utf-8;base64,{value}\\\"\\n attrs = \\\" \\\".join(['{k}=\\\"{v}\\\"' for k, v in meta.items()])\\n return f'<img src=\\\"{data}\\\" {attrs}></img>'\\n\\n\\ndef _identity(value, meta):\\n return value\\n\\n\\n_MIME_RENDERERS = {\\n \\\"text/plain\\\": html.escape,\\n \\\"text/html\\\": _identity,\\n \\\"image/png\\\": lambda value, meta: _render_image(\\\"image/png\\\", value, meta),\\n \\\"image/jpeg\\\": lambda value, meta: _render_image(\\\"image/jpeg\\\", value, meta),\\n \\\"image/svg+xml\\\": _identity,\\n \\\"application/json\\\": _identity,\\n \\\"application/javascript\\\": lambda value, meta: f\\\"<script>{value}<\\\\\\\\/script>\\\",\\n}\\n\\n\\nclass HTML:\\n \\\"\\\"\\\"\\n Wrap a string so that display() can render it as plain HTML\\n \\\"\\\"\\\"\\n\\n def __init__(self, html):\\n self._html = html\\n\\n def _repr_html_(self):\\n return self._html\\n\\n\\ndef _eval_formatter(obj, print_method):\\n \\\"\\\"\\\"\\n Evaluates a formatter method.\\n \\\"\\\"\\\"\\n if print_method == \\\"__repr__\\\":\\n return repr(obj)\\n elif hasattr(obj, print_method):\\n if print_method == \\\"savefig\\\":\\n buf = io.BytesIO()\\n obj.savefig(buf, format=\\\"png\\\")\\n buf.seek(0)\\n return base64.b64encode(buf.read()).decode(\\\"utf-8\\\")\\n return getattr(obj, print_method)()\\n elif print_method == \\\"_repr_mimebundle_\\\":\\n return {}, {}\\n return None\\n\\n\\ndef _format_mime(obj):\\n \\\"\\\"\\\"\\n Formats object using _repr_x_ methods.\\n \\\"\\\"\\\"\\n if isinstance(obj, str):\\n return html.escape(obj), \\\"text/plain\\\"\\n\\n mimebundle = _eval_formatter(obj, \\\"_repr_mimebundle_\\\")\\n if isinstance(mimebundle, tuple):\\n format_dict, _ = mimebundle\\n else:\\n format_dict = mimebundle\\n\\n output, not_available = None, []\\n for method, mime_type in reversed(_MIME_METHODS.items()):\\n if mime_type in format_dict:\\n output = format_dict[mime_type]\\n else:\\n output = _eval_formatter(obj, method)\\n\\n if output is None:\\n continue\\n elif mime_type not in _MIME_RENDERERS:\\n not_available.append(mime_type)\\n continue\\n break\\n if output is None:\\n if not_available:\\n window.console.warn(\\n f\\\"Rendered object requested unavailable MIME renderers: {not_available}\\\"\\n )\\n output = repr(output)\\n mime_type = \\\"text/plain\\\"\\n elif isinstance(output, tuple):\\n output, meta = output\\n else:\\n meta = {}\\n return _MIME_RENDERERS[mime_type](output, meta), mime_type\\n\\n\\ndef _write(element, value, append=False):\\n html, mime_type = _format_mime(value)\\n if html == \\\"\\\\\\\\n\\\":\\n return\\n\\n if append:\\n out_element = document.createElement(\\\"div\\\")\\n element.append(out_element)\\n else:\\n out_element = element.lastElementChild\\n if out_element is None:\\n out_element = element\\n\\n if mime_type in (\\\"application/javascript\\\", \\\"text/html\\\"):\\n script_element = document.createRange().createContextualFragment(html)\\n out_element.append(script_element)\\n else:\\n out_element.innerHTML = html\\n\\n\\ndef display(*values, target=None, append=True):\\n element = document.getElementById(target)\\n for v in values:\\n _write(element, v, append=append)\\n\",\n \"event_handling.py\": \"import inspect\\n\\nfrom pyodide.ffi.wrappers import add_event_listener\\nfrom pyscript import document\\n\\n\\ndef when(event_type=None, selector=None):\\n \\\"\\\"\\\"\\n Decorates a function and passes py-* events to the decorated function\\n The events might or not be an argument of the decorated function\\n \\\"\\\"\\\"\\n\\n def decorator(func):\\n elements = document.querySelectorAll(selector)\\n sig = inspect.signature(func)\\n # Function doesn't receive events\\n if not sig.parameters:\\n\\n def wrapper(*args, **kwargs):\\n func()\\n\\n for el in elements:\\n add_event_listener(el, event_type, wrapper)\\n else:\\n for el in elements:\\n add_event_listener(el, event_type, func)\\n return func\\n\\n return decorator\\n\"\n },\n \"pyscript.py\": \"# export only what we want to expose as `pyscript` module\\n# but not what is WORKER/MAIN dependent\\nfrom _pyscript import window, document, IS_WORKER\\nfrom _pyscript.display import HTML, display as _display\\nfrom _pyscript.event_handling import when\\n\\n# this part is needed to disambiguate between MAIN and WORKER\\nif IS_WORKER:\\n # in workers the display does not have a default ID\\n # but there is a sync utility from xworker\\n import polyscript as _polyscript\\n from _pyscript import sync\\n\\n def current_target():\\n return _polyscript.target\\n\\nelse:\\n # in MAIN both PyWorker and current element target exist\\n # so these are both exposed and the display will use,\\n # if not specified otherwise, such current element target\\n import _pyscript_js\\n\\n PyWorker = _pyscript_js.PyWorker\\n\\n def current_target():\\n return _pyscript_js.target\\n\\n\\n# the display provides a handy default target either in MAIN or WORKER\\ndef display(*values, target=None, append=True):\\n if target is None:\\n target = current_target()\\n\\n return _display(*values, target=target, append=append)\\n\"\n};\n","// ⚠️ This file is an artifact: DO NOT MODIFY\nexport default {\n error: () => import(\"./plugins/error.js\"),\n};\n","const CLOSEBUTTON =\n \"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='currentColor' width='12px'><path d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/></svg>\";\n\n/**\n * These error codes are used to identify the type of error that occurred.\n * @see https://docs.pyscript.net/latest/reference/exceptions.html?highlight=errors\n */\nexport const ErrorCode = {\n GENERIC: \"PY0000\", // Use this only for development then change to a more specific error code\n FETCH_ERROR: \"PY0001\",\n FETCH_NAME_ERROR: \"PY0002\",\n // Currently these are created depending on error code received from fetching\n FETCH_UNAUTHORIZED_ERROR: \"PY0401\",\n FETCH_FORBIDDEN_ERROR: \"PY0403\",\n FETCH_NOT_FOUND_ERROR: \"PY0404\",\n FETCH_SERVER_ERROR: \"PY0500\",\n FETCH_UNAVAILABLE_ERROR: \"PY0503\",\n BAD_CONFIG: \"PY1000\",\n MICROPIP_INSTALL_ERROR: \"PY1001\",\n BAD_PLUGIN_FILE_EXTENSION: \"PY2000\",\n NO_DEFAULT_EXPORT: \"PY2001\",\n TOP_LEVEL_AWAIT: \"PY9000\",\n};\n\nexport class UserError extends Error {\n constructor(errorCode, message = \"\", messageType = \"text\") {\n super(`(${errorCode}): ${message}`);\n this.errorCode = errorCode;\n this.messageType = messageType;\n this.name = \"UserError\";\n }\n}\n\nexport class FetchError extends UserError {\n constructor(errorCode, message) {\n super(errorCode, message);\n this.name = \"FetchError\";\n }\n}\n\nexport class InstallError extends UserError {\n constructor(errorCode, message) {\n super(errorCode, message);\n this.name = \"InstallError\";\n }\n}\n\nexport function _createAlertBanner(\n message,\n level,\n messageType = \"text\",\n logMessage = true,\n) {\n switch (`log-${level}-${logMessage}`) {\n case \"log-error-true\":\n console.error(message);\n break;\n case \"log-warning-true\":\n console.warn(message);\n break;\n }\n\n const content = messageType === \"html\" ? \"innerHTML\" : \"textContent\";\n const banner = Object.assign(document.createElement(\"div\"), {\n className: `alert-banner py-${level}`,\n [content]: message,\n });\n\n if (level === \"warning\") {\n const closeButton = Object.assign(document.createElement(\"button\"), {\n id: \"alert-close-button\",\n innerHTML: CLOSEBUTTON,\n });\n\n banner.appendChild(closeButton).addEventListener(\"click\", () => {\n banner.remove();\n });\n }\n\n document.body.prepend(banner);\n}\n","import { FetchError, ErrorCode } from \"./exceptions.js\";\n\n/**\n * This is a fetch wrapper that handles any non 200 responses and throws a\n * FetchError with the right ErrorCode. This is useful because our FetchError\n * will automatically create an alert banner.\n *\n * @param {string} url - URL to fetch\n * @param {Request} [options] - options to pass to fetch\n * @returns {Promise<Response>}\n */\nexport async function robustFetch(url, options) {\n let response;\n\n // Note: We need to wrap fetch into a try/catch block because fetch\n // throws a TypeError if the URL is invalid such as http://blah.blah\n try {\n response = await fetch(url, options);\n } catch (err) {\n const error = err;\n let errMsg;\n if (url.startsWith(\"http\")) {\n errMsg =\n `Fetching from URL ${url} failed with error ` +\n `'${error.message}'. Are your filename and path correct?`;\n } else {\n errMsg = `Polyscript: Access to local files\n (using [[fetch]] configurations in &lt;py-config&gt;)\n is not available when directly opening a HTML file;\n you must use a webserver to serve the additional files.\n See <a style=\"text-decoration: underline;\" href=\"https://github.com/pyscript/pyscript/issues/257#issuecomment-1119595062\">this reference</a>\n on starting a simple webserver with Python.\n `;\n }\n throw new FetchError(ErrorCode.FETCH_ERROR, errMsg);\n }\n\n // Note that response.ok is true for 200-299 responses\n if (!response.ok) {\n const errorMsg = `Fetching from URL ${url} failed with error ${response.status} (${response.statusText}). Are your filename and path correct?`;\n switch (response.status) {\n case 404:\n throw new FetchError(ErrorCode.FETCH_NOT_FOUND_ERROR, errorMsg);\n case 401:\n throw new FetchError(\n ErrorCode.FETCH_UNAUTHORIZED_ERROR,\n errorMsg,\n );\n case 403:\n throw new FetchError(ErrorCode.FETCH_FORBIDDEN_ERROR, errorMsg);\n case 500:\n throw new FetchError(ErrorCode.FETCH_SERVER_ERROR, errorMsg);\n case 503:\n throw new FetchError(\n ErrorCode.FETCH_UNAVAILABLE_ERROR,\n errorMsg,\n );\n default:\n throw new FetchError(ErrorCode.FETCH_ERROR, errorMsg);\n }\n }\n return response;\n}\n","/*! (c) PyScript Development Team */\n\nimport \"@ungap/with-resolvers\";\nimport { $ } from \"basic-devtools\";\nimport { define, XWorker } from \"polyscript\";\nimport sync from \"./sync.js\";\n\nimport stdlib from \"./stdlib.js\";\nimport plugins from \"./plugins.js\";\n\n// TODO: this is not strictly polyscript related but handy ... not sure\n// we should factor this utility out a part but this works anyway.\nimport { queryTarget } from \"../node_modules/polyscript/esm/script-handler.js\";\nimport { dedent, dispatch } from \"../node_modules/polyscript/esm/utils.js\";\nimport { Hook } from \"../node_modules/polyscript/esm/worker/hooks.js\";\n\nimport { robustFetch as fetch } from \"./fetch.js\";\n\nconst { assign, defineProperty, entries } = Object;\n\nconst getText = (body) => body.text();\n\n// allows lazy element features on code evaluation\nlet currentElement;\n\n// create a unique identifier when/if needed\nlet id = 0;\nconst getID = (prefix = \"py\") => `${prefix}-${id++}`;\n\n// find the shared config for all py-script elements\nlet config;\nlet pyConfig = $(\"py-config\");\nif (pyConfig) config = pyConfig.getAttribute(\"src\") || pyConfig.textContent;\nelse {\n pyConfig = $('script[type=\"py\"]');\n config = pyConfig?.getAttribute(\"config\");\n}\n\nif (/^https?:\\/\\//.test(config)) config = await fetch(config).then(getText);\n\n// generic helper to disambiguate between custom element and script\nconst isScript = ({ tagName }) => tagName === \"SCRIPT\";\n\n// helper for all script[type=\"py\"] out there\nconst before = (script) => {\n defineProperty(document, \"currentScript\", {\n configurable: true,\n get: () => script,\n });\n};\n\nconst after = () => {\n delete document.currentScript;\n};\n\n/**\n * Given a generic DOM Element, tries to fetch the 'src' attribute, if present.\n * It either throws an error if the 'src' can't be fetched or it returns a fallback\n * content as source.\n */\nconst fetchSource = async (tag, io, asText) => {\n if (tag.hasAttribute(\"src\")) {\n try {\n return await fetch(tag.getAttribute(\"src\")).then(getText);\n } catch (error) {\n io.stderr(error);\n }\n }\n\n if (asText) return dedent(tag.textContent);\n\n console.warn(\n 'Deprecated: use <script type=\"py\"> for an always safe content parsing:\\n',\n tag.innerHTML,\n );\n\n return dedent(tag.innerHTML);\n};\n\n// common life-cycle handlers for any node\nconst bootstrapNodeAndPlugins = (pyodide, element, callback, hook) => {\n // make it possible to reach the current target node via Python\n callback(element);\n for (const fn of hooks[hook]) fn(pyodide, element);\n};\n\nlet shouldRegister = true;\nconst registerModule = ({ XWorker: $XWorker, interpreter, io }) => {\n // automatically use the pyscript stderr (when/if defined)\n // this defaults to console.error\n function PyWorker(...args) {\n const worker = $XWorker(...args);\n worker.onerror = ({ error }) => io.stderr(error);\n return worker;\n }\n\n // enrich the Python env with some JS utility for main\n interpreter.registerJsModule(\"_pyscript_js\", {\n PyWorker,\n get target() {\n return isScript(currentElement)\n ? currentElement.target.id\n : currentElement.id;\n },\n });\n\n interpreter.runPython(stdlib, { globals: interpreter.runPython(\"{}\") });\n};\n\nexport const hooks = {\n /** @type {Set<function>} */\n onBeforeRun: new Set(),\n /** @type {Set<function>} */\n onBeforeRunAsync: new Set(),\n /** @type {Set<function>} */\n onAfterRun: new Set(),\n /** @type {Set<function>} */\n onAfterRunAsync: new Set(),\n /** @type {Set<function>} */\n onInterpreterReady: new Set(),\n\n /** @type {Set<string>} */\n codeBeforeRunWorker: new Set(),\n /** @type {Set<string>} */\n codeBeforeRunWorkerAsync: new Set(),\n /** @type {Set<string>} */\n codeAfterRunWorker: new Set(),\n /** @type {Set<string>} */\n codeAfterRunWorkerAsync: new Set(),\n};\n\nconst workerHooks = {\n codeBeforeRunWorker: () =>\n [stdlib, ...hooks.codeBeforeRunWorker].map(dedent).join(\"\\n\"),\n codeBeforeRunWorkerAsync: () =>\n [stdlib, ...hooks.codeBeforeRunWorkerAsync].map(dedent).join(\"\\n\"),\n codeAfterRunWorker: () =>\n [...hooks.codeAfterRunWorker].map(dedent).join(\"\\n\"),\n codeAfterRunWorkerAsync: () =>\n [...hooks.codeAfterRunWorkerAsync].map(dedent).join(\"\\n\"),\n};\n\n// avoid running further script if the previous one had\n// some import that would inevitably delay its execution\nlet queuePlugins;\n\n// define the module as both `<script type=\"py\">` and `<py-script>`\ndefine(\"py\", {\n config,\n env: \"py-script\",\n interpreter: \"pyodide\",\n ...workerHooks,\n onWorkerReady(_, xworker) {\n assign(xworker.sync, sync);\n },\n onBeforeRun(pyodide, element) {\n currentElement = element;\n bootstrapNodeAndPlugins(pyodide, element, before, \"onBeforeRun\");\n },\n onBeforeRunAsync(pyodide, element) {\n currentElement = element;\n bootstrapNodeAndPlugins(pyodide, element, before, \"onBeforeRunAsync\");\n },\n onAfterRun(pyodide, element) {\n bootstrapNodeAndPlugins(pyodide, element, after, \"onAfterRun\");\n },\n onAfterRunAsync(pyodide, element) {\n bootstrapNodeAndPlugins(pyodide, element, after, \"onAfterRunAsync\");\n },\n async onInterpreterReady(pyodide, element) {\n if (shouldRegister) {\n shouldRegister = false;\n registerModule(pyodide);\n }\n\n // load plugins unless specified otherwise\n const toBeAwaited = [];\n for (const [key, value] of entries(plugins)) {\n if (!pyodide.config?.plugins?.includes(`!${key}`))\n toBeAwaited.push(value());\n }\n\n // this grants queued results when first script/tag has plugins\n // and the second one *might* rely on first tag execution\n if (toBeAwaited.length) {\n const all = Promise.all(toBeAwaited);\n queuePlugins = queuePlugins ? queuePlugins.then(() => all) : all;\n }\n\n if (queuePlugins) await queuePlugins;\n\n // allows plugins to do whatever they want with the element\n // before regular stuff happens in here\n for (const callback of hooks.onInterpreterReady)\n callback(pyodide, element);\n\n if (isScript(element)) {\n const {\n attributes: { async: isAsync, target },\n } = element;\n const hasTarget = !!target?.value;\n const show = hasTarget\n ? queryTarget(target.value)\n : document.createElement(\"script-py\");\n\n if (!hasTarget) {\n const { head, body } = document;\n if (head.contains(element)) body.append(show);\n else element.after(show);\n }\n if (!show.id) show.id = getID();\n\n // allows the code to retrieve the target element via\n // document.currentScript.target if needed\n defineProperty(element, \"target\", { value: show });\n\n // notify before the code runs\n dispatch(element, \"py\");\n pyodide[`run${isAsync ? \"Async\" : \"\"}`](\n await fetchSource(element, pyodide.io, true),\n );\n } else {\n // resolve PyScriptElement to allow connectedCallback\n element._pyodide.resolve(pyodide);\n }\n console.debug(\"[pyscript/main] PyScript Ready\");\n },\n});\n\nclass PyScriptElement extends HTMLElement {\n constructor() {\n assign(super(), {\n _pyodide: Promise.withResolvers(),\n srcCode: \"\",\n executed: false,\n });\n }\n get id() {\n return super.id || (super.id = getID());\n }\n set id(value) {\n super.id = value;\n }\n async connectedCallback() {\n if (!this.executed) {\n this.executed = true;\n const { io, run, runAsync } = await this._pyodide.promise;\n const runner = this.hasAttribute(\"async\") ? runAsync : run;\n this.srcCode = await fetchSource(this, io, !this.childElementCount);\n this.replaceChildren();\n // notify before the code runs\n dispatch(this, \"py\");\n runner(this.srcCode);\n this.style.display = \"block\";\n }\n }\n}\n\ncustomElements.define(\"py-script\", PyScriptElement);\n\n/**\n * A `Worker` facade able to bootstrap on the worker thread only a PyScript module.\n * @param {string} file the python file to run ina worker.\n * @param {{config?: string | object, async?: boolean}} [options] optional configuration for the worker.\n * @returns {Worker & {sync: ProxyHandler<object>}}\n */\nexport function PyWorker(file, options) {\n // this propagates pyscript worker hooks without needing a pyscript\n // bootstrap + it passes arguments and enforces `pyodide`\n // as the interpreter to use in the worker, as all hooks assume that\n // and as `pyodide` is the only default interpreter that can deal with\n // all the features we need to deliver pyscript out there.\n const xworker = XWorker.call(new Hook(null, workerHooks), file, {\n ...options,\n type: \"pyodide\",\n });\n assign(xworker.sync, sync);\n return xworker;\n}\n"],"names":["Promise","withResolvers","a","b","c","this","resolve","reject","promise","$","css","root","document","querySelector","$$","querySelectorAll","$x","path","xpath","XPathEvaluator","createExpression","evaluate","XPathResult","ORDERED_NODE_SNAPSHOT_TYPE","result","i","snapshotLength","push","snapshotItem","env","self","globalThis","deserialize","serialized","_","as","out","index","set","unpair","has","get","type","value","arr","object","key","Date","source","flags","RegExp","map","Map","Set","add","name","message","BigInt","Object","deserializer","EMPTY","toString","keys","typeOf","asString","call","slice","includes","shouldSkip","TYPE","serialize","json","lossy","strict","pair","entry","TypeError","valueOf","toJSON","entries","toISOString","serializer","parse","$parse","stringify","$stringify","JSON","options","str","any","CHANNEL","MAIN","THREAD","waitAsyncFallback","buffer","onmessage","w","Worker","postMessage","Int32Array","SharedArrayBuffer","Uint16Array","BYTES_PER_ELEMENT","I32_BYTES","UI16_BYTES","isArray","Array","notify","wait","waitAsync","Atomics","fromCharCode","String","waitFor","isAsync","sb","then","fn","buffers","WeakSet","context","WeakMap","uid","coincident","transform","post","transfer","args","harakiri","Proxy","action","startsWith","id","at","delete","pop","deadlock","setTimeout","console","warn","clearTimeout","length","bytes","actions","callback","size","results","addEventListener","async","event","details","data","stopImmediatePropagation","rest","Error","ui16a","charCodeAt","OBJECT","FUNCTION","NUMBER","STRING","UNDEFINED","SYMBOL","defineProperty","getOwnPropertyDescriptor","getPrototypeOf","isExtensible","ownKeys","preventExtensions","setPrototypeOf","Reflect","assign","create","TypedArray","Int8Array","augment","descriptor","how","asEntry","symbols","Symbol","filter","s","symbol","Bound","APPLY","CONSTRUCT","DEFINE_PROPERTY","DELETE_PROPERTY","GET","GET_OWN_PROPERTY_DESCRIPTOR","GET_PROTOTYPE_OF","HAS","IS_EXTENSIBLE","OWN_KEYS","PREVENT_EXTENSION","SET","SET_PROTOTYPE_OF","DELETE","main","patch","eventsHandler","EventTarget","prototype","listener","invoke","concat","handleEvent","currentTarget","target","method","thread","ids","values","__thread__","global","sid","registry","FinalizationRegistry","cb","Event","ref","WeakRef","register","deref","trapsHandler","thisArg","apply","proto","trap","proxy","toLowerCase","__proxied__","bound","isProxy","localArray","argument","__main__","proxies","bind","proxyHandler","fromEntry","TRAP","ctx","remoteArray","Worker$1","$coincident","util","dedent","string","t","l","arguments","content","line","split","trim","test","replace","$1","codedent","tpl","defineProperties","all","absoluteURL","base","location","href","URL","nodeInfo","node","tag","tagName","dispatch","worker","CE","CustomEvent","dispatchEvent","bubbles","detail","getBuffer","response","arrayBuffer","getJSON","getText","text","workerHooks","Hook","constructor","interpreter","onWorkerReady","stringHooks","hooks","xworker","url","createObjectURL","Blob","isHook","version","config","bootstrap","fetch","code","sync","onerror","writable","configurable","error","workerURL","element","attributes","childElementCount","innerHTML","localName","textContent","io","stdio","init","localIO","stderr","stdout","log","engine","writeFile","FS","PATH","PATH_FS","absPath","mkdirTree","dirname","Uint8Array","canOwn","tree","join","current","branch","mkdir","cwd","joinPaths","parts","res","part","p","fetchPaths","module","config_fetch","files","to_file","from","undefined","endsWith","flatMap","to_folder","file","filename","lastIndexOf","calculateFetchPaths","fetchResolved","registerJSModule","registerJsModule","run","runPython","runAsync","runPythonAsync","runEvent","globals","micropython","loadMicroPython","_module","toJsOptions","dict_converter","fromEntries","pyodide","loadPyodide","indexURL","packages","loadPackage","micropip","pyimport","install","destroy","ffi","PyProxy","toJs","jsType","ruby_wasm_wasi","experimental","DefaultRubyVM","WebAssembly","compile","vm","eval","evalAsync","wrap","wasmoon","LuaFactory","LuaLibraries","createEngine","getTable","Base","setField","doStringSync","doString","cmodule","writeFileShim","configs","selectors","prefixes","import","baseURL","getRuntime","getRuntimeID","queryTarget","script","idOrSelector","parent","parentNode","getRoot","getElementById","targets","targetDescriptor","createElement","handle","handled","interpreters","getValue","prefix","getDetails","runtime","queue","XWorker","$xworker","closest","body","append","after","src","versionValue","configValue","targetValue","currentScript","execute","awaitInterpreter","available","r","ownerElement","el","getAttribute","addAllListeners","CUSTOM_SELECTORS","types","waitList","handleCustomType","selector","matches","known","onInterpreterReady","custom","hasAttribute","defaultRegistry","onBeforeRun","onBeforeRunAsync","onAfterRun","onAfterRunAsync","before","resolved","structuredClone","dontBotherCount","whenDefined","INTERPRETER_SELECTORS","mo","MutationObserver","records","attributeName","addedNodes","nodeType","forEach","observe","childList","subtree","attachShadow","Element","sleep","seconds","python","write","literal","_pyscript","stdlib","plugins","ErrorCode","UserError","errorCode","messageType","super","FetchError","robustFetch","err","errMsg","ok","errorMsg","status","statusText","currentElement","getID","pyConfig","isScript","fetchSource","asText","bootstrapNodeAndPlugins","hook","shouldRegister","codeBeforeRunWorker","codeBeforeRunWorkerAsync","codeAfterRunWorker","codeAfterRunWorkerAsync","queuePlugins","dontBother","splice","indexOf","remove","head","define","$XWorker","PyWorker","registerModule","toBeAwaited","hasTarget","show","contains","_pyodide","debug","PyScriptElement","HTMLElement","srcCode","executed","connectedCallback","runner","replaceChildren","style","display","customElements"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]}