@base44/functions-compiler 0.1.5 → 0.1.6

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.
Files changed (59) hide show
  1. package/README.md +23 -9
  2. package/lib/src/assembly.js +2 -2
  3. package/lib/src/assembly.js.map +1 -1
  4. package/lib/src/assets.d.ts +7 -0
  5. package/lib/src/assets.js +15 -0
  6. package/lib/src/assets.js.map +1 -0
  7. package/lib/src/deno-bundle.js +2 -2
  8. package/lib/src/deno-bundle.js.map +1 -1
  9. package/lib/src/esbuild/deno-resolver.js +28 -24
  10. package/lib/src/esbuild/deno-resolver.js.map +1 -1
  11. package/lib/src/esbuild/private-data-sources-virtual.js +2 -3
  12. package/lib/src/esbuild/private-data-sources-virtual.js.map +1 -1
  13. package/lib/src/esbuild/runtime-context-specifier.d.ts +1 -0
  14. package/lib/src/esbuild/runtime-context-specifier.js +3 -0
  15. package/lib/src/esbuild/runtime-context-specifier.js.map +1 -0
  16. package/lib/src/esbuild/runtime-context-virtual.d.ts +2 -1
  17. package/lib/src/esbuild/runtime-context-virtual.js +4 -4
  18. package/lib/src/esbuild/runtime-context-virtual.js.map +1 -1
  19. package/lib/src/esbuild/runtime-virtual.js +4 -21
  20. package/lib/src/esbuild/runtime-virtual.js.map +1 -1
  21. package/lib/src/fetch-guard.js +4 -2
  22. package/lib/src/fetch-guard.js.map +1 -1
  23. package/lib/src/generated/assets.d.ts +1 -0
  24. package/lib/src/generated/assets.js +30 -0
  25. package/lib/src/generated/assets.js.map +1 -0
  26. package/lib/src/lazy-deps.d.ts +2 -0
  27. package/lib/src/lazy-deps.js +11 -0
  28. package/lib/src/lazy-deps.js.map +1 -0
  29. package/lib/src/version.d.ts +1 -1
  30. package/lib/src/version.js +1 -1
  31. package/lib/src/worker-entry.js +4 -12
  32. package/lib/src/worker-entry.js.map +1 -1
  33. package/package.json +4 -3
  34. package/lib/dist/activation-shim.mjs +0 -357
  35. package/lib/dist/actor.mjs +0 -1131
  36. package/lib/dist/deno-shim.mjs +0 -2347
  37. package/lib/src/private-data-sources/build-http.ts +0 -51
  38. package/lib/src/private-data-sources/elasticsearch.ts +0 -8
  39. package/lib/src/private-data-sources/http-url.ts +0 -23
  40. package/lib/src/private-data-sources/http.ts +0 -6
  41. package/lib/src/private-data-sources/hyperdrive.ts +0 -48
  42. package/lib/src/private-data-sources/ioredis-adapter.ts +0 -229
  43. package/lib/src/private-data-sources/manifest.ts +0 -150
  44. package/lib/src/private-data-sources/mariadb.ts +0 -8
  45. package/lib/src/private-data-sources/mongodb.ts +0 -70
  46. package/lib/src/private-data-sources/mysql.ts +0 -8
  47. package/lib/src/private-data-sources/node-net-adapter.ts +0 -247
  48. package/lib/src/private-data-sources/oracle.ts +0 -34
  49. package/lib/src/private-data-sources/postgres.ts +0 -8
  50. package/lib/src/private-data-sources/redis-auth.ts +0 -83
  51. package/lib/src/private-data-sources/redis.ts +0 -47
  52. package/lib/src/private-data-sources/runtime-environment.ts +0 -4
  53. package/lib/src/private-data-sources/runtime-manifest-store.ts +0 -32
  54. package/lib/src/private-data-sources/sqlserver.ts +0 -22
  55. package/lib/src/private-data-sources/tcp.ts +0 -86
  56. package/lib/src/private-data-sources/tedious-adapter.ts +0 -67
  57. package/lib/src/private-data-sources/types.ts +0 -29
  58. package/lib/src/runtime/index.ts +0 -30
  59. package/lib/src/runtime-context.ts +0 -29
@@ -0,0 +1,30 @@
1
+ // GENERATED by scripts/build-shim.ts — do not edit. Regenerate with `bun run build:shim`.
2
+ export const ASSETS = {
3
+ "deno-shim.mjs": "// GENERATED by scripts/build-shim.ts from src/shim/entry.ts — do not edit.\n// Regenerate with `npm run build:shim`.\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n};\nvar __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", { value: mod, enumerable: true }) : target,\n mod\n));\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\n\n// ../../node_modules/isexe/dist/esm/index.min.js\nvar index_min_exports = {};\n__export(index_min_exports, {\n isexe: () => R,\n posix: () => i,\n sync: () => U,\n win32: () => a\n});\nimport { statSync as w } from \"node:fs\";\nimport { stat as S } from \"node:fs/promises\";\nimport { statSync as k } from \"node:fs\";\nimport { stat as I } from \"node:fs/promises\";\nimport { delimiter as _ } from \"node:path\";\nvar y, u, i, C, A, d, T, a, F, L, P, m, v, g, R, U;\nvar init_index_min = __esm({\n \"../../node_modules/isexe/dist/esm/index.min.js\"() {\n y = Object.defineProperty;\n u = (t, r) => {\n for (var e in r) y(t, e, { get: r[e], enumerable: true });\n };\n i = {};\n u(i, { isexe: () => C, sync: () => A });\n C = async (t, r = {}) => {\n let { ignoreErrors: e = false } = r;\n try {\n return d(await S(t), r);\n } catch (s) {\n let o = s;\n if (e || o.code === \"EACCES\") return false;\n throw o;\n }\n };\n A = (t, r = {}) => {\n let { ignoreErrors: e = false } = r;\n try {\n return d(w(t), r);\n } catch (s) {\n let o = s;\n if (e || o.code === \"EACCES\") return false;\n throw o;\n }\n };\n d = (t, r) => t.isFile() && T(t, r);\n T = (t, r) => {\n let e = r.uid ?? process.getuid?.(), s = r.groups ?? process.getgroups?.() ?? [], o = r.gid ?? process.getgid?.() ?? s[0];\n if (e === void 0 || o === void 0) throw new Error(\"cannot get uid or gid\");\n let c = /* @__PURE__ */ new Set([o, ...s]), n = t.mode, l = t.uid, E = t.gid, f = parseInt(\"100\", 8), p = parseInt(\"010\", 8), x = parseInt(\"001\", 8), h = f | p;\n return !!(n & x || n & p && c.has(E) || n & f && l === e || n & h && e === 0);\n };\n a = {};\n u(a, { isexe: () => F, sync: () => L });\n F = async (t, r = {}) => {\n let { ignoreErrors: e = false } = r;\n try {\n return m(await I(t), t, r);\n } catch (s) {\n let o = s;\n if (e || o.code === \"EACCES\") return false;\n throw o;\n }\n };\n L = (t, r = {}) => {\n let { ignoreErrors: e = false } = r;\n try {\n return m(k(t), t, r);\n } catch (s) {\n let o = s;\n if (e || o.code === \"EACCES\") return false;\n throw o;\n }\n };\n P = (t, r) => {\n let { pathExt: e = process.env.PATHEXT || \"\" } = r, s = e.split(_);\n if (s.indexOf(\"\") !== -1) return true;\n for (let o of s) {\n let c = o.toLowerCase(), n = t.substring(t.length - c.length).toLowerCase();\n if (c && n === c) return true;\n }\n return false;\n };\n m = (t, r, e) => t.isFile() && P(r, e);\n v = process.env._ISEXE_TEST_PLATFORM_ || process.platform;\n g = v === \"win32\" ? a : i;\n R = g.isexe;\n U = g.sync;\n }\n});\n\n// node-builtin-reexport:path\nimport * as builtin from \"path\";\nvar require_path = __commonJS({\n \"node-builtin-reexport:path\"(exports, module) {\n module.exports = builtin.default ?? builtin;\n }\n});\n\n// ../../node_modules/which/lib/index.js\nvar require_lib = __commonJS({\n \"../../node_modules/which/lib/index.js\"(exports, module) {\n var { isexe, sync: isexeSync } = (init_index_min(), __toCommonJS(index_min_exports));\n var { join: join6, delimiter, sep, posix } = require_path();\n var isWindows2 = process.platform === \"win32\";\n var rSlash = new RegExp(`[${posix.sep}${sep === posix.sep ? \"\" : sep}]`.replace(/(\\\\)/g, \"\\\\$1\"));\n var rRel = new RegExp(`^\\\\.${rSlash.source}`);\n var getNotFoundError = (cmd) => Object.assign(new Error(`not found: ${cmd}`), { code: \"ENOENT\" });\n var getPathInfo = (cmd, {\n path: optPath = process.env.PATH,\n pathExt: optPathExt = process.env.PATHEXT,\n delimiter: optDelimiter = delimiter\n }) => {\n const pathEnv = cmd.match(rSlash) ? [\"\"] : [\n // windows always checks the cwd first\n ...isWindows2 ? [process.cwd()] : [],\n ...(optPath || /* istanbul ignore next: very unusual */\n \"\").split(optDelimiter)\n ];\n if (isWindows2) {\n const pathExtExe = optPathExt || [\".EXE\", \".CMD\", \".BAT\", \".COM\"].join(optDelimiter);\n const pathExt = pathExtExe.split(optDelimiter).flatMap((item) => [item, item.toLowerCase()]);\n if (cmd.includes(\".\") && pathExt[0] !== \"\") {\n pathExt.unshift(\"\");\n }\n return { pathEnv, pathExt, pathExtExe };\n }\n return { pathEnv, pathExt: [\"\"] };\n };\n var getPathPart = (raw, cmd) => {\n const pathPart = /^\".*\"$/.test(raw) ? raw.slice(1, -1) : raw;\n const prefix = !pathPart && rRel.test(cmd) ? cmd.slice(0, 2) : \"\";\n return prefix + join6(pathPart, cmd);\n };\n var which3 = async (cmd, opt = {}) => {\n const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);\n const found = [];\n for (const envPart of pathEnv) {\n const p = getPathPart(envPart, cmd);\n for (const ext of pathExt) {\n const withExt = p + ext;\n const is = await isexe(withExt, { pathExt: pathExtExe, ignoreErrors: true });\n if (is) {\n if (!opt.all) {\n return withExt;\n }\n found.push(withExt);\n }\n }\n }\n if (opt.all && found.length) {\n return found;\n }\n if (opt.nothrow) {\n return null;\n }\n throw getNotFoundError(cmd);\n };\n var whichSync = (cmd, opt = {}) => {\n const { pathEnv, pathExt, pathExtExe } = getPathInfo(cmd, opt);\n const found = [];\n for (const pathEnvPart of pathEnv) {\n const p = getPathPart(pathEnvPart, cmd);\n for (const ext of pathExt) {\n const withExt = p + ext;\n const is = isexeSync(withExt, { pathExt: pathExtExe, ignoreErrors: true });\n if (is) {\n if (!opt.all) {\n return withExt;\n }\n found.push(withExt);\n }\n }\n }\n if (opt.all && found.length) {\n return found;\n }\n if (opt.nothrow) {\n return null;\n }\n throw getNotFoundError(cmd);\n };\n module.exports = which3;\n which3.sync = whichSync;\n }\n});\n\n// ../../node_modules/@deno/shim-deno-test/dist/definitions.js\nvar require_definitions = __commonJS({\n \"../../node_modules/@deno/shim-deno-test/dist/definitions.js\"(exports) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.testDefinitions = void 0;\n exports.testDefinitions = [];\n }\n});\n\n// ../../node_modules/@deno/shim-deno-test/dist/test.js\nvar require_test = __commonJS({\n \"../../node_modules/@deno/shim-deno-test/dist/test.js\"(exports) {\n \"use strict\";\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.test = void 0;\n var definitions_js_1 = require_definitions();\n exports.test = Object.assign(function test2() {\n handleDefinition(arguments);\n }, {\n ignore() {\n handleDefinition(arguments, { ignore: true });\n },\n only() {\n handleDefinition(arguments, { only: true });\n }\n });\n function handleDefinition(args2, additional) {\n var _a, _b;\n let testDef;\n const firstArg = args2[0];\n const secondArg = args2[1];\n const thirdArg = args2[2];\n if (typeof firstArg === \"string\") {\n if (typeof secondArg === \"object\") {\n if (typeof thirdArg === \"function\") {\n if (secondArg.fn != null) {\n throw new TypeError(\"Unexpected 'fn' field in options, test function is already provided as the third argument.\");\n }\n }\n if (secondArg.name != null) {\n throw new TypeError(\"Unexpected 'name' field in options, test name is already provided as the first argument.\");\n }\n testDef = { name: firstArg, fn: thirdArg, ...secondArg };\n } else {\n testDef = { name: firstArg, fn: secondArg };\n }\n } else if (firstArg instanceof Function) {\n if (firstArg.name.length === 0) {\n throw new TypeError(\"The test function must have a name\");\n }\n testDef = { fn: firstArg, name: firstArg.name };\n if (secondArg != null) {\n throw new TypeError(\"Unexpected second argument to Deno.test()\");\n }\n } else if (typeof firstArg === \"object\") {\n testDef = { ...firstArg };\n if (typeof secondArg === \"function\") {\n testDef.fn = secondArg;\n if (firstArg.fn != null) {\n throw new TypeError(\"Unexpected 'fn' field in options, test function is already provided as the second argument.\");\n }\n if (testDef.name == null) {\n if (secondArg.name.length === 0) {\n throw new TypeError(\"The test function must have a name\");\n }\n testDef.name = secondArg.name;\n }\n } else {\n if (typeof firstArg.fn !== \"function\") {\n throw new TypeError(\"Expected 'fn' field in the first argument to be a test function.\");\n }\n }\n } else {\n throw new TypeError(\"Unknown test overload\");\n }\n if (typeof testDef.fn !== \"function\") {\n throw new TypeError(\"Missing test function\");\n }\n if (((_b = (_a = testDef.name) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) === 0) {\n throw new TypeError(\"The test name can't be empty\");\n }\n if (additional === null || additional === void 0 ? void 0 : additional.ignore) {\n testDef.ignore = true;\n }\n if (additional === null || additional === void 0 ? void 0 : additional.only) {\n testDef.only = true;\n }\n definitions_js_1.testDefinitions.push(testDef);\n }\n }\n});\n\n// ../../node_modules/@deno/shim-deno-test/dist/index.js\nvar require_dist = __commonJS({\n \"../../node_modules/@deno/shim-deno-test/dist/index.js\"(exports) {\n \"use strict\";\n var __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m2, k2, k22) {\n if (k22 === void 0) k22 = k2;\n var desc = Object.getOwnPropertyDescriptor(m2, k2);\n if (!desc || (\"get\" in desc ? !m2.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() {\n return m2[k2];\n } };\n }\n Object.defineProperty(o, k22, desc);\n }) : (function(o, m2, k2, k22) {\n if (k22 === void 0) k22 = k2;\n o[k22] = m2[k2];\n }));\n var __exportStar = exports && exports.__exportStar || function(m2, exports2) {\n for (var p in m2) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports2, p)) __createBinding(exports2, m2, p);\n };\n Object.defineProperty(exports, \"__esModule\", { value: true });\n exports.testDefinitions = exports.Deno = void 0;\n exports.Deno = require_test();\n __exportStar(require_test(), exports);\n var definitions_js_1 = require_definitions();\n Object.defineProperty(exports, \"testDefinitions\", { enumerable: true, get: function() {\n return definitions_js_1.testDefinitions;\n } });\n }\n});\n\n// src/shim/entry.ts\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\n// ../../node_modules/@deno/shim-deno/dist/index.mjs\nvar import_which = __toESM(require_lib(), 1);\nvar import_which2 = __toESM(require_lib(), 1);\nvar import_shim_deno_test = __toESM(require_dist(), 1);\nimport * as fs5 from \"fs\";\nimport * as stream from \"stream\";\nimport * as fs from \"fs\";\nimport { promisify } from \"util\";\nimport { stat as nodeStat } from \"fs/promises\";\nimport * as os from \"os\";\nimport { fstatSync as nodeFstatSync } from \"fs\";\nimport { ftruncate as nodeftruncate } from \"fs\";\nimport { promisify as promisify2 } from \"util\";\nimport { ftruncateSync as nodeftruncateSync } from \"fs\";\nimport { fdatasync as nodefdatasync } from \"fs\";\nimport { promisify as promisify3 } from \"util\";\nimport { fdatasyncSync as nodefdatasyncSync } from \"fs\";\nimport { promisify as promisify4 } from \"util\";\nimport { read as nodeRead } from \"fs\";\nimport * as fs2 from \"fs\";\nimport * as fs3 from \"fs\";\nimport { promisify as promisify5 } from \"util\";\nimport * as fs4 from \"fs\";\nimport fs34 from \"fs\";\nimport * as os2 from \"os\";\nimport { join } from \"path\";\nimport { pathToFileURL } from \"url\";\nimport stream2 from \"stream\";\nimport tty from \"tty\";\nimport { isatty } from \"tty\";\nimport ps from \"process\";\nimport { fileURLToPath } from \"url\";\nimport * as fs6 from \"fs/promises\";\nimport * as fs7 from \"fs\";\nimport * as fs8 from \"fs/promises\";\nimport * as fs9 from \"fs\";\nimport * as fs10 from \"fs\";\nimport { createConnection } from \"net\";\nimport { Socket } from \"net\";\nimport { once } from \"events\";\nimport { connect as tlsConnect } from \"tls\";\nimport { readFile } from \"fs/promises\";\nimport * as fs11 from \"fs/promises\";\nimport * as fs12 from \"fs\";\nimport { open as _open } from \"fs\";\nimport { promisify as promisify6 } from \"util\";\nimport { constants } from \"fs\";\nimport os3 from \"os\";\nimport { openSync as nodeOpenSync } from \"fs\";\nimport { fsync as nodeFsync } from \"fs\";\nimport { promisify as promisify7 } from \"util\";\nimport { fsyncSync as nodeFsyncSync } from \"fs\";\nimport ps2 from \"process\";\nimport * as os4 from \"os\";\nimport * as util from \"util\";\nimport os5 from \"os\";\nimport ps3 from \"process\";\nimport * as fs13 from \"fs/promises\";\nimport * as fs14 from \"fs\";\nimport { createServer } from \"net\";\nimport { createServer as createServer2 } from \"tls\";\nimport * as fs15 from \"fs\";\nimport * as os6 from \"os\";\nimport * as fs16 from \"fs/promises\";\nimport * as fs17 from \"fs\";\nimport { mkdtemp } from \"fs/promises\";\nimport { join as join2 } from \"path\";\nimport { tmpdir } from \"os\";\nimport { mkdtempSync } from \"fs\";\nimport { join as join3 } from \"path\";\nimport { tmpdir as tmpdir2 } from \"os\";\nimport { tmpdir as tmpdir3 } from \"os\";\nimport { join as join4 } from \"path\";\nimport * as fs18 from \"fs/promises\";\nimport { tmpdir as tmpdir4 } from \"os\";\nimport { join as join5 } from \"path\";\nimport * as fs19 from \"fs\";\nimport { mkdir as nodeMkdir } from \"fs/promises\";\nimport * as fs20 from \"fs\";\nimport { release } from \"os\";\nimport { uptime } from \"os\";\nimport { opendir } from \"fs/promises\";\nimport { readdirSync as nodeReadDir } from \"fs\";\nimport { readFile as nodeReadFile } from \"fs/promises\";\nimport { readFileSync as nodeReadFile2 } from \"fs\";\nimport * as fs21 from \"fs/promises\";\nimport * as fs22 from \"fs\";\nimport * as fs23 from \"fs/promises\";\nimport * as fs24 from \"fs\";\nimport { rm, rmdir } from \"fs/promises\";\nimport ps4 from \"process\";\nimport * as fs25 from \"fs\";\nimport { rename as nodeRename } from \"fs/promises\";\nimport * as fs26 from \"fs\";\nimport dns from \"dns\";\nimport childProcess from \"child_process\";\nimport fs27 from \"fs\";\nimport os7 from \"os\";\nimport url from \"url\";\nimport { once as once2 } from \"events\";\nimport { Socket as Socket2 } from \"net\";\nimport * as fs28 from \"fs\";\nimport * as fs29 from \"fs/promises\";\nimport * as fs30 from \"fs\";\nimport * as fs31 from \"fs/promises\";\nimport * as fs32 from \"fs\";\nimport ps5 from \"process\";\nimport { watch } from \"fs/promises\";\nimport { resolve } from \"path\";\nimport * as fs33 from \"fs/promises\";\nimport { platform as platform3 } from \"os\";\nvar __defProp2 = Object.defineProperty;\nvar __export2 = (target, all) => {\n for (var name in all)\n __defProp2(target, name, { get: all[name], enumerable: true });\n};\nvar main_exports = {};\n__export2(main_exports, {\n File: () => File,\n FsFile: () => FsFile,\n PermissionStatus: () => PermissionStatus,\n Permissions: () => Permissions,\n Process: () => Process,\n SeekMode: () => SeekMode,\n addSignalListener: () => addSignalListener,\n args: () => args,\n build: () => build,\n chdir: () => chdir,\n chmod: () => chmod22,\n chmodSync: () => chmodSync22,\n chown: () => chown2,\n chownSync: () => chownSync2,\n close: () => close,\n connect: () => connect,\n connectTls: () => connectTls,\n consoleSize: () => consoleSize,\n copy: () => copy,\n copyFile: () => copyFile2,\n copyFileSync: () => copyFileSync2,\n create: () => create,\n createSync: () => createSync,\n customInspect: () => customInspect,\n cwd: () => cwd,\n env: () => env,\n errors: () => errors_exports,\n execPath: () => execPath,\n exit: () => exit,\n fdatasync: () => fdatasync,\n fdatasyncSync: () => fdatasyncSync,\n fstat: () => fstat2,\n fstatSync: () => fstatSync,\n fsync: () => fsync,\n fsyncSync: () => fsyncSync,\n ftruncate: () => ftruncate,\n ftruncateSync: () => ftruncateSync,\n futime: () => futime,\n futimeSync: () => futimeSync,\n gid: () => gid,\n hostname: () => hostname2,\n inspect: () => inspect2,\n isatty: () => isatty,\n kill: () => kill,\n link: () => link2,\n linkSync: () => linkSync2,\n listen: () => listen,\n listenTls: () => listenTls,\n loadavg: () => loadavg2,\n lstat: () => lstat2,\n lstatSync: () => lstatSync2,\n mainModule: () => mainModule,\n makeTempDir: () => makeTempDir,\n makeTempDirSync: () => makeTempDirSync,\n makeTempFile: () => makeTempFile,\n makeTempFileSync: () => makeTempFileSync,\n memoryUsage: () => memoryUsage,\n metrics: () => metrics,\n mkdir: () => mkdir,\n mkdirSync: () => mkdirSync2,\n noColor: () => noColor,\n open: () => open,\n openSync: () => openSync,\n osRelease: () => osRelease,\n osUptime: () => osUptime,\n permissions: () => permissions,\n pid: () => pid,\n ppid: () => ppid,\n read: () => read,\n readDir: () => readDir,\n readDirSync: () => readDirSync,\n readFile: () => readFile2,\n readFileSync: () => readFileSync2,\n readLink: () => readLink,\n readLinkSync: () => readLinkSync,\n readSync: () => readSync2,\n readTextFile: () => readTextFile,\n readTextFileSync: () => readTextFileSync,\n realPath: () => realPath,\n realPathSync: () => realPathSync,\n remove: () => remove,\n removeSignalListener: () => removeSignalListener,\n removeSync: () => removeSync,\n rename: () => rename,\n renameSync: () => renameSync2,\n resolveDns: () => resolveDns,\n resources: () => resources,\n run: () => run,\n shutdown: () => shutdown,\n stat: () => stat,\n statSync: () => statSync2,\n stderr: () => stderr,\n stdin: () => stdin,\n stdout: () => stdout,\n symlink: () => symlink2,\n symlinkSync: () => symlinkSync2,\n test: () => import_shim_deno_test.test,\n truncate: () => truncate2,\n truncateSync: () => truncateSync2,\n uid: () => uid,\n utime: () => utime,\n utimeSync: () => utimeSync,\n version: () => version,\n watchFs: () => watchFs,\n write: () => write2,\n writeFile: () => writeFile3,\n writeFileSync: () => writeFileSync2,\n writeSync: () => writeSync2,\n writeTextFile: () => writeTextFile,\n writeTextFileSync: () => writeTextFileSync\n});\nvar errors_exports = {};\n__export2(errors_exports, {\n AddrInUse: () => AddrInUse,\n AddrNotAvailable: () => AddrNotAvailable,\n AlreadyExists: () => AlreadyExists,\n BadResource: () => BadResource,\n BrokenPipe: () => BrokenPipe,\n Busy: () => Busy,\n ConnectionAborted: () => ConnectionAborted,\n ConnectionRefused: () => ConnectionRefused,\n ConnectionReset: () => ConnectionReset,\n Http: () => Http,\n Interrupted: () => Interrupted,\n InvalidData: () => InvalidData,\n NotConnected: () => NotConnected,\n NotFound: () => NotFound,\n PermissionDenied: () => PermissionDenied,\n TimedOut: () => TimedOut,\n UnexpectedEof: () => UnexpectedEof,\n WriteZero: () => WriteZero\n});\nvar AddrInUse = class extends Error {\n};\nvar AddrNotAvailable = class extends Error {\n};\nvar AlreadyExists = class extends Error {\n};\nvar BadResource = class extends Error {\n};\nvar BrokenPipe = class extends Error {\n};\nvar Busy = class extends Error {\n};\nvar ConnectionAborted = class extends Error {\n};\nvar ConnectionRefused = class extends Error {\n};\nvar ConnectionReset = class extends Error {\n};\nvar Http = class extends Error {\n};\nvar Interrupted = class extends Error {\n};\nvar InvalidData = class extends Error {\n};\nvar NotConnected = class extends Error {\n};\nvar NotFound = class extends Error {\n code = \"ENOENT\";\n};\nvar PermissionDenied = class extends Error {\n};\nvar TimedOut = class extends Error {\n};\nvar UnexpectedEof = class extends Error {\n};\nvar WriteZero = class extends Error {\n};\nvar mapper = (Ctor) => (err) => Object.assign(new Ctor(err.message), {\n stack: err.stack\n});\nvar map = {\n EEXIST: mapper(AlreadyExists),\n ENOENT: mapper(NotFound),\n EBADF: mapper(BadResource)\n};\nvar isNodeErr = (e) => {\n return e instanceof Error && \"code\" in e;\n};\nfunction mapError(e) {\n if (!isNodeErr(e))\n return e;\n return map[e.code]?.(e) || e;\n}\nvar isWindows = os.platform() === \"win32\";\nfunction denoifyFileInfo(s) {\n return {\n atime: s.atime,\n birthtime: s.birthtime,\n blksize: isWindows ? null : s.blksize,\n blocks: isWindows ? null : s.blocks,\n dev: s.dev,\n gid: isWindows ? null : s.gid,\n ino: isWindows ? null : s.ino,\n isDirectory: s.isDirectory(),\n isFile: s.isFile(),\n isSymlink: s.isSymbolicLink(),\n isBlockDevice: isWindows ? null : s.isBlockDevice(),\n isCharDevice: isWindows ? null : s.isCharacterDevice(),\n isFifo: isWindows ? null : s.isFIFO(),\n isSocket: isWindows ? null : s.isSocket(),\n mode: isWindows ? null : s.mode,\n mtime: s.mtime,\n nlink: isWindows ? null : s.nlink,\n rdev: isWindows ? null : s.rdev,\n size: s.size,\n uid: isWindows ? null : s.uid\n };\n}\nvar stat = async (path) => {\n try {\n return denoifyFileInfo(await nodeStat(path));\n } catch (e) {\n throw mapError(e);\n }\n};\nvar nodeFstat = promisify(fs.fstat);\nvar fstat2 = async function(fd) {\n try {\n return denoifyFileInfo(await nodeFstat(fd));\n } catch (err) {\n throw mapError(err);\n }\n};\nvar fstatSync = function fstatSync2(fd) {\n try {\n return denoifyFileInfo(nodeFstatSync(fd));\n } catch (err) {\n throw mapError(err);\n }\n};\nvar _ftruncate = promisify2(nodeftruncate);\nvar ftruncate = _ftruncate;\nvar ftruncateSync = nodeftruncateSync;\nvar _fdatasync = promisify3(nodefdatasync);\nvar fdatasync = _fdatasync;\nvar fdatasyncSync = nodefdatasyncSync;\nvar _read = promisify4(nodeRead);\nvar read = async function read2(rid, buffer) {\n if (buffer == null) {\n throw new TypeError(\"Buffer must not be null.\");\n }\n if (buffer.length === 0) {\n return 0;\n }\n const { bytesRead } = await _read(rid, buffer, 0, buffer.length, null);\n return bytesRead === 0 ? null : bytesRead;\n};\nvar readSync2 = (fd, buffer) => {\n const bytesRead = fs2.readSync(fd, buffer);\n return bytesRead === 0 ? null : bytesRead;\n};\nvar nodeWrite = promisify5(fs3.write);\nvar write2 = async (fd, data) => {\n const { bytesWritten } = await nodeWrite(fd, data);\n return bytesWritten;\n};\nvar writeSync2 = fs4.writeSync;\nSymbol.dispose ??= /* @__PURE__ */ Symbol(\"Symbol.dispose\");\nSymbol.asyncDispose ??= /* @__PURE__ */ Symbol(\"Symbol.asyncDispose\");\nvar FsFile = class {\n rid;\n #closed = false;\n constructor(rid) {\n this.rid = rid;\n }\n [Symbol.dispose]() {\n if (!this.#closed) {\n this.close();\n }\n }\n async write(p) {\n return await write2(this.rid, p);\n }\n writeSync(p) {\n return writeSync2(this.rid, p);\n }\n async truncate(len) {\n await ftruncate(this.rid, len);\n }\n truncateSync(len) {\n return ftruncateSync(this.rid, len);\n }\n read(p) {\n return read(this.rid, p);\n }\n readSync(p) {\n return readSync2(this.rid, p);\n }\n seek(_offset, _whence) {\n throw new Error(\"Method not implemented.\");\n }\n seekSync(_offset, _whence) {\n throw new Error(\"Method not implemented.\");\n }\n async stat() {\n return await fstat2(this.rid);\n }\n statSync() {\n return fstatSync(this.rid);\n }\n sync() {\n throw new Error(\"Method not implemented.\");\n }\n syncSync() {\n throw new Error(\"Method not implemented.\");\n }\n syncData() {\n return fdatasync(this.rid);\n }\n syncDataSync() {\n return fdatasyncSync(this.rid);\n }\n utime(_atime, _mtime) {\n throw new Error(\"Method not implemented.\");\n }\n utimeSync(_atime, _mtime) {\n throw new Error(\"Method not implemented.\");\n }\n close() {\n this.#closed = true;\n fs5.closeSync(this.rid);\n }\n #readableStream;\n get readable() {\n if (this.#readableStream == null) {\n const nodeStream = fs5.createReadStream(null, {\n fd: this.rid,\n autoClose: false\n });\n this.#readableStream = stream.Readable.toWeb(nodeStream);\n }\n return this.#readableStream;\n }\n #writableStream;\n get writable() {\n if (this.#writableStream == null) {\n const nodeStream = fs5.createWriteStream(null, {\n fd: this.rid,\n autoClose: false\n });\n this.#writableStream = stream.Writable.toWeb(nodeStream);\n }\n return this.#writableStream;\n }\n};\nvar File = FsFile;\nvar PermissionStatus = class extends EventTarget {\n state;\n onchange = null;\n partial = false;\n /** @internal */\n constructor(state) {\n super();\n this.state = state;\n }\n};\nvar Permissions = class {\n query(desc) {\n return Promise.resolve(this.querySync(desc));\n }\n querySync(_desc) {\n return new PermissionStatus(\"granted\");\n }\n revoke(desc) {\n return Promise.resolve(this.revokeSync(desc));\n }\n revokeSync(_desc) {\n return new PermissionStatus(\"denied\");\n }\n request(desc) {\n return this.query(desc);\n }\n requestSync(desc) {\n return this.querySync(desc);\n }\n};\nvar SeekMode;\n(function(SeekMode2) {\n SeekMode2[SeekMode2[\"Start\"] = 0] = \"Start\";\n SeekMode2[SeekMode2[\"Current\"] = 1] = \"Current\";\n SeekMode2[SeekMode2[\"End\"] = 2] = \"End\";\n})(SeekMode || (SeekMode = {}));\nvar arch = process.arch === \"arm64\" ? \"aarch64\" : \"x86_64\";\nvar build = {\n arch,\n os: /* @__PURE__ */ ((p) => p === \"win32\" ? \"windows\" : p === \"darwin\" ? \"darwin\" : \"linux\")(os2.platform()),\n vendor: \"pc\",\n target: ((p) => p === \"win32\" ? `${arch}-pc-windows-msvc` : p === \"darwin\" ? `${arch}-apple-darwin` : `${arch}-unknown-linux-gnu`)(os2.platform())\n};\nvar customInspect = /* @__PURE__ */ Symbol.for(\"nodejs.util.inspect.custom\");\nvar env = {\n get(key) {\n assertValidKey(key);\n return process.env[key];\n },\n set(key, value) {\n assertValidKey(key);\n assertValidValue(value);\n process.env[key] = value;\n },\n has(key) {\n assertValidKey(key);\n return key in process.env;\n },\n delete(key) {\n assertValidKey(key);\n delete process.env[key];\n },\n // @ts-expect-error https://github.com/denoland/deno/issues/10267\n toObject() {\n return { ...process.env };\n }\n};\nvar invalidKeyChars = [\"=\", \"\\0\"].map((c) => c.charCodeAt(0));\nvar invalidValueChar = \"\\0\".charCodeAt(0);\nfunction assertValidKey(key) {\n if (key.length === 0) {\n throw new TypeError(\"Key is an empty string.\");\n }\n for (let i2 = 0; i2 < key.length; i2++) {\n if (invalidKeyChars.includes(key.charCodeAt(i2))) {\n const char = key.charCodeAt(i2) === \"\\0\".charCodeAt(0) ? \"\\\\0\" : key[i2];\n throw new TypeError(`Key contains invalid characters: \"${char}\"`);\n }\n }\n}\nfunction assertValidValue(value) {\n for (let i2 = 0; i2 < value.length; i2++) {\n if (value.charCodeAt(i2) === invalidValueChar) {\n throw new TypeError('Value contains invalid characters: \"\\\\0\"');\n }\n }\n}\nvar mainModule = pathToFileURL(process.argv[1] ?? join(process.cwd(), \"$deno$repl.ts\")).href;\nvar metrics = function metrics2() {\n return {\n opsDispatched: 0,\n opsDispatchedSync: 0,\n opsDispatchedAsync: 0,\n opsDispatchedAsyncUnref: 0,\n opsCompleted: 0,\n opsCompletedSync: 0,\n opsCompletedAsync: 0,\n opsCompletedAsyncUnref: 0,\n bytesSentControl: 0,\n bytesSentData: 0,\n bytesReceived: 0,\n ops: {}\n };\n};\nvar noColor = process.env.NO_COLOR !== void 0;\nvar permissions = new Permissions();\nvar pid = process.pid;\nvar ppid = process.ppid;\nvar resources = function resources2() {\n console.warn([\n \"Deno.resources() shim returns a dummy object that does not update.\",\n \"If you think this is a mistake, raise an issue at https://github.com/denoland/node_deno_shims/issues\"\n ].join(\"\\n\"));\n return {};\n};\nfunction chain(fn, cleanup) {\n let prev;\n return function _fn(...args2) {\n const curr = (prev || Promise.resolve()).then(() => fn(...args2)).finally(cleanup || (() => {\n })).then((result) => {\n if (prev === curr)\n prev = void 0;\n return result;\n });\n return prev = curr;\n };\n}\nvar stdinReadable;\nvar stdin = {\n rid: 0,\n isTerminal() {\n return tty.isatty(this.rid);\n },\n read: chain((p) => {\n return new Promise((resolve2, reject) => {\n process.stdin.resume();\n process.stdin.on(\"error\", onerror);\n process.stdin.once(\"readable\", () => {\n process.stdin.off(\"error\", onerror);\n const data = process.stdin.read(p.length) ?? process.stdin.read();\n if (data) {\n p.set(data);\n resolve2(data.length > 0 ? data.length : null);\n } else {\n resolve2(null);\n }\n });\n function onerror(error) {\n reject(error);\n process.stdin.off(\"error\", onerror);\n }\n });\n }, () => process.stdin.pause()),\n get readable() {\n if (stdinReadable == null) {\n stdinReadable = stream2.Readable.toWeb(process.stdin);\n }\n return stdinReadable;\n },\n readSync(buffer) {\n return readSync2(this.rid, buffer);\n },\n close() {\n process.stdin.destroy();\n },\n setRaw(mode, options) {\n if (options?.cbreak) {\n throw new Error(\"The cbreak option is not implemented.\");\n }\n process.stdin.setRawMode(mode);\n }\n};\nvar stdoutWritable;\nvar stdout = {\n rid: 1,\n isTerminal() {\n return tty.isatty(this.rid);\n },\n write: chain((p) => {\n return new Promise((resolve2) => {\n const result = process.stdout.write(p);\n if (!result) {\n process.stdout.once(\"drain\", () => resolve2(p.length));\n } else {\n resolve2(p.length);\n }\n });\n }),\n get writable() {\n if (stdoutWritable == null) {\n stdoutWritable = stream2.Writable.toWeb(process.stdout);\n }\n return stdoutWritable;\n },\n writeSync(data) {\n return writeSync2(this.rid, data);\n },\n close() {\n process.stdout.destroy();\n }\n};\nvar stderrWritable;\nvar stderr = {\n rid: 2,\n isTerminal() {\n return tty.isatty(this.rid);\n },\n write: chain((p) => {\n return new Promise((resolve2) => {\n const result = process.stderr.write(p);\n if (!result) {\n process.stderr.once(\"drain\", () => resolve2(p.length));\n } else {\n resolve2(p.length);\n }\n });\n }),\n get writable() {\n if (stderrWritable == null) {\n stderrWritable = stream2.Writable.toWeb(process.stderr);\n }\n return stderrWritable;\n },\n writeSync(data) {\n return writeSync2(this.rid, data);\n },\n close() {\n process.stderr.destroy();\n }\n};\nvar deno = \"1.40.2\";\nvar typescript = \"5.3.3\";\nvar version = {\n deno,\n typescript,\n v8: process.versions.v8\n};\nfunction denoSignalToNodeJs(signal) {\n if (signal === \"SIGEMT\") {\n throw new Error(\"SIGEMT is not supported\");\n }\n return signal;\n}\nvar addSignalListener = (signal, handler) => {\n ps.addListener(denoSignalToNodeJs(signal), handler);\n};\nvar chdir = function(path) {\n try {\n return process.chdir(path instanceof URL ? fileURLToPath(path) : path);\n } catch (error) {\n if (error?.code === \"ENOENT\") {\n throw new errors_exports.NotFound(`No such file or directory (os error 2), chdir '${path}'`);\n }\n throw mapError(error);\n }\n};\nvar chmod22 = fs6.chmod;\nvar chmodSync22 = fs7.chmodSync;\nvar chown2 = async (path, uid2, gid2) => await fs8.chown(path, uid2 ?? -1, gid2 ?? -1);\nvar chownSync2 = (path, uid2, gid2) => fs9.chownSync(path, uid2 ?? -1, gid2 ?? -1);\nvar close = fs10.closeSync;\nvar Conn = class extends FsFile {\n rid;\n localAddr;\n remoteAddr;\n #socket;\n constructor(rid, localAddr, remoteAddr, socket) {\n super(rid);\n this.rid = rid;\n this.localAddr = localAddr;\n this.remoteAddr = remoteAddr;\n this.#socket = socket || new Socket({ fd: rid });\n }\n [Symbol.dispose]() {\n this.close();\n }\n async closeWrite() {\n await new Promise((resolve2) => this.#socket.end(resolve2));\n }\n setNoDelay(enable) {\n this.#socket.setNoDelay(enable);\n }\n setKeepAlive(enable) {\n this.#socket.setKeepAlive(enable);\n }\n ref() {\n this.#socket.ref();\n }\n unref() {\n this.#socket.unref();\n }\n async read(p) {\n try {\n return await super.read(p);\n } catch (error) {\n if (!(error instanceof Error && \"code\" in error && error.code == \"EAGAIN\")) {\n throw error;\n }\n }\n await once(this.#socket, \"readable\");\n return await super.read(p);\n }\n};\nvar TlsConn = class extends Conn {\n handshake() {\n console.warn(\"@deno/shim-deno: Handshake is not supported.\");\n return Promise.resolve({\n alpnProtocol: null\n });\n }\n};\nvar connect = function connect2(options) {\n if (options.transport === \"unix\") {\n throw new Error(\"Unstable UnixConnectOptions is not implemented\");\n }\n const { transport = \"tcp\", hostname: hostname4 = \"127.0.0.1\", port } = options;\n if (transport !== \"tcp\") {\n throw new Error(\"Deno.connect is only implemented for transport: tcp\");\n }\n const socket = createConnection({ port, host: hostname4 });\n socket.on(\"error\", (err) => console.error(err));\n return new Promise((resolve2) => {\n socket.once(\"connect\", () => {\n const rid = socket._handle.fd;\n const localAddr = {\n // cannot be undefined while socket is connected\n hostname: socket.localAddress,\n port: socket.localPort,\n transport: \"tcp\"\n };\n const remoteAddr = {\n // cannot be undefined while socket is connected\n hostname: socket.remoteAddress,\n port: socket.remotePort,\n transport: \"tcp\"\n };\n resolve2(new Conn(rid, localAddr, remoteAddr, socket));\n });\n });\n};\nvar readTextFile = async (path, { signal } = {}) => {\n try {\n return await readFile(path, { encoding: \"utf8\", signal });\n } catch (e) {\n throw mapError(e);\n }\n};\nvar connectTls = async function connectTls2({ port, hostname: hostname4 = \"127.0.0.1\", certFile }) {\n const cert = certFile && await readTextFile(certFile);\n const socket = tlsConnect({ port, host: hostname4, cert });\n return new Promise((resolve2) => {\n socket.on(\"connect\", () => {\n const rid = socket._handle.fd;\n const localAddr = {\n // cannot be undefined while socket is connected\n hostname: socket.localAddress,\n port: socket.localPort,\n transport: \"tcp\"\n };\n const remoteAddr = {\n // cannot be undefined while socket is connected\n hostname: socket.remoteAddress,\n port: socket.remotePort,\n transport: \"tcp\"\n };\n resolve2(new TlsConn(rid, localAddr, remoteAddr, socket));\n });\n });\n};\nvar consoleSize = function consoleSize2() {\n const pipes = [process.stderr, process.stdout];\n for (const pipe of pipes) {\n if (pipe.columns != null) {\n const { columns, rows } = pipe;\n return { columns, rows };\n }\n }\n throw new Error(\"The handle is invalid.\");\n};\nvar DEFAULT_BUFFER_SIZE = 32 * 1024;\nvar copy = async function copy2(src, dst, options) {\n let n = 0;\n const bufSize = options?.bufSize ?? DEFAULT_BUFFER_SIZE;\n const b = new Uint8Array(bufSize);\n let gotEOF = false;\n while (gotEOF === false) {\n const result = await src.read(b);\n if (result === null) {\n gotEOF = true;\n } else {\n let nwritten = 0;\n while (nwritten < result) {\n nwritten += await dst.write(b.subarray(nwritten, result));\n }\n n += nwritten;\n }\n }\n return n;\n};\nvar copyFile2 = async (src, dest) => {\n try {\n await fs11.copyFile(src, dest);\n } catch (error) {\n if (error?.code === \"ENOENT\") {\n throw new NotFound(`File not found, copy '${src}' -> '${dest}'`);\n }\n throw mapError(error);\n }\n};\nvar copyFileSync2 = (src, dest) => {\n try {\n fs12.copyFileSync(src, dest);\n } catch (error) {\n if (error?.code === \"ENOENT\") {\n throw new NotFound(`File not found, copy '${src}' -> '${dest}'`);\n }\n throw mapError(error);\n }\n};\nvar { O_APPEND, O_CREAT, O_EXCL, O_RDONLY, O_RDWR, O_TRUNC, O_WRONLY } = constants;\nfunction getAccessFlag(opts) {\n if (opts.read && !opts.write && !opts.append)\n return O_RDONLY;\n if (!opts.read && opts.write && !opts.append)\n return O_WRONLY;\n if (opts.read && opts.write && !opts.append)\n return O_RDWR;\n if (!opts.read && opts.append)\n return O_WRONLY | O_APPEND;\n if (opts.read && opts.append)\n return O_RDWR | O_APPEND;\n if (!opts.read && !opts.write && !opts.append) {\n throw new BadResource(\"EINVAL: One of 'read', 'write', 'append' is required to open file.\");\n }\n throw new BadResource(\"EINVAL: Invalid fs flags.\");\n}\nfunction getCreationFlag(opts) {\n if (!opts.write && !opts.append) {\n if (opts.truncate || opts.create || opts.createNew) {\n throw new BadResource(\"EINVAL: One of 'write', 'append' is required to 'truncate', 'create' or 'createNew' file.\");\n }\n }\n if (opts.append) {\n if (opts.truncate && !opts.createNew) {\n throw new BadResource(\"EINVAL: unexpected 'truncate': true and 'createNew': false when 'append' is true.\");\n }\n }\n if (!opts.create && !opts.truncate && !opts.createNew)\n return 0;\n if (opts.create && !opts.truncate && !opts.createNew)\n return O_CREAT;\n if (!opts.create && opts.truncate && !opts.createNew) {\n if (os3.platform() === \"win32\") {\n return O_CREAT | O_TRUNC;\n } else {\n return O_TRUNC;\n }\n }\n if (opts.create && opts.truncate && !opts.createNew) {\n return O_CREAT | O_TRUNC;\n }\n if (opts.createNew)\n return O_CREAT | O_EXCL;\n throw new BadResource(\"EINVAL: Invalid fs flags.\");\n}\nfunction getFsFlag(flags) {\n return getAccessFlag(flags) | getCreationFlag(flags);\n}\nvar nodeOpen = promisify6(_open);\nvar open = async function open2(path, { read: read3, write: write3, append, truncate: truncate3, create: create3, createNew, mode = 438 } = {\n read: true\n}) {\n const flagMode = getFsFlag({\n read: read3,\n write: write3,\n append,\n truncate: truncate3,\n create: create3,\n createNew\n });\n try {\n const fd = await nodeOpen(path, flagMode, mode);\n return new File(fd);\n } catch (err) {\n throw mapError(err);\n }\n};\nvar create = async function create2(path) {\n return await open(path, { write: true, create: true, truncate: true });\n};\nvar openSync = function openSync2(path, { read: read3, write: write3, append, truncate: truncate3, create: create3, createNew, mode = 438 } = {\n read: true\n}) {\n const flagMode = getFsFlag({\n read: read3,\n write: write3,\n append,\n truncate: truncate3,\n create: create3,\n createNew\n });\n try {\n const fd = nodeOpenSync(path, flagMode, mode);\n return new File(fd);\n } catch (err) {\n throw mapError(err);\n }\n};\nvar createSync = function createSync2(path) {\n return openSync(path, {\n create: true,\n truncate: true,\n read: true,\n write: true\n });\n};\nvar cwd = process.cwd;\nvar execPath = () => import_which.default.sync(\"deno\");\nvar exit = function exit2(code) {\n return process.exit(code);\n};\nvar fsync = function fsync2(rid) {\n return promisify7(nodeFsync)(rid);\n};\nvar fsyncSync = function fsyncSync2(rid) {\n return nodeFsyncSync(rid);\n};\nvar gid = ps2.getgid ?? (() => null);\nvar hostname2 = function hostname3() {\n return os4.hostname();\n};\nvar inspect2 = (value, options = {}) => util.inspect(value, options);\nvar kill = function(pid2, signo) {\n if (pid2 < 0 && os5.platform() === \"win32\") {\n throw new TypeError(\"Invalid pid\");\n }\n ps3.kill(pid2, signo);\n};\nvar link2 = fs13.link;\nvar linkSync2 = fs14.linkSync;\nvar Listener = class {\n rid;\n addr;\n #listener;\n constructor(rid, addr, listener) {\n this.rid = rid;\n this.addr = addr;\n this.#listener = listener;\n }\n [Symbol.dispose]() {\n this.close();\n }\n async accept() {\n if (!this.#listener) {\n throw new BadResource(\"Listener not initialised\");\n }\n const result = await this.#listener.next();\n if (result.done) {\n throw new BadResource(\"Server not listening\");\n }\n return result.value;\n }\n async next() {\n let conn;\n try {\n conn = await this.accept();\n } catch (error) {\n if (error instanceof BadResource) {\n return { value: void 0, done: true };\n }\n throw error;\n }\n return { value: conn, done: false };\n }\n return(value) {\n this.close();\n return Promise.resolve({ value, done: true });\n }\n close() {\n close(this.rid);\n }\n ref() {\n throw new Error(\"Not implemented\");\n }\n unref() {\n throw new Error(\"Not implemented\");\n }\n [Symbol.asyncIterator]() {\n return this;\n }\n};\nasync function* _listen(server, waitFor) {\n await waitFor;\n while (server.listening) {\n yield new Promise((resolve2) => server.once(\"connection\", (socket) => {\n socket.on(\"error\", (err) => console.error(err));\n const rid = socket._handle.fd;\n const localAddr = {\n // cannot be undefined while socket is connected\n hostname: socket.localAddress,\n port: socket.localPort,\n transport: \"tcp\"\n };\n const remoteAddr = {\n // cannot be undefined while socket is connected\n hostname: socket.remoteAddress,\n port: socket.remotePort,\n transport: \"tcp\"\n };\n resolve2(new Conn(rid, localAddr, remoteAddr));\n }));\n }\n}\nvar listen = function listen2(options) {\n if (options.transport === \"unix\") {\n throw new Error(\"Unstable UnixListenOptions is not implemented\");\n }\n const { port, hostname: hostname4 = \"0.0.0.0\", transport = \"tcp\" } = options;\n if (transport !== \"tcp\") {\n throw new Error(\"Deno.listen is only implemented for transport: tcp\");\n }\n const server = createServer();\n const waitFor = new Promise((resolve2) => (\n // server._handle.fd is assigned immediately on .listen()\n server.listen(port, hostname4, resolve2)\n ));\n const listener = new Listener(server._handle.fd, {\n hostname: hostname4,\n port,\n transport: \"tcp\"\n }, _listen(server, waitFor));\n return listener;\n};\nvar readTextFileSync = function(path) {\n try {\n return fs15.readFileSync(path, \"utf8\");\n } catch (e) {\n throw mapError(e);\n }\n};\nasync function* _listen2(server, waitFor) {\n await waitFor;\n while (server.listening) {\n yield new Promise((resolve2) => server.once(\"secureConnection\", (socket) => {\n socket.on(\"error\", (err) => console.error(err));\n const rid = socket._handle.fd;\n const localAddr = {\n // cannot be undefined while socket is connected\n hostname: socket.localAddress,\n port: socket.localPort,\n transport: \"tcp\"\n };\n const remoteAddr = {\n // cannot be undefined while socket is connected\n hostname: socket.remoteAddress,\n port: socket.remotePort,\n transport: \"tcp\"\n };\n resolve2(new TlsConn(rid, localAddr, remoteAddr));\n }));\n }\n}\nvar listenTls = function listen3({ port, hostname: hostname4 = \"0.0.0.0\", transport = \"tcp\", certFile, keyFile }) {\n if (transport !== \"tcp\") {\n throw new Error(\"Deno.listen is only implemented for transport: tcp\");\n }\n const [cert, key] = [certFile, keyFile].map((f) => f == null ? void 0 : readTextFileSync(f));\n const server = createServer2({ cert, key });\n const waitFor = new Promise((resolve2) => (\n // server._handle.fd is assigned immediately on .listen()\n server.listen(port, hostname4, resolve2)\n ));\n const listener = new Listener(server._handle.fd, {\n hostname: hostname4,\n port,\n transport: \"tcp\"\n }, _listen2(server, waitFor));\n return listener;\n};\nvar loadavg2 = function loadavg3() {\n return os6.loadavg();\n};\nvar lstat2 = async (path) => {\n try {\n return denoifyFileInfo(await fs16.lstat(path));\n } catch (e) {\n throw mapError(e);\n }\n};\nvar lstatSync2 = (path) => {\n try {\n return denoifyFileInfo(fs17.lstatSync(path));\n } catch (err) {\n throw mapError(err);\n }\n};\nvar makeTempDir = function makeTempDir2({ prefix = \"\" } = {}) {\n return mkdtemp(join2(tmpdir(), prefix || \"/\"));\n};\nvar makeTempDirSync = function makeTempDirSync2({ prefix = \"\" } = {}) {\n return mkdtempSync(join3(tmpdir2(), prefix || \"/\"));\n};\nvar randomId = () => {\n const n = (Math.random() * 1048575 * 1e6).toString(16);\n return \"\" + n.slice(0, 6);\n};\nvar writeTextFile = async function writeTextFile2(path, data, { append = false, create: create3 = true, createNew = false, mode, signal } = {}) {\n const truncate3 = create3 && !append;\n const flag = getFsFlag({\n append,\n create: create3,\n createNew,\n truncate: truncate3,\n write: true\n });\n try {\n await fs18.writeFile(path, data, { flag, mode, signal });\n if (mode !== void 0)\n await fs18.chmod(path, mode);\n } catch (error) {\n throw mapError(error);\n }\n};\nvar makeTempFile = async function makeTempFile2({ prefix = \"\" } = {}) {\n const name = join4(tmpdir3(), prefix, randomId());\n await writeTextFile(name, \"\");\n return name;\n};\nvar writeTextFileSync = (path, data, { append = false, create: create3 = true, mode } = {}) => {\n const flag = create3 ? append ? \"a\" : \"w\" : \"r+\";\n try {\n fs19.writeFileSync(path, data, { flag, mode });\n if (mode !== void 0)\n fs19.chmodSync(path, mode);\n } catch (error) {\n throw mapError(error);\n }\n};\nvar makeTempFileSync = function makeTempFileSync2({ prefix = \"\" } = {}) {\n const name = join5(tmpdir4(), prefix, randomId());\n writeTextFileSync(name, \"\");\n return name;\n};\nvar memoryUsage = process.memoryUsage;\nvar mkdir = async function mkdir2(path, options) {\n try {\n await nodeMkdir(path, options);\n } catch (error) {\n if (error?.code === \"EEXIST\") {\n throw new errors_exports.AlreadyExists(`File exists (os error 17), mkdir '${path}'`);\n }\n throw mapError(error);\n }\n};\nvar mkdirSync2 = (path, options) => {\n try {\n fs20.mkdirSync(path, options);\n } catch (error) {\n if (error?.code === \"EEXIST\") {\n throw new errors_exports.AlreadyExists(`File exists (os error 17), mkdir '${path}'`);\n }\n throw mapError(error);\n }\n};\nvar osRelease = function osRelease2() {\n return release();\n};\nvar osUptime = function osUptime2() {\n return uptime();\n};\nvar readDir = async function* readDir2(path) {\n try {\n for await (const e of await opendir(String(path))) {\n const ent = {\n name: e.name,\n isFile: e.isFile(),\n isDirectory: e.isDirectory(),\n isSymlink: e.isSymbolicLink()\n };\n yield ent;\n }\n } catch (e) {\n throw mapError(e);\n }\n};\nvar readDirSync = function* readDir3(path) {\n try {\n for (const e of nodeReadDir(String(path), { withFileTypes: true })) {\n const ent = {\n name: e.name,\n isFile: e.isFile(),\n isDirectory: e.isDirectory(),\n isSymlink: e.isSymbolicLink()\n };\n yield ent;\n }\n } catch (e) {\n throw mapError(e);\n }\n};\nvar readFile2 = async function readFile3(path, { signal } = {}) {\n try {\n const buf = await nodeReadFile(path, { signal });\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);\n } catch (e) {\n throw mapError(e);\n }\n};\nvar readFileSync2 = function readFileSync3(path) {\n try {\n const buf = nodeReadFile2(path);\n return new Uint8Array(buf.buffer, buf.byteOffset, buf.length);\n } catch (e) {\n throw mapError(e);\n }\n};\nvar readLink = fs21.readlink;\nvar readLinkSync = fs22.readlinkSync;\nvar realPath = fs23.realpath;\nvar realPathSync = fs24.realpathSync;\nvar remove = async function remove2(path, options = {}) {\n const innerOptions = options.recursive ? { recursive: true, force: true } : {};\n try {\n return await rm(path, innerOptions);\n } catch (err) {\n if (err.code === \"ERR_FS_EISDIR\") {\n return await rmdir(path, innerOptions);\n } else {\n throw err;\n }\n }\n};\nvar removeSignalListener = (signal, handler) => {\n ps4.removeListener(signal, handler);\n};\nvar removeSync = (path, options = {}) => {\n const innerOptions = options.recursive ? { recursive: true, force: true } : {};\n try {\n fs25.rmSync(path, innerOptions);\n } catch (err) {\n if (err.code === \"ERR_FS_EISDIR\") {\n fs25.rmdirSync(path, innerOptions);\n } else {\n throw err;\n }\n }\n};\nvar rename = function rename2(oldpath, newpath) {\n return nodeRename(oldpath, newpath);\n};\nvar renameSync2 = fs26.renameSync;\nvar resolveDns = function resolveDns2(query, recordType, options) {\n if (options) {\n throw Error(`resolveDns option not implemnted yet`);\n }\n switch (recordType) {\n case \"A\":\n case \"AAAA\":\n case \"CNAME\":\n case \"NS\":\n case \"PTR\":\n return new Promise((resolve2, reject) => {\n dns.resolve(query, recordType, (err, addresses) => {\n if (err) {\n reject(err);\n } else {\n resolve2(addresses);\n }\n });\n });\n case \"ANAME\":\n case \"CAA\":\n case \"MX\":\n case \"NAPTR\":\n case \"SOA\":\n case \"SRV\":\n case \"TXT\":\n default:\n throw Error(`resolveDns type ${recordType} not implemnted yet`);\n }\n};\nvar BufferStreamReader = class {\n #stream;\n #error;\n #ended = false;\n #pendingActions = [];\n constructor(stream3) {\n this.#stream = stream3;\n this.#stream.pause();\n this.#stream.on(\"error\", (error) => {\n this.#error = error;\n this.#runPendingActions();\n });\n this.#stream.on(\"readable\", () => {\n this.#runPendingActions();\n });\n this.#stream.on(\"end\", () => {\n this.#ended = true;\n this.#runPendingActions();\n });\n }\n readAll() {\n return new Promise((resolve2, reject) => {\n const chunks = [];\n const action = () => {\n if (this.#error) {\n reject(this.#error);\n return;\n }\n const buffer = this.#stream.read();\n if (buffer != null) {\n chunks.push(buffer);\n this.#pendingActions.push(action);\n } else if (this.#ended) {\n const result = Buffer.concat(chunks);\n resolve2(result);\n } else {\n this.#pendingActions.push(action);\n }\n };\n action();\n });\n }\n read(p) {\n return new Promise((resolve2, reject) => {\n const action = () => {\n if (this.#error) {\n reject(this.#error);\n return;\n }\n const readBuffer = this.#stream.read(p.byteLength);\n if (readBuffer && readBuffer.byteLength > 0) {\n readBuffer.copy(p, 0, 0, readBuffer.byteLength);\n resolve2(readBuffer.byteLength);\n return;\n }\n if (this.#ended) {\n resolve2(null);\n } else {\n this.#pendingActions.push(action);\n }\n };\n action();\n });\n }\n #runPendingActions() {\n const errors = [];\n for (const action of this.#pendingActions.splice(0)) {\n try {\n action();\n } catch (err) {\n errors.push(err);\n }\n }\n if (errors.length > 0) {\n throw errors.length > 1 ? new globalThis.AggregateError(errors) : errors[0];\n }\n }\n};\nvar StreamWriter = class {\n #stream;\n constructor(stream3) {\n this.#stream = stream3;\n }\n write(p) {\n return new Promise((resolve2, reject) => {\n this.#stream.write(p, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve2(p.byteLength);\n }\n });\n });\n }\n};\nvar run = function run2(options) {\n const [cmd, ...args2] = options.cmd;\n if (options.cwd && !fs27.existsSync(options.cwd)) {\n throw new Error(\"The directory name is invalid.\");\n }\n const commandName = getCmd(cmd);\n if (!import_which2.default.sync(commandName, { nothrow: true })) {\n throw new NotFound(\"The system cannot find the file specified.\");\n }\n const process2 = childProcess.spawn(commandName, args2, {\n cwd: options.cwd,\n env: getEnv(options),\n uid: options.uid,\n gid: options.gid,\n shell: false,\n stdio: [\n getStdio(options.stdin, \"in\"),\n getStdio(options.stdout, \"out\"),\n getStdio(options.stderr, \"out\")\n ]\n });\n return new Process(process2);\n};\nfunction getStdio(value, kind) {\n if (value === \"inherit\" || value == null) {\n return \"inherit\";\n } else if (value === \"piped\") {\n return \"pipe\";\n } else if (value === \"null\") {\n return \"ignore\";\n } else if (typeof value === \"number\") {\n switch (kind) {\n case \"in\":\n return fs27.createReadStream(null, { fd: value });\n case \"out\":\n return fs27.createWriteStream(null, { fd: value });\n default: {\n const _assertNever = kind;\n throw new Error(\"Unreachable.\");\n }\n }\n } else {\n const _assertNever = value;\n throw new Error(\"Unknown value.\");\n }\n}\nfunction getCmd(firstArg) {\n if (firstArg instanceof URL) {\n return url.fileURLToPath(firstArg);\n } else {\n return firstArg;\n }\n}\nfunction getEnv(options) {\n const env2 = options.env ?? {};\n for (const name in process.env) {\n if (!Object.prototype.hasOwnProperty.call(env2, name)) {\n if (options.clearEnv) {\n if (os7.platform() === \"win32\") {\n env2[name] = \"\";\n } else {\n delete env2[name];\n }\n } else {\n env2[name] = process.env[name];\n }\n }\n }\n return env2;\n}\nvar Process = class {\n #process;\n #stderr;\n #stdout;\n #stdin;\n #status;\n #receivedStatus = false;\n /** @internal */\n constructor(process2) {\n this.#process = process2;\n this.#stdout = ProcessReadStream.fromNullable(this.#process.stdout) ?? null;\n this.#stderr = ProcessReadStream.fromNullable(this.#process.stderr) ?? null;\n this.#stdin = ProcessWriteStream.fromNullable(this.#process.stdin) ?? null;\n this.#status = once2(process2, \"exit\");\n }\n get rid() {\n return NaN;\n }\n get pid() {\n return this.#process.pid;\n }\n get stdin() {\n return this.#stdin;\n }\n get stdout() {\n return this.#stdout;\n }\n get stderr() {\n return this.#stderr;\n }\n async status() {\n const [receivedCode, signalName] = await this.#status;\n const signal = signalName ? os7.constants.signals[signalName] : receivedCode > 128 ? receivedCode - 128 : void 0;\n const code = receivedCode != null ? receivedCode : signal != null ? 128 + signal : void 0;\n const success = code === 0;\n this.#receivedStatus = true;\n return { code, signal, success };\n }\n async output() {\n if (!this.#stdout) {\n throw new TypeError(\"stdout was not piped\");\n }\n const result = await this.#stdout.readAll();\n this.#stdout.close();\n return result;\n }\n async stderrOutput() {\n if (!this.#stderr) {\n throw new TypeError(\"stderr was not piped\");\n }\n const result = await this.#stderr.readAll();\n this.#stderr.close();\n return result;\n }\n close() {\n this.#process.unref();\n this.#process.kill();\n }\n kill(signo = \"SIGTERM\") {\n if (this.#receivedStatus) {\n throw new NotFound(\"entity not found\");\n }\n this.#process.kill(signo);\n }\n};\nvar ProcessReadStream = class _ProcessReadStream {\n #stream;\n #bufferStreamReader;\n #closed = false;\n constructor(stream3) {\n this.#stream = stream3;\n this.#bufferStreamReader = new BufferStreamReader(stream3);\n }\n static fromNullable(stream3) {\n return stream3 ? new _ProcessReadStream(stream3) : void 0;\n }\n readAll() {\n if (this.#closed) {\n return Promise.resolve(new Uint8Array(0));\n } else {\n return this.#bufferStreamReader.readAll();\n }\n }\n read(p) {\n if (this.#closed) {\n return Promise.resolve(null);\n } else {\n return this.#bufferStreamReader.read(p);\n }\n }\n close() {\n this.#closed = true;\n this.#stream.destroy();\n }\n get readable() {\n throw new Error(\"Not implemented.\");\n }\n get writable() {\n throw new Error(\"Not implemented.\");\n }\n};\nvar ProcessWriteStream = class _ProcessWriteStream {\n #stream;\n #streamWriter;\n #closed = false;\n constructor(stream3) {\n this.#stream = stream3;\n this.#streamWriter = new StreamWriter(stream3);\n }\n static fromNullable(stream3) {\n return stream3 ? new _ProcessWriteStream(stream3) : void 0;\n }\n write(p) {\n if (this.#closed) {\n return Promise.resolve(0);\n } else {\n return this.#streamWriter.write(p);\n }\n }\n close() {\n this.#closed = true;\n this.#stream.end();\n }\n};\nvar shutdown = async function shutdown2(rid) {\n await new Promise((resolve2) => new Socket2({ fd: rid }).end(resolve2));\n};\nvar statSync2 = (path) => {\n try {\n return denoifyFileInfo(fs28.statSync(path));\n } catch (err) {\n throw mapError(err);\n }\n};\nvar symlink2 = async (oldpath, newpath, options) => await fs29.symlink(oldpath, newpath, options?.type);\nvar symlinkSync2 = (oldpath, newpath, options) => fs30.symlinkSync(oldpath, newpath, options?.type);\nvar truncate2 = async (name, len) => {\n try {\n return await fs31.truncate(name, len);\n } catch (error) {\n if (error?.code === \"ENOENT\") {\n throw new errors_exports.NotFound(`No such file or directory (os error 2), truncate '${name}'`);\n }\n throw mapError(error);\n }\n};\nvar truncateSync2 = (name, len) => {\n try {\n return fs32.truncateSync(name, len);\n } catch (error) {\n if (error?.code === \"ENOENT\") {\n throw new errors_exports.NotFound(`No such file or directory (os error 2), truncate '${name}'`);\n }\n throw mapError(error);\n }\n};\nvar uid = ps5.getuid ?? (() => null);\nfunction* map2(iter, f) {\n for (const i2 of iter) {\n yield f(i2);\n }\n}\nasync function* mapAsync(iter, f) {\n for await (const i2 of iter) {\n yield f(i2);\n }\n}\nasync function* filterAsync(iter, filter) {\n for await (const i2 of iter) {\n if (filter(i2)) {\n yield i2;\n }\n }\n}\nasync function* merge(iterables) {\n const racers = new Map(map2(map2(iterables, (iter) => iter[Symbol.asyncIterator]()), (iter) => [iter, iter.next()]));\n while (racers.size > 0) {\n const winner = await Promise.race(map2(racers.entries(), ([iter, prom]) => prom.then((result) => ({ result, iter }))));\n if (winner.result.done) {\n racers.delete(winner.iter);\n } else {\n yield await winner.result.value;\n racers.set(winner.iter, winner.iter.next());\n }\n }\n}\nvar watchFs = function watchFs2(paths, options = { recursive: true }) {\n paths = Array.isArray(paths) ? paths : [paths];\n const ac = new AbortController();\n const { signal } = ac;\n const rid = -1;\n const masterWatcher = merge(paths.map((path) => mapAsync(filterAsync(watch(path, { recursive: options?.recursive, signal }), (info) => info.filename != null), (info) => ({\n kind: \"modify\",\n paths: [resolve(path, info.filename)]\n }))));\n function close2() {\n ac.abort();\n }\n return Object.assign(masterWatcher, {\n rid,\n close: close2,\n [Symbol.dispose]: close2\n });\n};\nvar writeFile3 = async function writeFile4(path, data, { append = false, create: create3 = true, createNew = false, mode, signal } = {}) {\n const truncate3 = create3 && !append;\n const flag = getFsFlag({ append, create: create3, createNew, truncate: truncate3, write: true });\n try {\n await fs33.writeFile(path, data, { flag, signal });\n if (mode != null)\n await fs33.chmod(path, mode);\n } catch (error) {\n throw mapError(error);\n }\n};\nvar writeFileSync2 = function writeFileSync3(path, data, options = {}) {\n try {\n if (options.create !== void 0) {\n const create3 = !!options.create;\n if (!create3) {\n statSync2(path);\n }\n }\n const openOptions = {\n write: true,\n create: true,\n createNew: options.createNew,\n append: !!options.append,\n truncate: !options.append\n };\n const file = openSync(path, openOptions);\n if (options.mode !== void 0 && options.mode !== null && platform3() !== \"win32\") {\n chmodSync22(path, options.mode);\n }\n let nwritten = 0;\n while (nwritten < data.length) {\n nwritten += file.writeSync(data.subarray(nwritten));\n }\n file.close();\n } catch (e) {\n throw mapError(e);\n }\n};\nvar args = process.argv.slice(2);\nvar futime = async function(rid, atime, mtime) {\n try {\n await new Promise((resolve2, reject) => {\n fs34.futimes(rid, atime, mtime, (err) => {\n if (err) {\n reject(err);\n } else {\n resolve2();\n }\n });\n });\n } catch (error) {\n throw mapError(error);\n }\n};\nvar futimeSync = function(rid, atime, mtime) {\n try {\n fs34.futimesSync(rid, atime, mtime);\n } catch (error) {\n throw mapError(error);\n }\n};\nvar utime = async function(path, atime, mtime) {\n try {\n await fs34.promises.utimes(path, atime, mtime);\n } catch (error) {\n if (error?.code === \"ENOENT\") {\n throw new errors_exports.NotFound(`No such file or directory (os error 2), utime '${path}'`);\n }\n throw mapError(error);\n }\n};\nvar utimeSync = function(path, atime, mtime) {\n try {\n fs34.utimesSync(path, atime, mtime);\n } catch (error) {\n if (error?.code === \"ENOENT\") {\n throw new errors_exports.NotFound(`No such file or directory (os error 2), utime '${path}'`);\n }\n throw mapError(error);\n }\n};\n\n// src/shim/entry.ts\nimport { Buffer as Buffer2 } from \"node:buffer\";\n\n// src/private-data-sources/runtime-environment.ts\nimport {\n currentWorkerRuntimeContext,\n workerEnvironment\n} from \"base44:internal/runtime-context\";\n\n// src/static-egress-marker.ts\nvar STATIC_EGRESS_ARTIFACT_MARKER = \"base44.static-egress.request-env.v2\";\n\n// src/static-egress.ts\nvar STATIC_EGRESS_BINDING_NAME = \"STATIC_EGRESS\";\nvar PRIVATE_DATA_SOURCES_MANIFEST_ENV = \"BASE44_PRIVATE_DATA_SOURCES\";\nvar STATIC_EGRESS_EXCLUDED_HOSTS_ENV = \"BASE44_STATIC_EGRESS_EXCLUDED_HOSTS\";\nvar STATIC_EGRESS_ENABLED_ENV = \"BASE44_STATIC_EGRESS_ENABLED\";\nvar STATIC_EGRESS_DIAGNOSTIC_LIMIT = 5;\nvar staticEgressFetchInstalled = false;\nvar staticEgressDiagnosticCount = 0;\nfunction inputKind(input) {\n if (typeof input === \"string\") return \"string\";\n return input instanceof URL ? \"url\" : \"request\";\n}\nfunction logStaticEgressDecision(route, input, binding, enableSecret) {\n if (staticEgressDiagnosticCount >= STATIC_EGRESS_DIAGNOSTIC_LIMIT) return;\n staticEgressDiagnosticCount += 1;\n console.log(JSON.stringify({\n b44_diagnostic: \"static_egress\",\n diagnostic_version: STATIC_EGRESS_ARTIFACT_MARKER,\n event: \"fetch_route\",\n route,\n input_kind: inputKind(input),\n binding_present: binding !== void 0,\n binding_type: typeof binding,\n enable_secret_present: enableSecret !== void 0,\n enable_secret_enabled: isEnabled(enableSecret),\n binding_fetch_type: binding !== null && typeof binding === \"object\" ? typeof binding.fetch : \"undefined\"\n }));\n}\nfunction hasFetch(value) {\n return value !== null && typeof value === \"object\" && typeof value.fetch === \"function\";\n}\nfunction isEnabled(value) {\n return value === \"1\";\n}\nfunction privateDataSourceHosts(raw) {\n if (typeof raw !== \"string\" || !raw) return /* @__PURE__ */ new Set();\n try {\n const parsed = JSON.parse(raw);\n if (!Array.isArray(parsed)) return /* @__PURE__ */ new Set();\n return new Set(\n parsed.flatMap((entry) => {\n if (entry === null || typeof entry !== \"object\") return [];\n const host = entry.host;\n return typeof host === \"string\" && host ? [normalizeHostname(host)] : [];\n })\n );\n } catch {\n return /* @__PURE__ */ new Set();\n }\n}\nfunction configuredExcludedHosts(raw) {\n if (typeof raw !== \"string\" || !raw) return /* @__PURE__ */ new Set();\n try {\n const parsed = JSON.parse(raw);\n if (!Array.isArray(parsed)) return /* @__PURE__ */ new Set();\n return new Set(\n parsed.flatMap(\n (host) => typeof host === \"string\" && host ? [normalizeHostname(host)] : []\n )\n );\n } catch {\n return /* @__PURE__ */ new Set();\n }\n}\nfunction normalizeHostname(host) {\n return host.toLowerCase().replace(/^\\[(.*)\\]$/, \"$1\").replace(/\\.$/, \"\");\n}\nfunction targetHostname(input) {\n try {\n const raw = input instanceof URL ? input.href : typeof input === \"string\" ? input : input.url;\n return normalizeHostname(new URL(raw).hostname);\n } catch {\n return null;\n }\n}\nfunction isExcludedHostname(hostname4, excludedHosts) {\n for (const excludedHost of excludedHosts) {\n if (excludedHost.startsWith(\".\")) {\n const apex = excludedHost.slice(1);\n if (apex && (hostname4 === apex || hostname4.endsWith(excludedHost))) {\n return true;\n }\n } else if (hostname4 === excludedHost) {\n return true;\n }\n }\n return false;\n}\nfunction createRequestScopedStaticEgressFetch(originalFetch, readEnvironment) {\n return (input, init) => {\n const env2 = readEnvironment();\n const binding = env2[STATIC_EGRESS_BINDING_NAME];\n const enableSecret = env2[STATIC_EGRESS_ENABLED_ENV];\n if (!hasFetch(binding) || !isEnabled(enableSecret)) {\n if (binding !== void 0 || enableSecret !== void 0 || typeof env2[STATIC_EGRESS_EXCLUDED_HOSTS_ENV] === \"string\") {\n logStaticEgressDecision(\"fallback\", input, binding, enableSecret);\n }\n return originalFetch(input, init);\n }\n const excludedHosts = /* @__PURE__ */ new Set([\n ...privateDataSourceHosts(env2[PRIVATE_DATA_SOURCES_MANIFEST_ENV]),\n ...configuredExcludedHosts(env2[STATIC_EGRESS_EXCLUDED_HOSTS_ENV])\n ]);\n const hostname4 = targetHostname(input);\n if (hostname4 !== null && isExcludedHostname(hostname4, excludedHosts)) {\n logStaticEgressDecision(\"excluded\", input, binding, enableSecret);\n return originalFetch(input, init);\n }\n logStaticEgressDecision(\"dedicated\", input, binding, enableSecret);\n return binding.fetch(input, init);\n };\n}\nfunction installStaticEgressFetch() {\n if (staticEgressFetchInstalled) return;\n globalThis.fetch = createRequestScopedStaticEgressFetch(\n globalThis.fetch.bind(globalThis),\n workerEnvironment\n );\n staticEgressFetchInstalled = true;\n}\n\n// src/shim/entry.ts\nvar registeredHandler = null;\nvar initContext = new AsyncLocalStorage();\nfunction serve(arg1, arg2) {\n let handler = null;\n if (typeof arg1 === \"function\") {\n handler = arg1;\n } else if (typeof arg2 === \"function\") {\n handler = arg2;\n } else if (arg1 && typeof arg1.handler === \"function\") {\n handler = arg1.handler;\n }\n if (!handler) {\n throw new TypeError(\"Deno.serve: a request handler function is required\");\n }\n const ctx = initContext.getStore();\n if (ctx) {\n ctx.handler = handler;\n } else {\n registeredHandler = handler;\n }\n return {\n finished: Promise.resolve(),\n shutdown: async () => {\n },\n ref() {\n },\n unref() {\n },\n addr: { transport: \"tcp\", hostname: \"0.0.0.0\", port: 0 }\n };\n}\nvar deno2 = Object.freeze({\n ...main_exports,\n serve\n});\nglobalThis.Deno = deno2;\nglobalThis.Buffer = Buffer2;\nfunction getRegisteredHandler() {\n return registeredHandler;\n}\nvar lazyImporters = /* @__PURE__ */ new Map();\nvar handlerByName = /* @__PURE__ */ new Map();\nfunction registerLazy(functionName, importThunk) {\n lazyImporters.set(functionName, importThunk);\n}\nfunction resolveHandler(functionName) {\n const importThunk = lazyImporters.get(functionName);\n if (importThunk === void 0) return void 0;\n let handler = handlerByName.get(functionName);\n if (handler === void 0) {\n const ctx = { handler: null };\n handler = initContext.run(ctx, async () => {\n const mod = await importThunk();\n if (ctx.handler) return ctx.handler;\n const def = mod?.default;\n return typeof def === \"function\" ? def : null;\n });\n handlerByName.set(functionName, handler);\n }\n return handler;\n}\nexport {\n getRegisteredHandler,\n installStaticEgressFetch,\n registerLazy,\n resolveHandler\n};\n",
4
+ "activation-shim.mjs": "// GENERATED by scripts/build-shim.ts from src/shim/activation.ts — do not edit.\n// Regenerate with `npm run build:shim`.\n\n// src/shim/activation.ts\nimport { inflateSync } from \"node:zlib\";\nimport { setRuntimeManifest } from \"base44:private-data-sources/runtime-manifest-store\";\nvar ACTIVATION_CHALLENGE_HEADER = \"Base44-Activation-Challenge\";\nvar ACTIVATION_PROOF_HEADER = \"Base44-Activation-Proof\";\nvar ACTIVATION_ERROR_HEADER = \"X-Base44-Activation-Error\";\nvar ACTIVATION_MARKER_HEADER = \"X-Base44-Activation\";\nvar ACTIVATION_DIGEST_HEADER = \"X-Base44-Activation-Digest\";\nvar ERROR_DIGEST_CONTEXT = \"cf-activation-error-v1.\";\nvar MARKER_DIGEST_CONTEXT = \"cf-activation-marker-v1.\";\nvar ACTIVATION_URL_ENV = \"BASE44_ACTIVATION_URL\";\nvar ACTIVATION_KEY_ENV = \"BASE44_ACTIVATION_KEY\";\nvar PULL_TIMEOUT_MS = 5e3;\nvar PULL_COOLDOWN_MS = 1e3;\nvar PROOF_CONTEXT = \"cf-activation-proof-v1.\";\nvar NONCE_LEN = 12;\nvar DATA_KEY_LEN = 32;\nvar PULL_BODY_MAX_CHARS = 1024;\nvar BLOB_BINDING_PREFIX = \"BASE44_SECRETS_BLOB\";\nvar BLOB_KEY_ID_LEN = 1;\nvar MANIFEST_KEY = \"BASE44_PRIVATE_DATA_SOURCES\";\nvar LATCHED_REASONS = [\n \"url_missing\",\n \"key_missing\",\n \"url_not_https\",\n \"blob_missing\",\n \"blob_unreadable\"\n];\nvar _uncurry = Function.prototype.bind.bind(Function.prototype.call);\nvar _subtle = crypto.subtle;\nvar _subtleImportKey = _subtle.importKey.bind(_subtle);\nvar _subtleDecrypt = _subtle.decrypt.bind(_subtle);\nvar _subtleSign = _subtle.sign.bind(_subtle);\nvar _subtleDigest = _subtle.digest.bind(_subtle);\nvar _fetch = globalThis.fetch.bind(globalThis);\nvar _abortTimeout = AbortSignal.timeout.bind(AbortSignal);\nvar _DateNow = Date.now;\nvar _JSONparse = JSON.parse;\nvar _TextDecoder = TextDecoder;\nvar _TextEncoder = TextEncoder;\nvar _decodeUtf8 = _uncurry(TextDecoder.prototype.decode);\nvar _encodeUtf8 = _uncurry(TextEncoder.prototype.encode);\nvar _Uint8Array = Uint8Array;\nvar _atob = atob;\nvar _btoa = btoa;\nvar _ObjectEntries = Object.entries;\nvar _Headers = Headers;\nvar _Request = Request;\nvar _Response = Response;\nvar _headersGet = _uncurry(Headers.prototype.get);\nvar _headersAppend = _uncurry(Headers.prototype.append);\nvar _headersEntries = _uncurry(Headers.prototype.entries);\nvar _resText = _uncurry(Response.prototype.text);\nvar _iterNext = _uncurry(Object.getPrototypeOf(new Headers().entries()).next);\nfunction accessor(proto, name) {\n for (let o = proto; o; o = Object.getPrototypeOf(o)) {\n const d = Object.getOwnPropertyDescriptor(o, name);\n if (d?.get) return _uncurry(d.get);\n }\n return void 0;\n}\nvar _reqHeaders = accessor(Request.prototype, \"headers\");\nvar _resHeaders = accessor(Response.prototype, \"headers\");\nvar _resStatus = accessor(Response.prototype, \"status\");\nvar _resStatusText = accessor(Response.prototype, \"statusText\");\nvar _resBody = accessor(Response.prototype, \"body\");\nvar _resWebSocket = accessor(Response.prototype, \"webSocket\");\nvar RUNTIME_SECRETS_HEADER_LC = \"base44-runtime-secrets\";\nvar INBOUND_HEADERS_LC = [\"base44-activation-challenge\", RUNTIME_SECRETS_HEADER_LC];\nvar SHIM_RESPONSE_HEADERS_LC = [\n \"x-base44-activation-error\",\n \"x-base44-activation\",\n \"x-base44-activation-digest\",\n \"x-base44-needs-activation\"\n];\ndelete process.env[ACTIVATION_URL_ENV];\ndelete process.env[ACTIVATION_KEY_ENV];\nfunction listHas(list, value) {\n for (let i = 0; i < list.length; i++) if (list[i] === value) return true;\n return false;\n}\nfunction headersWithout(src, dropLowercased) {\n const out = new _Headers();\n const it = _headersEntries(src);\n for (; ; ) {\n const step = _iterNext(it);\n if (step.done) break;\n if (!listHas(dropLowercased, step.value[0])) {\n _headersAppend(out, step.value[0], step.value[1]);\n }\n }\n return out;\n}\nvar ActivationError = class extends Error {\n constructor(reason) {\n super(reason);\n this.reason = reason;\n }\n reason;\n};\nfunction reasonOf(e) {\n return e instanceof ActivationError ? e.reason : \"internal\";\n}\nasync function phase(reason, run) {\n try {\n return await run();\n } catch (e) {\n throw e instanceof ActivationError ? e : new ActivationError(reason);\n }\n}\nvar installed = false;\nvar pendingInstall = null;\nvar installChain = Promise.resolve();\nvar latchedReason = null;\nvar cooldownReason = null;\nvar nextPullAt = 0;\nasync function activationProof(activationKeyB64, challenge) {\n const key = await _subtleImportKey(\n \"raw\",\n fromBase64Url(activationKeyB64),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"]\n );\n const message = _encodeUtf8(new _TextEncoder(), PROOF_CONTEXT + challenge);\n return toBase64Url(new _Uint8Array(await _subtleSign(\"HMAC\", key, message)));\n}\nfunction endpointReason(status) {\n switch (status) {\n case 400:\n return \"endpoint_400\";\n case 401:\n return \"endpoint_401\";\n case 409:\n return \"endpoint_409\";\n case 429:\n return \"endpoint_429\";\n }\n if (status >= 400 && status < 500) return \"endpoint_4xx\";\n if (status >= 500 && status < 600) return \"endpoint_5xx\";\n return \"response_malformed\";\n}\nasync function pullDataKey(challenge, env) {\n const bindings = env ?? {};\n const url = bindings[ACTIVATION_URL_ENV];\n const activationKeyB64 = bindings[ACTIVATION_KEY_ENV];\n if (typeof url !== \"string\" || !url) throw new ActivationError(\"url_missing\");\n if (typeof activationKeyB64 !== \"string\" || !activationKeyB64) {\n throw new ActivationError(\"key_missing\");\n }\n if (!url.startsWith(\"https://\")) throw new ActivationError(\"url_not_https\");\n const headers = new _Headers();\n _headersAppend(headers, ACTIVATION_CHALLENGE_HEADER, challenge);\n _headersAppend(\n headers,\n ACTIVATION_PROOF_HEADER,\n await activationProof(activationKeyB64, challenge)\n );\n const signal = _abortTimeout(PULL_TIMEOUT_MS);\n const transport = () => signal.aborted ? \"endpoint_timeout\" : \"endpoint_unreachable\";\n let res;\n try {\n res = await _fetch(url, { method: \"POST\", headers, redirect: \"manual\", signal });\n } catch {\n throw new ActivationError(transport());\n }\n const status = _resStatus(res);\n if (status !== 200) throw new ActivationError(endpointReason(status));\n let body;\n try {\n body = await _resText(res);\n } catch {\n throw new ActivationError(transport());\n }\n if (body.length > PULL_BODY_MAX_CHARS) throw new ActivationError(\"response_malformed\");\n const parsed = await phase(\"response_malformed\", () => _JSONparse(body));\n const keyB64 = parsed !== null && typeof parsed === \"object\" ? parsed.key : void 0;\n if (typeof keyB64 !== \"string\") throw new ActivationError(\"response_malformed\");\n const dataKey = await phase(\"response_malformed\", () => fromBase64Url(keyB64));\n if (dataKey.length !== DATA_KEY_LEN) throw new ActivationError(\"response_malformed\");\n return dataKey;\n}\nasync function installFromDataKey(dataKeyBytes, env) {\n const bindings = env ?? {};\n const appId = bindings.BASE44_APP_ID;\n const aad = _encodeUtf8(new _TextEncoder(), typeof appId === \"string\" ? appId : \"\");\n let blobB64 = \"\";\n for (let i = 0; ; i++) {\n const part = bindings[`${BLOB_BINDING_PREFIX}_${i}`];\n if (typeof part !== \"string\") break;\n blobB64 += part;\n }\n if (blobB64 === \"\") throw new ActivationError(\"blob_missing\");\n const secrets = await phase(\"blob_unreadable\", async () => {\n const blob = fromBase64Url(blobB64);\n const dataKey = await _subtleImportKey(\"raw\", dataKeyBytes, \"AES-GCM\", false, [\"decrypt\"]);\n const plaintext = await _subtleDecrypt(\n {\n name: \"AES-GCM\",\n iv: blob.slice(BLOB_KEY_ID_LEN, BLOB_KEY_ID_LEN + NONCE_LEN),\n additionalData: aad\n },\n dataKey,\n blob.slice(BLOB_KEY_ID_LEN + NONCE_LEN)\n );\n const payload = _JSONparse(\n _decodeUtf8(new _TextDecoder(), inflateSync(new _Uint8Array(plaintext)))\n );\n return payload && typeof payload === \"object\" && payload.secrets ? payload.secrets : {};\n });\n const manifestValue = secrets[MANIFEST_KEY];\n setRuntimeManifest(typeof manifestValue === \"string\" ? manifestValue : \"\");\n for (const [key, value] of _ObjectEntries(secrets)) {\n if (key !== MANIFEST_KEY && typeof value === \"string\") process.env[key] = value;\n }\n installed = true;\n}\nfunction gateClosed() {\n if (latchedReason) return latchedReason;\n return _DateNow() < nextPullAt ? cooldownReason : null;\n}\nfunction installOnce(challenge, env) {\n const run = installChain.then(async () => {\n if (installed) return false;\n const closed = gateClosed();\n if (closed) throw new ActivationError(closed);\n try {\n await installFromDataKey(await pullDataKey(challenge, env), env);\n return true;\n } catch (e) {\n const reason = reasonOf(e);\n if (listHas(LATCHED_REASONS, reason)) {\n latchedReason = reason;\n } else if (reason !== \"endpoint_409\") {\n cooldownReason = reason;\n nextPullAt = _DateNow() + PULL_COOLDOWN_MS;\n }\n console.error(`Base44 runtime-secrets activation failed: ${reason}`);\n throw new ActivationError(reason);\n }\n });\n installChain = run.then(void 0, () => {\n });\n pendingInstall = run;\n const clear = () => {\n if (pendingInstall === run) pendingInstall = null;\n };\n run.then(clear, clear);\n return run;\n}\nvar PROCEED = Object.freeze({ response: null, pulledMs: null, markerDigest: null });\nasync function digestOf(text) {\n return toBase64Url(new _Uint8Array(await _subtleDigest(\"SHA-256\", _encodeUtf8(new _TextEncoder(), text))));\n}\nfunction errorDigest(reason, challenge) {\n return digestOf(`${ERROR_DIGEST_CONTEXT}${reason}.${challenge}`);\n}\nfunction markerDigest(challenge) {\n return digestOf(`${MARKER_DIGEST_CONTEXT}${challenge}`);\n}\nasync function failure(reason, challenge) {\n const headers = new _Headers();\n _headersAppend(headers, ACTIVATION_ERROR_HEADER, reason);\n if (challenge) {\n try {\n _headersAppend(headers, ACTIVATION_DIGEST_HEADER, await errorDigest(reason, challenge));\n } catch {\n }\n }\n _headersAppend(headers, \"Cache-Control\", \"no-store\");\n return { response: new _Response(null, { status: 503, headers }), pulledMs: null, markerDigest: null };\n}\nasync function ensureActivation(challenge, env) {\n if (installed) return PROCEED;\n try {\n if (pendingInstall) {\n try {\n await pendingInstall;\n return PROCEED;\n } catch {\n }\n }\n if (latchedReason) return await failure(latchedReason, challenge);\n if (!challenge) return await failure(\"challenge_missing\", null);\n const closed = gateClosed();\n if (closed) return await failure(closed, challenge);\n const started = _DateNow();\n if (!await installOnce(challenge, env)) return PROCEED;\n const pulledMs = _DateNow() - started;\n let digest = null;\n try {\n digest = await markerDigest(challenge);\n } catch {\n }\n return { response: null, pulledMs, markerDigest: digest };\n } catch (e) {\n return failure(reasonOf(e), challenge);\n }\n}\nfunction takeActivationChallenge(request) {\n const raw = _reqHeaders(request);\n const challenge = _headersGet(raw, ACTIVATION_CHALLENGE_HEADER);\n if (challenge === null && _headersGet(raw, RUNTIME_SECRETS_HEADER_LC) === null) return { challenge, request };\n return { challenge, request: new _Request(request, { headers: headersWithout(raw, INBOUND_HEADERS_LC) }) };\n}\nfunction withoutActivationHeaders(response, activation) {\n const raw = _resHeaders(response);\n let forged = false;\n for (let i = 0; i < SHIM_RESPONSE_HEADERS_LC.length; i++) {\n if (_headersGet(raw, SHIM_RESPONSE_HEADERS_LC[i]) !== null) forged = true;\n }\n if (!forged) {\n if (activation.pulledMs === null) return response;\n try {\n stampMarker(raw, activation);\n return response;\n } catch {\n }\n }\n const headers = headersWithout(raw, SHIM_RESPONSE_HEADERS_LC);\n if (activation.pulledMs !== null) stampMarker(headers, activation);\n return new _Response(_resBody(response), {\n status: _resStatus(response),\n statusText: _resStatusText(response),\n headers,\n // Preserved or a 101 upgrade would fail to reconstruct.\n webSocket: _resWebSocket ? _resWebSocket(response) : void 0\n });\n}\nfunction stampMarker(headers, activation) {\n _headersAppend(headers, ACTIVATION_MARKER_HEADER, `pulled;ms=${activation.pulledMs}`);\n if (activation.markerDigest) _headersAppend(headers, ACTIVATION_DIGEST_HEADER, activation.markerDigest);\n}\nfunction toBase64Url(bytes) {\n let bin = \"\";\n for (const b of bytes) bin += String.fromCharCode(b);\n return _btoa(bin).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n}\nfunction fromBase64Url(value) {\n const b64 = value.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padded = b64 + \"=\".repeat((4 - b64.length % 4) % 4);\n const bin = _atob(padded);\n const bytes = new _Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);\n return bytes;\n}\nexport {\n activationProof,\n ensureActivation,\n errorDigest,\n markerDigest,\n takeActivationChallenge,\n withoutActivationHeaders\n};\n",
5
+ "actor.mjs": "// GENERATED by scripts/build-shim.ts from src/shim/actor.ts — do not edit.\n// Regenerate with `npm run build:shim`.\n\n// ../../node_modules/partyserver/dist/index.js\nimport { DurableObject } from \"cloudflare:workers\";\n\n// ../../node_modules/nanoid/url-alphabet/index.js\nvar urlAlphabet = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\n\n// ../../node_modules/nanoid/index.browser.js\nvar nanoid = (size = 21) => {\n let id = \"\";\n let bytes = crypto.getRandomValues(new Uint8Array(size |= 0));\n while (size--) {\n id += urlAlphabet[bytes[size] & 63];\n }\n return id;\n};\n\n// ../../node_modules/partyserver/dist/index.js\nif (!(\"OPEN\" in WebSocket)) {\n const WebSocketStatus = {\n CONNECTING: WebSocket.READY_STATE_CONNECTING,\n OPEN: WebSocket.READY_STATE_OPEN,\n CLOSING: WebSocket.READY_STATE_CLOSING,\n CLOSED: WebSocket.READY_STATE_CLOSED\n };\n Object.assign(WebSocket, WebSocketStatus);\n Object.assign(WebSocket.prototype, WebSocketStatus);\n}\nvar AttachmentCache = class {\n #cache = /* @__PURE__ */ new WeakMap();\n get(ws) {\n let attachment = this.#cache.get(ws);\n if (!attachment) {\n attachment = WebSocket.prototype.deserializeAttachment.call(\n ws\n );\n if (attachment !== void 0) {\n this.#cache.set(ws, attachment);\n } else {\n throw new Error(\n \"Missing websocket attachment. This is most likely an issue in PartyServer, please open an issue at https://github.com/threepointone/partyserver/issues\"\n );\n }\n }\n return attachment;\n }\n set(ws, attachment) {\n this.#cache.set(ws, attachment);\n WebSocket.prototype.serializeAttachment.call(ws, attachment);\n }\n};\nvar attachments = new AttachmentCache();\nvar connections = /* @__PURE__ */ new WeakSet();\nvar isWrapped = (ws) => {\n return connections.has(ws);\n};\nvar createLazyConnection = (ws) => {\n if (isWrapped(ws)) {\n return ws;\n }\n let initialState = void 0;\n if (\"state\" in ws) {\n initialState = ws.state;\n delete ws.state;\n }\n const connection = Object.defineProperties(ws, {\n id: {\n get() {\n return attachments.get(ws).__pk.id;\n }\n },\n server: {\n get() {\n return attachments.get(ws).__pk.server;\n }\n },\n socket: {\n get() {\n return ws;\n }\n },\n state: {\n get() {\n return ws.deserializeAttachment();\n }\n },\n setState: {\n value: function setState(setState) {\n let state;\n if (setState instanceof Function) {\n state = setState(this.state);\n } else {\n state = setState;\n }\n ws.serializeAttachment(state);\n return state;\n }\n },\n deserializeAttachment: {\n value: function deserializeAttachment() {\n const attachment = attachments.get(ws);\n return attachment.__user ?? null;\n }\n },\n serializeAttachment: {\n value: function serializeAttachment(attachment) {\n const setting = {\n ...attachments.get(ws),\n __user: attachment ?? null\n };\n attachments.set(ws, setting);\n }\n }\n });\n if (initialState) {\n connection.setState(initialState);\n }\n connections.add(connection);\n return connection;\n};\nvar HibernatingConnectionIterator = class {\n constructor(state, tag) {\n this.state = state;\n this.tag = tag;\n }\n index = 0;\n sockets;\n [Symbol.iterator]() {\n return this;\n }\n next() {\n const sockets = this.sockets ?? (this.sockets = this.state.getWebSockets(this.tag));\n let socket;\n while (socket = sockets[this.index++]) {\n if (socket.readyState === WebSocket.READY_STATE_OPEN) {\n const value = createLazyConnection(socket);\n return { done: false, value };\n }\n }\n return { done: true, value: void 0 };\n }\n};\nvar InMemoryConnectionManager = class {\n #connections = /* @__PURE__ */ new Map();\n tags = /* @__PURE__ */ new WeakMap();\n getCount() {\n return this.#connections.size;\n }\n getConnection(id) {\n return this.#connections.get(id);\n }\n *getConnections(tag) {\n if (!tag) {\n yield* this.#connections.values();\n return;\n }\n for (const connection of this.#connections.values()) {\n const connectionTags = this.tags.get(connection) ?? [];\n if (connectionTags.includes(tag)) {\n yield connection;\n }\n }\n }\n accept(connection, options) {\n connection.accept();\n this.#connections.set(connection.id, connection);\n this.tags.set(connection, [\n // make sure we have id tag\n connection.id,\n ...options.tags.filter((t) => t !== connection.id)\n ]);\n const removeConnection = () => {\n this.#connections.delete(connection.id);\n connection.removeEventListener(\"close\", removeConnection);\n connection.removeEventListener(\"error\", removeConnection);\n };\n connection.addEventListener(\"close\", removeConnection);\n connection.addEventListener(\"error\", removeConnection);\n return connection;\n }\n};\nvar HibernatingConnectionManager = class {\n constructor(controller) {\n this.controller = controller;\n }\n getCount() {\n return Number(this.controller.getWebSockets().length);\n }\n getConnection(id) {\n const sockets = this.controller.getWebSockets(id);\n if (sockets.length === 0) return void 0;\n if (sockets.length === 1)\n return createLazyConnection(sockets[0]);\n throw new Error(\n `More than one connection found for id ${id}. Did you mean to use getConnections(tag) instead?`\n );\n }\n getConnections(tag) {\n return new HibernatingConnectionIterator(this.controller, tag);\n }\n accept(connection, options) {\n const tags = [\n connection.id,\n ...options.tags.filter((t) => t !== connection.id)\n ];\n if (tags.length > 10) {\n throw new Error(\n \"A connection can only have 10 tags, including the default id tag.\"\n );\n }\n for (const tag of tags) {\n if (typeof tag !== \"string\") {\n throw new Error(`A connection tag must be a string. Received: ${tag}`);\n }\n if (tag === \"\") {\n throw new Error(`A connection tag must not be an empty string.`);\n }\n if (tag.length > 256) {\n throw new Error(`A connection tag must not exceed 256 characters`);\n }\n }\n this.controller.acceptWebSocket(connection, tags);\n connection.serializeAttachment({\n __pk: {\n id: connection.id,\n server: options.server\n },\n __user: null\n });\n return createLazyConnection(connection);\n }\n};\nvar serverMapCache = /* @__PURE__ */ new WeakMap();\nfunction camelCaseToKebabCase(str) {\n let kebabified = str.replace(\n /[A-Z]/g,\n (letter) => `-${letter.toLowerCase()}`\n );\n kebabified = kebabified.startsWith(\"-\") ? kebabified.slice(1) : kebabified;\n return kebabified.replace(/-$/, \"\");\n}\nasync function routePartykitRequest(req, env, options) {\n if (!serverMapCache.has(env)) {\n serverMapCache.set(\n env,\n Object.entries(env).reduce((acc, [k, v]) => {\n if (v && typeof v === \"object\" && \"idFromName\" in v && typeof v.idFromName === \"function\") {\n return { ...acc, [camelCaseToKebabCase(k)]: v };\n }\n return acc;\n }, {})\n );\n }\n const map = serverMapCache.get(env);\n const prefix = options?.prefix || \"parties\";\n const url = new URL(req.url);\n const parts = url.pathname.split(\"/\");\n if (parts[1] === prefix && parts.length < 4) {\n return null;\n }\n const name = parts[3], namespace = parts[2];\n if (parts[1] === prefix && name && namespace) {\n if (!map[namespace]) {\n if (namespace === \"main\") {\n console.warn(\n `You appear to be migrating a PartyKit project to PartyServer.`\n );\n console.warn(`PartyServer doesn't have a \"main\" party by default. Try adding this to your PartySocket client:\n \nparty: \"${camelCaseToKebabCase(Object.keys(map)[0])}\"`);\n } else {\n console.error(`The url ${req.url} does not match any server namespace. \nDid you forget to add a durable object binding to the class in your wrangler.toml?`);\n }\n }\n let doNamespace = map[namespace];\n if (options?.jurisdiction) {\n doNamespace = doNamespace.jurisdiction(options.jurisdiction);\n }\n const id = doNamespace.idFromName(name);\n const stub = doNamespace.get(id, options);\n req = new Request(req);\n req.headers.set(\"x-partykit-room\", name);\n req.headers.set(\"x-partykit-namespace\", namespace);\n if (options?.jurisdiction) {\n req.headers.set(\"x-partykit-jurisdiction\", options.jurisdiction);\n }\n return stub.fetch(req);\n } else {\n return null;\n }\n}\nvar Server = class extends DurableObject {\n static options = {\n hibernate: false\n };\n #status = \"zero\";\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n #ParentClass = Object.getPrototypeOf(this).constructor;\n #connectionManager = this.#ParentClass.options.hibernate ? new HibernatingConnectionManager(this.ctx) : new InMemoryConnectionManager();\n constructor(ctx, env) {\n super(ctx, env);\n }\n /**\n * Handle incoming requests to the server.\n */\n async fetch(request) {\n if (!this.#_name) {\n const room = request.headers.get(\"x-partykit-room\");\n if (\n // !namespace ||\n !room\n ) {\n throw new Error(`Missing namespace or room headers when connecting to ${this.#ParentClass.name}.\nDid you try connecting directly to this Durable Object? Try using getServerByName(namespace, id) instead.`);\n }\n await this.setName(room);\n }\n try {\n const url = new URL(request.url);\n if (url.pathname === \"/cdn-cgi/partyserver/set-name/\") {\n return Response.json({ ok: true });\n }\n if (request.headers.get(\"Upgrade\")?.toLowerCase() !== \"websocket\") {\n return await this.onRequest(request);\n } else {\n const { 0: clientWebSocket, 1: serverWebSocket } = new WebSocketPair();\n let connectionId = url.searchParams.get(\"_pk\");\n if (!connectionId) {\n connectionId = nanoid();\n }\n let connection = Object.assign(serverWebSocket, {\n id: connectionId,\n server: this.name,\n state: null,\n setState(setState) {\n let state;\n if (setState instanceof Function) {\n state = setState(this.state);\n } else {\n state = setState;\n }\n this.state = state;\n return this.state;\n }\n });\n const ctx = { request };\n const tags = await this.getConnectionTags(connection, ctx);\n connection = this.#connectionManager.accept(connection, {\n tags,\n server: this.name\n });\n if (!this.#ParentClass.options.hibernate) {\n this.#attachSocketEventHandlers(connection);\n }\n await this.onConnect(connection, ctx);\n return new Response(null, { status: 101, webSocket: clientWebSocket });\n }\n } catch (err) {\n console.error(\n `Error in ${this.#ParentClass.name}:${this.name} fetch:`,\n err\n );\n if (!(err instanceof Error)) throw err;\n if (request.headers.get(\"Upgrade\") == \"websocket\") {\n const pair = new WebSocketPair();\n pair[1].accept();\n pair[1].send(JSON.stringify({ error: err.stack }));\n pair[1].close(1011, \"Uncaught exception during session setup\");\n return new Response(null, { status: 101, webSocket: pair[0] });\n } else {\n return new Response(err.stack, { status: 500 });\n }\n }\n }\n async webSocketMessage(ws, message) {\n const connection = createLazyConnection(ws);\n await this.setName(connection.server);\n if (this.#status !== \"started\") {\n await this.#initialize();\n }\n return this.onMessage(connection, message);\n }\n async webSocketClose(ws, code, reason, wasClean) {\n const connection = createLazyConnection(ws);\n await this.setName(connection.server);\n if (this.#status !== \"started\") {\n await this.#initialize();\n }\n return this.onClose(connection, code, reason, wasClean);\n }\n async webSocketError(ws, error) {\n const connection = createLazyConnection(ws);\n await this.setName(connection.server);\n if (this.#status !== \"started\") {\n await this.#initialize();\n }\n return this.onError(connection, error);\n }\n async #initialize() {\n await this.ctx.blockConcurrencyWhile(async () => {\n this.#status = \"starting\";\n await this.onStart();\n this.#status = \"started\";\n });\n }\n #attachSocketEventHandlers(connection) {\n const handleMessageFromClient = (event) => {\n this.onMessage(connection, event.data)?.catch((e) => {\n console.error(\"onMessage error:\", e);\n });\n };\n const handleCloseFromClient = (event) => {\n connection.removeEventListener(\"message\", handleMessageFromClient);\n connection.removeEventListener(\"close\", handleCloseFromClient);\n this.onClose(connection, event.code, event.reason, event.wasClean)?.catch(\n (e) => {\n console.error(\"onClose error:\", e);\n }\n );\n };\n const handleErrorFromClient = (e) => {\n connection.removeEventListener(\"message\", handleMessageFromClient);\n connection.removeEventListener(\"error\", handleErrorFromClient);\n this.onError(connection, e.error)?.catch((e2) => {\n console.error(\"onError error:\", e2);\n });\n };\n connection.addEventListener(\"close\", handleCloseFromClient);\n connection.addEventListener(\"error\", handleErrorFromClient);\n connection.addEventListener(\"message\", handleMessageFromClient);\n }\n // Public API\n #_name;\n #_longErrorAboutNameThrown = false;\n /**\n * The name for this server. Write-once-only.\n */\n get name() {\n if (!this.#_name) {\n if (!this.#_longErrorAboutNameThrown) {\n this.#_longErrorAboutNameThrown = true;\n throw new Error(\n `Attempting to read .name on ${this.#ParentClass.name} before it was set. The name can be set by explicitly calling .setName(name) on the stub, or by using routePartyKitRequest(). This is a known issue and will be fixed soon. Follow https://github.com/cloudflare/workerd/issues/2240 for more updates.`\n );\n } else {\n throw new Error(\n `Attempting to read .name on ${this.#ParentClass.name} before it was set.`\n );\n }\n }\n return this.#_name;\n }\n // We won't have an await inside this function\n // but it will be called remotely,\n // so we need to mark it as async\n async setName(name) {\n if (!name) {\n throw new Error(\"A name is required.\");\n }\n if (this.#_name && this.#_name !== name) {\n throw new Error(\"This server already has a name.\");\n }\n this.#_name = name;\n if (this.#status !== \"started\") {\n await this.ctx.blockConcurrencyWhile(async () => {\n await this.#initialize();\n });\n }\n }\n #sendMessageToConnection(connection, message) {\n try {\n connection.send(message);\n } catch (_e) {\n connection.close(1011, \"Unexpected error\");\n }\n }\n /** Send a message to all connected clients, except connection ids listed in `without` */\n broadcast(msg, without) {\n for (const connection of this.#connectionManager.getConnections()) {\n if (!without || !without.includes(connection.id)) {\n this.#sendMessageToConnection(connection, msg);\n }\n }\n }\n /** Get a connection by connection id */\n getConnection(id) {\n return this.#connectionManager.getConnection(id);\n }\n /**\n * Get all connections. Optionally, you can provide a tag to filter returned connections.\n * Use `Server#getConnectionTags` to tag the connection on connect.\n */\n getConnections(tag) {\n return this.#connectionManager.getConnections(tag);\n }\n /**\n * You can tag a connection to filter them in Server#getConnections.\n * Each connection supports up to 9 tags, each tag max length is 256 characters.\n */\n getConnectionTags(connection, context) {\n return [];\n }\n // Implemented by the user\n /**\n * Called when the server is started for the first time.\n */\n onStart() {\n }\n /**\n * Called when a new connection is made to the server.\n */\n onConnect(connection, ctx) {\n console.log(\n `Connection ${connection.id} connected to ${this.#ParentClass.name}:${this.name}`\n );\n }\n /**\n * Called when a message is received from a connection.\n */\n onMessage(connection, message) {\n console.log(\n `Received message on connection ${this.#ParentClass.name}:${connection.id}`\n );\n console.info(\n `Implement onMessage on ${this.#ParentClass.name} to handle this message.`\n );\n }\n /**\n * Called when a connection is closed.\n */\n onClose(connection, code, reason, wasClean) {\n }\n /**\n * Called when an error occurs on a connection.\n */\n onError(connection, error) {\n console.error(\n `Error on connection ${connection.id} in ${this.#ParentClass.name}:${this.name}:`,\n error\n );\n console.info(\n `Implement onError on ${this.#ParentClass.name} to handle this error.`\n );\n }\n /**\n * Called when a request is made to the server.\n */\n onRequest(request) {\n console.warn(\n `onRequest hasn't been implemented on ${this.#ParentClass.name}:${this.name} responding to ${request.url}`\n );\n return new Response(`Not implemented`, { status: 404 });\n }\n onAlarm() {\n console.log(\n `Implement onAlarm on ${this.#ParentClass.name} to handle alarms.`\n );\n }\n async alarm() {\n if (this.#status !== \"started\") {\n await this.#initialize();\n }\n await this.onAlarm();\n }\n};\n\n// src/shim/actor.ts\nimport { createClient } from \"npm:@base44/sdk@0.8.41\";\n\n// src/shim/tick-loop.ts\nvar TickLoop = class {\n constructor(onTick, maxCatchup = 3) {\n this.onTick = onTick;\n this.maxCatchup = maxCatchup;\n }\n onTick;\n maxCatchup;\n timer = null;\n nextAt = 0;\n running = false;\n intervalMs = 0;\n // A run() resuming after stop()+start() must not arm a second, untracked\n // timer — each run() acts only for its own generation.\n gen = 0;\n get isRunning() {\n return this.running;\n }\n start(intervalMs) {\n if (this.running) {\n if (intervalMs === this.intervalMs) return;\n this.intervalMs = intervalMs;\n this.nextAt = Date.now() + intervalMs;\n if (this.timer !== null) {\n clearTimeout(this.timer);\n this.timer = null;\n this.schedule();\n }\n return;\n }\n this.running = true;\n this.intervalMs = intervalMs;\n this.nextAt = Date.now() + intervalMs;\n this.schedule();\n }\n stop() {\n this.running = false;\n this.gen++;\n if (this.timer !== null) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n schedule() {\n this.timer = setTimeout(() => {\n void this.run();\n }, Math.max(0, this.nextAt - Date.now()));\n }\n async run() {\n const gen = this.gen;\n this.timer = null;\n let steps = 0;\n while (this.running && this.gen === gen && Date.now() >= this.nextAt && steps < this.maxCatchup) {\n steps++;\n this.nextAt += this.intervalMs;\n let keep = true;\n try {\n keep = await this.onTick();\n } catch (err) {\n console.error(\"TickLoop tick threw:\", err);\n }\n if (this.gen !== gen) return;\n if (!keep) {\n this.stop();\n return;\n }\n }\n if (!this.running || this.gen !== gen) return;\n if (Date.now() >= this.nextAt) this.nextAt = Date.now() + this.intervalMs;\n this.schedule();\n }\n};\n\n// src/shim/actor.ts\nvar SUPERSEDED_PREFIX = \"__superseded__:\";\nfunction buildConn(ws, identity) {\n return {\n id: ws.id,\n // partyserver's per-connection id (survives hibernation)\n ...identity ? { identity } : {},\n send(data) {\n ws.send(JSON.stringify(data));\n },\n reject(code, reason) {\n ws.close(code, reason);\n }\n };\n}\nvar Actor = class _Actor extends Server {\n // WebSocket Hibernation: idle rooms are evicted from memory (no duration\n // billing) with sockets kept open; onStart re-runs on wake to rehydrate. A\n // ticking room stays resident (its setTimeout loop blocks hibernation), so this\n // only affects non-ticking occupied rooms. Statics inherit, so a handler opts\n // out with `static options = { hibernate: false }`.\n static options = { hibernate: true };\n // conn.id is client-chosen and partyserver silently REPLACES a same-id socket\n // on accept, so a duplicate must be resolved before super.fetch(). Liveness\n // (SDK pings every 1s) distinguishes a real conflict from a reconnect.\n lastSeen = /* @__PURE__ */ new Map();\n identities = /* @__PURE__ */ new Map();\n static LIVE_MS = 3e3;\n static IDENTITY_HEADER = \"X-Base44-Actor-Identity\";\n // Captured at construction so `client` reads this DO's own env, not the shared\n // globalThis.Base44 bridge (which the last-constructed DO in the isolate wins).\n _b44Env;\n _b44Client;\n get client() {\n return this._b44Client ??= new Proxy(\n createClient({\n appId: this._b44Env.BASE44_APP_ID,\n serverUrl: this._b44Env.BASE44_API_URL,\n // \"prod\" on the published script, \"preview\" on the draft — set at deploy.\n functionsVersion: this._b44Env.BASE44_FUNCTIONS_VERSION\n }),\n {\n // The SDK bakes serviceToken into axios defaults at createClient time and\n // its own asServiceRole getter throws without one, so that one property is\n // answered by the lazy exchange below instead.\n get: (target, prop) => prop === \"asServiceRole\" ? this._b44ServiceRolePath([]) : Reflect.get(target, prop, target)\n }\n );\n }\n // ── Service role ──────────────────────────────────────────────────────\n // The token is fetched on the first privileged call by trading an assertion\n // signed with the actor's private key, cached in memory, and re-fetched\n // after expiry. Hibernation wiping the cache just means the next call\n // exchanges again — nothing durable is stored.\n _b44Service = null;\n _b44ServicePending = null;\n async _b44SignServiceAssertion(privateKey, publicKey) {\n const b64url = (bin) => btoa(bin).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n const now = Math.floor(Date.now() / 1e3);\n const claims = {\n iss: \"base44-actor\",\n aud: \"base44-actor-service-token\",\n purpose: \"actor-service-token\",\n v: 1,\n iat: now,\n exp: now + 60,\n app_id: this._b44Env.BASE44_APP_ID,\n actor_name: this.constructor._b44ActorName\n };\n const input = `${b64url(JSON.stringify({ alg: \"EdDSA\", typ: \"JWT\" }))}.${b64url(JSON.stringify(claims))}`;\n const key = await crypto.subtle.importKey(\n \"jwk\",\n { kty: \"OKP\", crv: \"Ed25519\", d: privateKey, x: publicKey },\n { name: \"Ed25519\" },\n false,\n [\"sign\"]\n );\n const signature = new Uint8Array(\n await crypto.subtle.sign({ name: \"Ed25519\" }, key, new TextEncoder().encode(input))\n );\n return `${input}.${b64url(String.fromCharCode(...signature))}`;\n }\n async _b44FetchServiceClient() {\n const privateKey = this._b44Env.BASE44_ACTOR_PRIVATE_KEY;\n const publicKey = this._b44Env.BASE44_ACTOR_PUBLIC_KEY;\n if (typeof privateKey !== \"string\" || !privateKey || typeof publicKey !== \"string\" || !publicKey) {\n throw new Error(\n \"asServiceRole is unavailable on this actor: it predates direct connections. Delete the actor and deploy it again (room storage is not preserved).\"\n );\n }\n const response = await fetch(\n `${this._b44Env.BASE44_API_URL}/api/apps/${this._b44Env.BASE44_APP_ID}/actors/service-token`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ assertion: await this._b44SignServiceAssertion(privateKey, publicKey) })\n }\n );\n if (!response.ok) {\n throw new Error(`Actor service token exchange failed (${response.status})`);\n }\n const { access_token, expires_in } = await response.json();\n const client = createClient({\n appId: this._b44Env.BASE44_APP_ID,\n serverUrl: this._b44Env.BASE44_API_URL,\n functionsVersion: this._b44Env.BASE44_FUNCTIONS_VERSION,\n serviceToken: access_token\n });\n this._b44Service = { client, expiresAtMs: Date.now() + (expires_in - 60) * 1e3 };\n return client;\n }\n _b44ServiceClient() {\n if (this._b44Service && Date.now() < this._b44Service.expiresAtMs) {\n return Promise.resolve(this._b44Service.client);\n }\n return this._b44ServicePending ??= this._b44FetchServiceClient().finally(() => {\n this._b44ServicePending = null;\n });\n }\n // asServiceRole is a sync property chain ending in an async call, so proxies\n // record the chain and the exchange awaits inside the final call — actor code\n // reads identically to backend functions.\n _b44ServiceRolePath(path) {\n const self = this;\n return new Proxy(function() {\n }, {\n get(_target, prop) {\n if (typeof prop === \"symbol\" || prop === \"then\") return void 0;\n return self._b44ServiceRolePath([...path, prop]);\n },\n async apply(_target, _thisArg, args) {\n const serviceClient = await self._b44ServiceClient();\n let parent = serviceClient.asServiceRole;\n for (const prop of path.slice(0, -1)) parent = parent[prop];\n return parent[path[path.length - 1]](...args);\n }\n });\n }\n // Reserved platform keys — the private-data-sources manifest carries\n // plaintext VPC DB credentials. Keep in sync with CONSOLE_PATCH in\n // worker-entry.ts (not its runtime-secrets additions: actors never carry\n // the pull bindings).\n static RESERVED_SECRETS = /* @__PURE__ */ new Set([\n \"BASE44_ACTOR_PRIVATE_KEY\",\n \"BASE44_ACTOR_PUBLIC_KEY\",\n \"BASE44_ACTOR_SCRIPT_ID\",\n \"BASE44_PRIVATE_DATA_SOURCES\"\n ]);\n constructor(ctx, env) {\n super(ctx, env);\n this._b44Env = env;\n globalThis.Base44 = Object.assign(\n globalThis.Base44 ?? {},\n {\n // DOs have no request-scoped waitUntil (they stay alive while\n // connections exist) — absorb so shared function code doesn't crash.\n waitUntil: (p) => {\n Promise.resolve(p).catch(() => {\n });\n },\n secrets: {\n // String(n) BEFORE the reserved check: a boxed String fails Set.has\n // yet coerces back to the reserved key on the env lookup.\n get: (n) => {\n const key = String(n);\n if (_Actor.RESERVED_SECRETS.has(key)) return void 0;\n const v = env[key];\n return typeof v === \"string\" ? v : void 0;\n }\n }\n }\n );\n }\n async onStart() {\n try {\n this.ctx.setWebSocketAutoResponse(\n new WebSocketRequestResponsePair(\n JSON.stringify({ type: \"__ping\" }),\n JSON.stringify({ type: \"__pong\" })\n )\n );\n } catch {\n }\n await this.handleStart();\n await this.maintainTicker();\n }\n livenessMs(ws) {\n let autoResp = 0;\n try {\n autoResp = this.ctx.getWebSocketAutoResponseTimestamp(ws)?.getTime() ?? 0;\n } catch {\n }\n return Math.max(this.lastSeen.get(ws.id) ?? 0, autoResp);\n }\n static parseIdentity(value) {\n if (!value || value.length > 512) return void 0;\n try {\n const identity = JSON.parse(value);\n if (identity.type === \"authenticated\" && typeof identity.userId === \"string\" && identity.userId.length > 0 && identity.userId.length <= 128) {\n return Object.freeze({ type: \"authenticated\", userId: identity.userId });\n }\n if (identity.type === \"anonymous\" && typeof identity.anonymousId === \"string\" && identity.anonymousId.length > 0 && identity.anonymousId.length <= 128) {\n return Object.freeze({ type: \"anonymous\", anonymousId: identity.anonymousId });\n }\n } catch {\n return void 0;\n }\n return void 0;\n }\n identityFor(ws) {\n if (this.identities.has(ws.id)) return this.identities.get(ws.id);\n let identity;\n try {\n identity = ws.deserializeAttachment()?.__base44Identity;\n if (identity) Object.freeze(identity);\n } catch {\n }\n this.identities.set(ws.id, identity);\n return identity;\n }\n // partyserver's fetch() catch re-throws \"Network connection lost.\" when the\n // client already went away; swallow it so it isn't logged as an exception.\n async fetch(request) {\n if (request.headers.get(\"Upgrade\")?.toLowerCase() === \"websocket\") {\n const pk = new URL(request.url).searchParams.get(\"_pk\");\n if (pk) {\n const existing = [...super.getConnections()].find((c) => c.id === pk);\n if (existing !== void 0 && Date.now() - this.livenessMs(existing) < _Actor.LIVE_MS) {\n return new Response(\"Connection id already in use\", { status: 409 });\n }\n if (existing !== void 0) {\n try {\n const att = existing.deserializeAttachment() ?? {};\n existing.serializeAttachment({ ...att, __superseded: true });\n } catch {\n }\n try {\n existing.id = `${SUPERSEDED_PREFIX}${pk}`;\n } catch {\n }\n try {\n existing.close(4408, \"Superseded by reconnect\");\n } catch {\n }\n }\n }\n }\n try {\n return await super.fetch(request);\n } catch (err) {\n if (err instanceof Error && err.message.includes(\"Network connection lost\")) {\n return new Response(\"Connection lost\", { status: 503 });\n }\n throw err;\n }\n }\n async onConnect(ws, ctx) {\n const identity = _Actor.parseIdentity(\n ctx.request.headers.get(_Actor.IDENTITY_HEADER)\n );\n this.identities.set(ws.id, identity);\n if (identity) {\n try {\n const attachment = ws.deserializeAttachment() ?? {};\n ws.serializeAttachment({ ...attachment, __base44Identity: identity });\n } catch {\n }\n }\n this.lastSeen.set(ws.id, Date.now());\n await this.handleConnect(buildConn(ws, identity));\n await this.maintainTicker();\n }\n async onMessage(ws, raw) {\n this.lastSeen.set(ws.id, Date.now());\n let msg;\n try {\n msg = JSON.parse(raw);\n } catch {\n return;\n }\n if (msg?.type === \"__ping\") {\n ws.send(JSON.stringify({ type: \"__pong\" }));\n await this.maintainTicker();\n return;\n }\n await this.handleMessage(buildConn(ws, this.identityFor(ws)), msg);\n await this.maintainTicker();\n }\n async onClose(ws) {\n let superseded = ws.id.startsWith(SUPERSEDED_PREFIX);\n if (!superseded) {\n try {\n superseded = !!ws.deserializeAttachment()?.__superseded;\n } catch {\n }\n }\n if (superseded) return;\n const identity = this.identityFor(ws);\n this.lastSeen.delete(ws.id);\n this.identities.delete(ws.id);\n await this.handleClose(buildConn(ws, identity));\n await this.maintainTicker();\n }\n // WATCHDOG, not the metronome (see tick-loop.ts): resumes the loop after\n // eviction / self-heals a dead one. Never runs handleTick itself.\n async onAlarm() {\n const gen = this.tickerGen;\n const now = Date.now();\n const due = await this.mutateSchedules((m) => {\n const d = Object.keys(m).filter((k) => m[k] <= now);\n for (const k of d) delete m[k];\n return d;\n });\n for (const key of due) {\n try {\n await this.handleWake(key);\n } catch (err) {\n console.error(\"Actor.handleWake threw:\", err);\n }\n }\n const ms = this.loopMs ?? await this.ctx.storage.get(\"__loop_ms\");\n if (gen !== this.tickerGen) return;\n if (ms) {\n this.loopMs = ms;\n if (typeof this.shouldTick === \"function\" && !([...super.getConnections()].length > 0 && this.shouldTick())) {\n this.ticking = false;\n await this.stopLoop();\n return;\n }\n if (!this.loop.isRunning) this.loop.start(ms);\n }\n await this.rearmAlarm();\n }\n handleWake(_key) {\n }\n async schedule(key, at) {\n const when = typeof at === \"number\" ? at : at.getTime();\n await this.mutateSchedules((m) => {\n m[key] = when;\n });\n await this.rearmAlarm();\n }\n async cancelSchedule(key) {\n await this.mutateSchedules((m) => {\n delete m[key];\n });\n await this.rearmAlarm();\n }\n // Concurrent read-modify-writes of the map would drop each other's keys\n // (two schedule() calls both reading the prior map); chain them instead.\n schedulesChain = Promise.resolve();\n mutateSchedules(fn) {\n const run = this.schedulesChain.then(async () => {\n const m = await this.ctx.storage.get(\"__schedules\") ?? {};\n const out = fn(m);\n await this.ctx.storage.put(\"__schedules\", m);\n return out;\n });\n this.schedulesChain = run.catch(() => {\n });\n return run;\n }\n // The single DO alarm serves the ticker watchdog AND scheduled wakes: arm to\n // whichever is earliest; clear only when neither needs it. Chained on the\n // schedules queue so a rearm that read the map before a queued mutation can\n // never act after that mutation's own rearm and clobber it.\n rearmAlarm() {\n const run = this.schedulesChain.then(async () => {\n const wakes = Object.values(\n await this.ctx.storage.get(\"__schedules\") ?? {}\n );\n const nextWake = wakes.length ? Math.min(...wakes) : null;\n const watchdog = this.loop.isRunning ? Date.now() + _Actor.WATCHDOG_MS : null;\n const next = nextWake === null ? watchdog : watchdog === null ? nextWake : Math.min(nextWake, watchdog);\n if (next === null) await this.ctx.storage.deleteAlarm();\n else await this.ctx.storage.setAlarm(next);\n });\n this.schedulesChain = run.catch(() => {\n });\n return run;\n }\n // Optional wake hook: once per instance start, before any connection.\n handleStart() {\n }\n // ─── Managed ticker (opt-in) ──────────────────────────────────────────────\n // Override shouldTick() and the platform runs handleTick() on a timer while it\n // returns true, stopping (the DO can idle out) when false. shouldTick()\n // must be cheap and pure: it runs after every lifecycle event and tick.\n tickIntervalMs = 100;\n ticking = false;\n loopMs = null;\n // in-memory mirror of __loop_ms\n loop = new TickLoop(() => this.runOneTick());\n static WATCHDOG_MS = 3e4;\n // One tick: a throw skips the tick, never kills the loop.\n async runOneTick() {\n const gen = this.tickerGen;\n try {\n await this.handleTick();\n } catch (err) {\n console.error(\"Actor.handleTick threw:\", err);\n }\n if (gen !== this.tickerGen) return false;\n if (typeof this.shouldTick === \"function\") {\n const keep = [...super.getConnections()].length > 0 && this.shouldTick();\n this.ticking = keep;\n if (!keep) {\n await this.stopLoop();\n return false;\n }\n return true;\n }\n return this.loopMs != null;\n }\n broadcast(data) {\n super.broadcast(JSON.stringify(data));\n }\n getConnections() {\n return [...super.getConnections()].map((ws) => buildConn(ws, this.identityFor(ws)));\n }\n // The newest start/stop owns the persisted state: a stale transition\n // resuming after its await must not erase a fresh __loop_ms/watchdog.\n tickerGen = 0;\n async startLoop(ms) {\n const gen = ++this.tickerGen;\n this.loopMs = ms;\n await this.ctx.storage.put(\"__loop_ms\", ms);\n if (gen !== this.tickerGen) return;\n this.loop.start(ms);\n await this.rearmAlarm();\n }\n async stopLoop() {\n const gen = ++this.tickerGen;\n this.loop.stop();\n this.loopMs = null;\n this.ticking = false;\n await this.ctx.storage.delete(\"__loop_ms\");\n if (gen !== this.tickerGen) return;\n await this.rearmAlarm();\n }\n // Restart a dead in-memory loop (eviction / isolate reload).\n async ensureLoop() {\n if (this.loopMs == null) {\n const gen = this.tickerGen;\n const ms = await this.ctx.storage.get(\"__loop_ms\");\n if (gen !== this.tickerGen) return;\n if (!ms) return;\n this.loopMs = ms;\n }\n if (!this.loop.isRunning) this.loop.start(this.loopMs);\n }\n // Managed-ticker reconcile: run after every lifecycle event. The ticker is\n // opt-in via shouldTick() — a handler that doesn't define it never ticks.\n // When opted in, start/stop the loop to match, self-healing a dead loop\n // while still wanted.\n async maintainTicker() {\n if (typeof this.shouldTick !== \"function\") return;\n const want = [...super.getConnections()].length > 0 && this.shouldTick();\n if (want !== this.ticking) {\n this.ticking = want;\n if (want) await this.startLoop(this.tickIntervalMs);\n else await this.stopLoop();\n } else if (want) {\n await this.ensureLoop();\n }\n }\n get instanceId() {\n return this.name;\n }\n get storage() {\n const store = this.ctx.storage;\n return {\n get: (key) => store.get(key),\n put: (key, value) => store.put(key, value),\n delete: (key) => store.delete(key),\n deleteAll: async () => {\n await this.stopLoop();\n await store.deleteAll();\n }\n };\n }\n};\nexport {\n Actor,\n routePartykitRequest\n};\n",
6
+ "runtime/index.ts": "// Platform module served for `import { ... } from \"base44:runtime\"`.\n//\n// The generated Worker entry owns the per-request AsyncLocalStorage store\n// (module-scoped there), so this module reaches request state through the\n// `globalThis.Base44` bridge the entry prelude installs — same pattern as the\n// private-data-sources modules reading their manifest.\n\ninterface Base44Bridge {\n waitUntil(promise: Promise<unknown>): void;\n secrets: { get(name: string): string | undefined };\n}\n\nfunction bridge(): Base44Bridge {\n return (globalThis as { Base44?: Base44Bridge }).Base44 as Base44Bridge;\n}\n\n/** Extend this invocation until `promise` settles — background work after the\n * Response returns. Rides ctx.waitUntil; best-effort, not durable. Returns the\n * same promise so it composes. */\nexport function waitUntil<T>(promise: Promise<T>): Promise<T> {\n bridge().waitUntil(promise);\n return promise;\n}\n\n/** App secrets, read from the Worker env binding of the current request. */\nexport const secrets: { get(name: string): string | undefined } = {\n get(name: string): string | undefined {\n return bridge().secrets.get(name);\n },\n};\n",
7
+ "runtime-context.ts": "import { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport interface WorkerRuntimeContext {\n env: \"prod\" | \"preview\";\n fn?: string;\n secrets: Record<string, unknown>;\n workerEnv: Record<string, unknown>;\n waitUntil(promise: Promise<unknown>): void;\n [key: string]: unknown;\n}\n\nconst runtimeContext = new AsyncLocalStorage<WorkerRuntimeContext>();\n\nexport function currentWorkerRuntimeContext():\n | WorkerRuntimeContext\n | undefined {\n return runtimeContext.getStore();\n}\n\nexport function workerEnvironment(): Record<string, unknown> {\n return currentWorkerRuntimeContext()?.workerEnv ?? {};\n}\n\nexport function runWithWorkerEnvironment<T>(\n context: WorkerRuntimeContext,\n callback: () => T,\n): T {\n return runtimeContext.run(context, callback);\n}\n",
8
+ "private-data-sources/build-http.ts": "import { resolveHttpPrivateDataSourceUrl } from \"./http-url\";\nimport {\n currentPrivateDataSource,\n privateDataSourceBinding,\n} from \"./manifest\";\nimport type { FetchPrivateDataSourceBinding, PrivateDataSourceManifestEntry } from \"./types\";\n\n// Internal, NOT a public virtual module: app code cannot import this builder to\n// hand-forge a manifest entry. The only public entrypoints — http()/elasticsearch()\n// — resolve their entry from the immutable runtime manifest via lookupPrivateDataSource.\n\nfunction hasFetch(binding: unknown): binding is FetchPrivateDataSourceBinding {\n return (\n binding !== null &&\n typeof binding === \"object\" &&\n typeof (binding as { fetch?: unknown }).fetch === \"function\"\n );\n}\n\nexport function buildHttpPrivateDataSource(entry: PrivateDataSourceManifestEntry) {\n return Object.freeze({\n name: entry.name,\n type: entry.type,\n get bindingName() {\n return currentPrivateDataSource(entry).bindingName;\n },\n fetch(resource: RequestInfo | URL, init?: RequestInit) {\n const current = currentPrivateDataSource(entry);\n const binding = privateDataSourceBinding(current);\n if (!hasFetch(binding)) {\n throw new Error(\n `Private data source \"${current.name}\" does not expose fetch()`,\n );\n }\n return binding.fetch(\n resolveHttpPrivateDataSourceUrl(current, resource),\n init,\n );\n },\n // Fixed services expose the raw binding (Cloudflare pins their single\n // target). Deferred Actor handles decide this from the request manifest,\n // after their request environment exists.\n get binding() {\n const current = currentPrivateDataSource(entry);\n return current.bindingName !== undefined\n && current.networkScope !== \"network\"\n ? privateDataSourceBinding(current)\n : undefined;\n },\n });\n}\n",
9
+ "private-data-sources/elasticsearch.ts": "import { buildHttpPrivateDataSource } from \"./build-http\";\nimport { privateDataSourceReference } from \"./manifest\";\n\nexport function elasticsearch(name: unknown) {\n return buildHttpPrivateDataSource(\n privateDataSourceReference(name, \"elasticsearch\"),\n );\n}\n",
10
+ "private-data-sources/http-url.ts": "import type { PrivateDataSourceManifestEntry } from \"./types\";\n\nconst FALLBACK_BASE_URL = \"http://private-data-source.local\";\n\n/**\n * Resolve a fetch target for an HTTP private data source. Relative paths resolve\n * against the source's base URL; absolute URLs pass through. There is no host\n * allowlist: for a fixed VPC service Cloudflare pins the single target, and for a\n * network binding the reachable set is the customer's tunnel scope — the app can\n * fetch any host behind it (e.g. Trino router + cluster nextUri hosts).\n */\nexport function resolveHttpPrivateDataSourceUrl(\n entry: PrivateDataSourceManifestEntry,\n resource: RequestInfo | URL,\n): RequestInfo | URL {\n if (resource instanceof Request) return resource;\n const raw = resource instanceof URL ? resource.toString() : String(resource);\n try {\n return new URL(raw).toString();\n } catch {\n return new URL(raw || \"/\", entry.baseUrl || FALLBACK_BASE_URL).toString();\n }\n}\n",
11
+ "private-data-sources/http.ts": "import { buildHttpPrivateDataSource } from \"./build-http\";\nimport { privateDataSourceReference } from \"./manifest\";\n\nexport function http(name: unknown) {\n return buildHttpPrivateDataSource(privateDataSourceReference(name, \"http\"));\n}\n",
12
+ "private-data-sources/hyperdrive.ts": "import {\n currentPrivateDataSource,\n privateDataSourceReference,\n privateDataSourceBinding,\n} from \"./manifest\";\nimport type { PrivateDataSourceManifestEntry } from \"./types\";\n\nexport function buildHyperdrivePrivateDataSource(entry: PrivateDataSourceManifestEntry) {\n const binding = () =>\n privateDataSourceBinding(entry) as Record<string, unknown>;\n return Object.freeze({\n name: entry.name,\n type: entry.type,\n get bindingName() {\n return currentPrivateDataSource(entry).bindingName;\n },\n get connectionString() {\n return binding().connectionString;\n },\n get host() {\n return binding().host;\n },\n get port() {\n return binding().port;\n },\n get user() {\n return binding().user;\n },\n get username() {\n return binding().user;\n },\n get password() {\n return binding().password;\n },\n get database() {\n return binding().database;\n },\n get binding() {\n return binding();\n },\n });\n}\n\nexport function hyperdrive(name: unknown) {\n return buildHyperdrivePrivateDataSource(\n privateDataSourceReference(name, \"hyperdrive\"),\n );\n}\n",
13
+ "private-data-sources/ioredis-adapter.ts": "import { Buffer } from \"node:buffer\";\nimport { EventEmitter } from \"node:events\";\n\nimport { isCloudflareTcpSocket } from \"./tcp\";\n\ntype IoredisErrorEmitter = (type: string, err: Error) => void;\n\ninterface IoredisNetStream extends EventEmitter {\n connecting: boolean;\n destroyed: boolean;\n readable: boolean;\n writable: boolean;\n remoteAddress?: string;\n remotePort?: number;\n _writableState: { ended: boolean };\n write(data: string | Uint8Array, callback?: (err?: Error | null) => void): boolean;\n end(data?: string | Uint8Array | (() => void), callback?: () => void): IoredisNetStream;\n destroy(error?: Error): IoredisNetStream;\n setNoDelay(noDelay?: boolean): IoredisNetStream;\n setKeepAlive(enable?: boolean, initialDelay?: number): IoredisNetStream;\n setTimeout(timeout: number, callback?: () => void): IoredisNetStream;\n resume(): IoredisNetStream;\n pause(): IoredisNetStream;\n}\n\nfunction exactNodeBuffer(value: Uint8Array): Buffer {\n const bytes = new Uint8Array(value.byteLength);\n bytes.set(value);\n return Buffer.from(bytes.buffer);\n}\n\nfunction buildIoredisNetStream(\n socket: unknown,\n errorEmitter?: IoredisErrorEmitter,\n): IoredisNetStream {\n if (!isCloudflareTcpSocket(socket)) {\n throw new Error(\"Redis private data source did not return a readable/writable TCP socket\");\n }\n const cloudflareSocket = socket;\n\n const encoder = new TextEncoder();\n const stream = new EventEmitter() as IoredisNetStream;\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null;\n let writer: WritableStreamDefaultWriter<Uint8Array> | null = null;\n let readStarted = false;\n let connectEmitted = false;\n let closed = false;\n let timeout: ReturnType<typeof setTimeout> | null = null;\n let writeChain = Promise.resolve();\n\n function setClosed() {\n if (closed) return;\n closed = true;\n stream.destroyed = true;\n stream.readable = false;\n stream.writable = false;\n stream._writableState.ended = true;\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n try {\n reader?.releaseLock();\n } catch {\n // Ignore release errors when the stream is already closed.\n }\n reader = null;\n try {\n writer?.releaseLock();\n } catch {\n // Ignore release errors when the stream is already closed.\n }\n writer = null;\n stream.emit(\"close\");\n }\n\n function emitError(error: unknown) {\n const err = error instanceof Error ? error : new Error(String(error));\n errorEmitter?.(\"error\", err);\n stream.emit(\"error\", err);\n }\n\n function markConnected() {\n if (closed || connectEmitted) return;\n connectEmitted = true;\n stream.connecting = false;\n stream.emit(\"connect\");\n }\n\n async function readLoop() {\n const activeReader = reader ?? cloudflareSocket.readable.getReader();\n reader = activeReader;\n try {\n while (!closed) {\n const { value, done } = await activeReader.read();\n if (done) break;\n if (value) stream.emit(\"data\", exactNodeBuffer(value));\n }\n setClosed();\n } catch (error) {\n if (!closed) {\n emitError(error);\n setClosed();\n }\n }\n }\n\n function writeBytes(bytes: Uint8Array) {\n if (closed) return Promise.reject(new Error(\"Redis connection is closed\"));\n const activeWriter = writer ?? cloudflareSocket.writable.getWriter();\n writer = activeWriter;\n return activeWriter.write(bytes);\n }\n\n stream.connecting = true;\n stream.destroyed = false;\n stream.readable = true;\n stream.writable = true;\n stream._writableState = { ended: false };\n stream.write = (data, callback) => {\n const bytes = typeof data === \"string\" ? encoder.encode(data) : data;\n writeChain = writeChain\n .then(() => writeBytes(bytes))\n .then(\n () => callback?.(),\n (error) => {\n const err = error instanceof Error ? error : new Error(String(error));\n callback?.(err);\n emitError(err);\n },\n );\n return true;\n };\n stream.end = (data?: string | Uint8Array | (() => void), callback?: () => void) => {\n const done = typeof data === \"function\" ? data : callback;\n if (typeof data === \"string\" || data instanceof Uint8Array) {\n stream.write(data);\n }\n writeChain\n .finally(() => {\n done?.();\n try {\n cloudflareSocket.close?.();\n } finally {\n setClosed();\n }\n })\n .catch(() => {});\n return stream;\n };\n stream.destroy = (error?: Error) => {\n if (error) emitError(error);\n try {\n cloudflareSocket.close?.();\n } finally {\n setClosed();\n }\n return stream;\n };\n stream.setNoDelay = () => stream;\n stream.setKeepAlive = () => stream;\n stream.setTimeout = (duration, callback) => {\n if (timeout) clearTimeout(timeout);\n timeout = null;\n if (duration > 0) {\n timeout = setTimeout(() => {\n callback?.();\n stream.emit(\"timeout\");\n }, duration);\n }\n return stream;\n };\n stream.resume = () => {\n if (!readStarted) {\n readStarted = true;\n readLoop();\n }\n return stream;\n };\n stream.pause = () => stream;\n\n if (cloudflareSocket.opened) {\n cloudflareSocket.opened.then(markConnected, (error) => {\n emitError(error);\n stream.destroy(error instanceof Error ? error : new Error(String(error)));\n });\n } else {\n queueMicrotask(markConnected);\n }\n cloudflareSocket.closed?.finally(setClosed).catch(() => {});\n return stream;\n}\n\nexport function buildIoredisConnectorFactory(connect: () => unknown) {\n return class Base44IoredisConnector {\n firstError?: Error;\n private stream?: IoredisNetStream;\n private disconnectTimeout: number;\n\n constructor(options?: { disconnectTimeout?: number }) {\n this.disconnectTimeout =\n typeof options?.disconnectTimeout === \"number\" ? options.disconnectTimeout : 2000;\n }\n\n check() {\n return true;\n }\n\n connect(errorEmitter?: IoredisErrorEmitter) {\n return Promise.resolve(connect()).then((socket) => {\n try {\n this.stream = buildIoredisNetStream(socket, errorEmitter);\n return this.stream;\n } catch (error) {\n this.firstError = error instanceof Error ? error : new Error(String(error));\n throw this.firstError;\n }\n });\n }\n\n disconnect() {\n const stream = this.stream;\n if (!stream || stream.destroyed) return;\n const timeout = setTimeout(() => stream.destroy(), this.disconnectTimeout);\n stream.once(\"close\", () => clearTimeout(timeout));\n stream.end();\n }\n };\n}\n",
14
+ "private-data-sources/manifest.ts": "import {\n currentWorkerRuntimeContext,\n workerEnvironment,\n} from \"./runtime-environment\";\nimport { getRuntimeManifest } from \"./runtime-manifest-store\";\nimport type { PrivateDataSourceManifestEntry } from \"./types\";\n\nconst PRIVATE_DATA_SOURCES_MANIFEST_ENV = \"BASE44_PRIVATE_DATA_SOURCES\";\n\nfunction readStringVar(key: string): string | undefined {\n const value = workerEnvironment()[key];\n return typeof value === \"string\" ? value : undefined;\n}\n\n// Pin a HANDSHAKE-DELIVERED manifest to the deployed binding set: it is resolved\n// fresh per activation, but the script's Hyperdrive/VPC bindings are frozen at\n// upload — a source added/renamed since then must not surface an entry whose\n// binding this script does not have (its lookup would pass and then fail deeper\n// at privateDataSourceBinding). A manifest that exists as a Worker binding was\n// frozen together with the live bindings, so it is served unfiltered.\nfunction entryBindingIsDeployed(entry: PrivateDataSourceManifestEntry): boolean {\n return typeof entry.bindingName === \"string\" && workerEnvironment()[entry.bindingName] !== undefined;\n}\n\nfunction parsePrivateDataSourceManifest(): PrivateDataSourceManifestEntry[] {\n // Runtime-secrets bundles receive the manifest through the private, single-\n // instance store the activation shim writes (see runtime-manifest-store) — NOT\n // the Worker binding, process.env, or any user-reachable global. Old mode has\n // no runtime manifest and falls through to the immutable Worker binding.\n const runtimeRaw = getRuntimeManifest();\n const fromHandshake = runtimeRaw !== undefined;\n const raw = fromHandshake ? runtimeRaw : readStringVar(PRIVATE_DATA_SOURCES_MANIFEST_ENV);\n if (!raw) return [];\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch {\n return [];\n }\n const entries = Array.isArray(parsed)\n ? parsed.filter(\n (entry): entry is PrivateDataSourceManifestEntry =>\n entry !== null && typeof entry === \"object\",\n )\n : [];\n return fromHandshake ? entries.filter(entryBindingIsDeployed) : entries;\n}\n\nexport function normalizePrivateDataSourceKey(value: unknown): string {\n return String(value || \"\")\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n}\n\nexport function privateDataSourceReference(\n requestedName: unknown,\n expectedType: string,\n): PrivateDataSourceManifestEntry {\n if (currentWorkerRuntimeContext()) {\n return lookupPrivateDataSource(requestedName, expectedType);\n }\n return {\n name: String(requestedName || \"\"),\n type: expectedType,\n };\n}\n\nfunction privateDataSourceMatchRank(\n entry: PrivateDataSourceManifestEntry,\n requestedName: unknown,\n): number | null {\n const requested = String(requestedName || \"\");\n const normalizedRequested = normalizePrivateDataSourceKey(requested);\n const candidates = [\n { value: entry.name, rank: 0 },\n { value: entry.bindingName, rank: 1 },\n { value: entry.name, rank: 2, normalized: true },\n { value: entry.bindingName, rank: 3, normalized: true },\n ];\n let bestRank: number | null = null;\n for (const candidate of candidates) {\n if (typeof candidate.value !== \"string\") continue;\n const matches = candidate.normalized\n ? normalizePrivateDataSourceKey(candidate.value) === normalizedRequested\n : candidate.value === requested;\n if (matches && (bestRank === null || candidate.rank < bestRank)) {\n bestRank = candidate.rank;\n }\n }\n return bestRank;\n}\n\nfunction privateDataSourceMatchesExpectedType(\n entry: PrivateDataSourceManifestEntry,\n expectedType: string,\n): boolean {\n return entry.type === expectedType || (expectedType === \"hyperdrive\" && entry.bindingKind === \"hyperdrive\");\n}\n\nexport function lookupPrivateDataSource(\n requestedName: unknown,\n expectedType?: string,\n): PrivateDataSourceManifestEntry {\n const matches = parsePrivateDataSourceManifest()\n .map((entry) => ({ entry, rank: privateDataSourceMatchRank(entry, requestedName) }))\n .filter((match): match is { entry: PrivateDataSourceManifestEntry; rank: number } => match.rank !== null)\n .sort((a, b) => a.rank - b.rank);\n if (matches.length === 0) {\n throw new Error(`Private data source \"${requestedName}\" is not bound to this backend function`);\n }\n\n const typeMatches = expectedType\n ? matches.filter((candidate) => privateDataSourceMatchesExpectedType(candidate.entry, expectedType))\n : matches;\n if (typeMatches.length === 0) {\n throw new Error(`Private data source \"${requestedName}\" is not a ${expectedType} data source`);\n }\n\n const bestRank = typeMatches[0].rank;\n const bestMatches = typeMatches.filter((candidate) => candidate.rank === bestRank);\n if (bestMatches.length > 1) {\n const kind = expectedType ? ` ${expectedType}` : \"\";\n throw new Error(\n `Private data source \"${requestedName}\" is ambiguous: ${bestMatches.length}${kind} data sources match this name`,\n );\n }\n return bestMatches[0].entry;\n}\n\nexport function privateDataSourceBinding(entry: PrivateDataSourceManifestEntry): unknown {\n const current = lookupPrivateDataSource(entry.name, entry.type);\n if (!current.bindingName) {\n throw new Error(`Private data source \"${current.name}\" has no Worker binding name`);\n }\n const binding = workerEnvironment()[current.bindingName];\n if (!binding) {\n throw new Error(\n `Private data source binding \"${current.bindingName}\" is missing from the Worker environment`,\n );\n }\n return binding;\n}\n\nexport function currentPrivateDataSource(\n entry: PrivateDataSourceManifestEntry,\n): PrivateDataSourceManifestEntry {\n return lookupPrivateDataSource(entry.name, entry.type);\n}\n",
15
+ "private-data-sources/mariadb.ts": "import { buildHyperdrivePrivateDataSource } from \"./hyperdrive\";\nimport { privateDataSourceReference } from \"./manifest\";\n\nexport function mariadb(name: unknown) {\n return buildHyperdrivePrivateDataSource(\n privateDataSourceReference(name, \"mariadb\"),\n );\n}\n",
16
+ "private-data-sources/mongodb.ts": "import {\n currentPrivateDataSource,\n normalizePrivateDataSourceKey,\n privateDataSourceReference,\n} from \"./manifest\";\nimport { buildTcpPrivateDataSource } from \"./tcp\";\nimport { installPrivateNodeNetAdapter, registerPrivateNodeNetRoute } from \"./node-net-adapter\";\nimport type { PrivateDataSourceManifestEntry } from \"./types\";\n\nfunction encodeMongoConnectionPart(value: unknown): string {\n return encodeURIComponent(String(value ?? \"\"));\n}\n\nfunction buildMongoConnectionString(entry: PrivateDataSourceManifestEntry, hostname: string): string {\n const username = entry.username ? encodeMongoConnectionPart(entry.username) : \"\";\n const password = entry.password ? encodeMongoConnectionPart(entry.password) : \"\";\n const auth = username ? `${username}${password ? `:${password}` : \"\"}@` : \"\";\n const database = entry.database ? `/${encodeMongoConnectionPart(entry.database)}` : \"\";\n const port = typeof entry.port === \"number\" ? entry.port : 27017;\n return `mongodb://${auth}${hostname}:${port}${database}?directConnection=true`;\n}\n\nexport function mongodb(name: unknown) {\n installPrivateNodeNetAdapter();\n const entry = privateDataSourceReference(name, \"mongodb\");\n const source = buildTcpPrivateDataSource(entry) as ReturnType<typeof buildTcpPrivateDataSource> & {\n connect: (options?: unknown) => unknown;\n };\n const driverHostname = `base44-private-${normalizePrivateDataSourceKey(\n entry.bindingName || entry.name || \"mongodb\",\n )}`;\n\n function registerRoute() {\n const current = currentPrivateDataSource(entry);\n const port = typeof current.port === \"number\" ? current.port : 27017;\n const label = `MongoDB private data source \"${current.name || current.bindingName || driverHostname}\"`;\n registerPrivateNodeNetRoute(driverHostname, port, {\n label,\n connect: () => source.connect(),\n });\n }\n\n const extension = {\n driverHost: driverHostname,\n get connectionString() {\n const current = currentPrivateDataSource(entry);\n registerRoute();\n return buildMongoConnectionString(current, driverHostname);\n },\n get uri() {\n const current = currentPrivateDataSource(entry);\n registerRoute();\n return buildMongoConnectionString(current, driverHostname);\n },\n mongoClientOptions(options?: Record<string, unknown>) {\n registerRoute();\n return Object.freeze({\n directConnection: true,\n serverSelectionTimeoutMS: 5000,\n ...options,\n });\n },\n };\n return Object.freeze(\n Object.defineProperties(\n extension,\n Object.getOwnPropertyDescriptors(source),\n ) as typeof source & typeof extension,\n );\n}\n",
17
+ "private-data-sources/mysql.ts": "import { buildHyperdrivePrivateDataSource } from \"./hyperdrive\";\nimport { privateDataSourceReference } from \"./manifest\";\n\nexport function mysql(name: unknown) {\n return buildHyperdrivePrivateDataSource(\n privateDataSourceReference(name, \"mysql\"),\n );\n}\n",
18
+ "private-data-sources/node-net-adapter.ts": "import { Buffer } from \"node:buffer\";\nimport nodeNet from \"node:net\";\nimport { Duplex } from \"node:stream\";\n\nimport { isCloudflareTcpSocket } from \"./tcp\";\nimport type { CloudflareTcpSocket } from \"./types\";\n\ninterface NodeNetSocket extends Duplex {\n connecting: boolean;\n remoteAddress?: string;\n remotePort?: number;\n setNoDelay(noDelay?: boolean): NodeNetSocket;\n setKeepAlive(enable?: boolean, initialDelay?: number): NodeNetSocket;\n setTimeout(timeout: number, callback?: () => void): NodeNetSocket;\n}\n\ninterface PrivateNodeNetRoute {\n label: string;\n connect: () => unknown;\n}\n\nconst privateNodeNetRoutes = new Map<string, PrivateNodeNetRoute>();\n\nfunction exactNodeBuffer(value: Uint8Array): Buffer {\n const bytes = new Uint8Array(value.byteLength);\n bytes.set(value);\n return Buffer.from(bytes.buffer);\n}\n\nfunction nodeNetRouteKey(hostname: string, port: number): string {\n return `${hostname.toLowerCase()}:${port}`;\n}\n\nexport function registerPrivateNodeNetRoute(hostname: string, port: number, route: PrivateNodeNetRoute) {\n privateNodeNetRoutes.set(nodeNetRouteKey(hostname, port), route);\n}\n\nfunction parseNodeNetCreateConnectionAddress(args: unknown[]) {\n const [first, second] = args;\n if (first && typeof first === \"object\") {\n const options = first as { host?: unknown; hostname?: unknown; port?: unknown; path?: unknown };\n if (typeof options.path === \"string\") return null;\n const port = typeof options.port === \"number\" ? options.port : Number(options.port);\n if (!Number.isFinite(port)) return null;\n const hostname =\n typeof options.host === \"string\"\n ? options.host\n : typeof options.hostname === \"string\"\n ? options.hostname\n : \"localhost\";\n return { hostname, port };\n }\n\n if (typeof first === \"number\") {\n const hostname = typeof second === \"string\" ? second : \"localhost\";\n return { hostname, port: first };\n }\n\n return null;\n}\n\nfunction parseNodeNetConnectCallback(args: unknown[]): (() => void) | undefined {\n const callback = args.find((arg) => typeof arg === \"function\");\n return callback as (() => void) | undefined;\n}\n\nexport function installPrivateNodeNetAdapter() {\n const netModule = nodeNet as typeof nodeNet & {\n __base44PrivateDataSourceAdapterInstalled?: boolean;\n };\n if (netModule.__base44PrivateDataSourceAdapterInstalled) return;\n\n const originalCreateConnection = netModule.createConnection.bind(netModule);\n const createConnection = (...args: unknown[]) => {\n const address = parseNodeNetCreateConnectionAddress(args);\n const route = address\n ? privateNodeNetRoutes.get(nodeNetRouteKey(address.hostname, address.port))\n : undefined;\n if (!route) {\n return originalCreateConnection(...(args as Parameters<typeof nodeNet.createConnection>));\n }\n\n const socket = buildNodeNetSocket(route.connect(), route.label);\n const callback = parseNodeNetConnectCallback(args);\n if (callback) socket.once(\"connect\", callback);\n return socket;\n };\n\n netModule.createConnection = createConnection as typeof nodeNet.createConnection;\n netModule.connect = createConnection as typeof nodeNet.connect;\n netModule.__base44PrivateDataSourceAdapterInstalled = true;\n}\n\nexport function buildNodeNetSocket(\n socket: unknown,\n label: string,\n options: { deferConnectEvent?: boolean } = {},\n): NodeNetSocket {\n let cloudflareSocket: CloudflareTcpSocket | undefined;\n\n let reader: ReadableStreamDefaultReader<Uint8Array> | null = null;\n let writer: WritableStreamDefaultWriter<Uint8Array> | null = null;\n let closed = false;\n let connectEmitted = false;\n let readableEnded = false;\n let timeout: ReturnType<typeof setTimeout> | null = null;\n let writeChain = Promise.resolve();\n const socketReady = Promise.resolve(socket).then((resolved) => {\n if (!isCloudflareTcpSocket(resolved)) {\n throw new Error(`${label} did not return a readable/writable TCP socket`);\n }\n cloudflareSocket = resolved;\n if (closed) resolved.close?.();\n return resolved;\n });\n\n function clearTimer() {\n if (!timeout) return;\n clearTimeout(timeout);\n timeout = null;\n }\n\n function releaseLocks() {\n try {\n reader?.releaseLock();\n } catch {\n // Ignore release errors when the stream is already closed.\n }\n reader = null;\n try {\n writer?.releaseLock();\n } catch {\n // Ignore release errors when the stream is already closed.\n }\n writer = null;\n }\n\n function endReadable() {\n if (readableEnded) return;\n readableEnded = true;\n stream.push(null);\n }\n\n const stream = new Duplex({\n read() {\n // Data is pushed from the Cloudflare readable stream below.\n },\n write(chunk, _encoding, callback) {\n const bytes = chunk instanceof Uint8Array ? chunk : Buffer.from(chunk);\n writeChain = writeChain\n .then(async () => {\n const connectedSocket = await socketReady;\n if (closed) throw new Error(`${label} connection is closed`);\n const activeWriter = writer ?? connectedSocket.writable.getWriter();\n writer = activeWriter;\n await activeWriter.write(bytes);\n })\n .then(\n () => callback(),\n (error) => callback(error instanceof Error ? error : new Error(String(error))),\n );\n },\n final(callback) {\n writeChain\n .then(() => {\n try {\n cloudflareSocket?.close?.();\n } finally {\n callback();\n }\n })\n .catch((error) => callback(error instanceof Error ? error : new Error(String(error))));\n },\n destroy(error, callback) {\n closed = true;\n clearTimer();\n try {\n cloudflareSocket?.close?.();\n } catch {\n // The stream is already being destroyed; surface the original error below.\n }\n releaseLocks();\n callback(error);\n },\n }) as NodeNetSocket;\n\n stream.connecting = true;\n stream.setNoDelay = () => stream;\n stream.setKeepAlive = () => stream;\n stream.setTimeout = (duration, callback) => {\n clearTimer();\n if (duration > 0) {\n timeout = setTimeout(() => {\n callback?.();\n stream.emit(\"timeout\");\n }, duration);\n }\n return stream;\n };\n\n async function readLoop() {\n const activeReader = reader ?? cloudflareSocket!.readable.getReader();\n reader = activeReader;\n try {\n while (!closed) {\n const { value, done } = await activeReader.read();\n if (done) break;\n if (value) stream.push(exactNodeBuffer(value));\n }\n endReadable();\n releaseLocks();\n } catch (error) {\n if (!closed) stream.destroy(error instanceof Error ? error : new Error(String(error)));\n }\n }\n\n function markConnected(info?: unknown) {\n if (closed || connectEmitted) return;\n connectEmitted = true;\n const socketInfo = info as { remoteAddress?: unknown; remotePort?: unknown } | null;\n if (typeof socketInfo?.remoteAddress === \"string\") stream.remoteAddress = socketInfo.remoteAddress;\n if (typeof socketInfo?.remotePort === \"number\") stream.remotePort = socketInfo.remotePort;\n stream.connecting = false;\n stream.emit(\"connect\");\n readLoop();\n }\n\n function scheduleConnected(info?: unknown) {\n if (options.deferConnectEvent) {\n setTimeout(() => markConnected(info), 0);\n } else {\n markConnected(info);\n }\n }\n\n socketReady.then(async (connectedSocket) => {\n connectedSocket.closed?.finally(() => {\n closed = true;\n clearTimer();\n endReadable();\n releaseLocks();\n }).catch((error) => stream.destroy(error instanceof Error ? error : new Error(String(error))));\n const info = await connectedSocket.opened;\n scheduleConnected(info);\n }).catch((error) => stream.destroy(error instanceof Error ? error : new Error(String(error))));\n return stream;\n}\n",
19
+ "private-data-sources/oracle.ts": "import { createHash } from \"node:crypto\";\n\nimport { privateDataSourceReference } from \"./manifest\";\nimport { installPrivateNodeNetAdapter, registerPrivateNodeNetRoute } from \"./node-net-adapter\";\nimport { buildTcpPrivateDataSource } from \"./tcp\";\n\nexport function oracle(name: unknown) {\n installPrivateNodeNetAdapter();\n const entry = privateDataSourceReference(name, \"oracle\");\n const source = buildTcpPrivateDataSource(entry);\n // A numeric alias avoids Oracle's client-side DNS lookup of private hostnames.\n const hash = createHash(\"sha256\").update(String(entry.name)).digest(\"hex\").slice(0, 28);\n const driverHost = `fd44:${hash.match(/.{4}/g)!.join(\":\")}`;\n\n const extension = {\n oracledbOptions() {\n const serviceName = source.database;\n if (!serviceName || !/^[a-zA-Z0-9_.$#-]+$/.test(serviceName)) {\n throw new Error(\"Enter an Oracle service name using letters, numbers, underscores, dots, $, #, or hyphens.\");\n }\n const port = source.port!;\n registerPrivateNodeNetRoute(driverHost, port, {\n label: `Oracle private data source \"${entry.name}\"`,\n connect: () => source.connect(),\n });\n return Object.freeze({\n user: source.username,\n password: source.password,\n connectString: `(DESCRIPTION=(TRANSPORT_CONNECT_TIMEOUT=10)(CONNECT_TIMEOUT=15)(RETRY_COUNT=0)(ADDRESS=(PROTOCOL=TCP)(HOST=${driverHost})(PORT=${port}))(CONNECT_DATA=(SERVICE_NAME=${serviceName})(SERVER=DEDICATED)))`,\n });\n },\n };\n return Object.freeze(Object.defineProperties(extension, Object.getOwnPropertyDescriptors(source)) as typeof source & typeof extension);\n}\n",
20
+ "private-data-sources/postgres.ts": "import { buildHyperdrivePrivateDataSource } from \"./hyperdrive\";\nimport { privateDataSourceReference } from \"./manifest\";\n\nexport function postgres(name: unknown) {\n return buildHyperdrivePrivateDataSource(\n privateDataSourceReference(name, \"postgres\"),\n );\n}\n",
21
+ "private-data-sources/redis-auth.ts": "import type { CloudflareTcpSocket } from \"./types\";\n\nconst MAX_AUTH_RESPONSE_BYTES = 4096;\n\nfunction isCloudflareTcpSocket(socket: unknown): socket is CloudflareTcpSocket {\n const candidate = socket as Partial<CloudflareTcpSocket> | null;\n return (\n candidate !== null &&\n typeof candidate === \"object\" &&\n !!candidate.readable &&\n typeof candidate.readable.getReader === \"function\" &&\n !!candidate.writable &&\n typeof candidate.writable.getWriter === \"function\"\n );\n}\n\nfunction encodeRespArray(values: string[]): Uint8Array {\n const encoder = new TextEncoder();\n const chunks = [encoder.encode(`*${values.length}\\r\\n`)];\n for (const value of values) {\n const bytes = encoder.encode(value);\n chunks.push(encoder.encode(`$${bytes.byteLength}\\r\\n`), bytes, encoder.encode(\"\\r\\n\"));\n }\n const result = new Uint8Array(chunks.reduce((total, chunk) => total + chunk.byteLength, 0));\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return result;\n}\n\nasync function readResponseLine(reader: ReadableStreamDefaultReader<Uint8Array>): Promise<string> {\n const bytes: number[] = [];\n while (bytes.length <= MAX_AUTH_RESPONSE_BYTES) {\n const { value, done } = await reader.read();\n if (done) break;\n for (const byte of value ?? []) {\n bytes.push(byte);\n const length = bytes.length;\n if (length >= 2 && bytes[length - 2] === 13 && bytes[length - 1] === 10) {\n return new TextDecoder().decode(new Uint8Array(bytes.slice(0, -2)));\n }\n if (length > MAX_AUTH_RESPONSE_BYTES) break;\n }\n }\n throw new Error(\"Redis authentication failed: invalid or missing server response\");\n}\n\nasync function authenticateRedisSocket(\n socket: unknown,\n username: string | undefined,\n password: string,\n): Promise<CloudflareTcpSocket> {\n if (!isCloudflareTcpSocket(socket)) {\n throw new Error(\"Redis private data source did not return a readable/writable TCP socket\");\n }\n const reader = socket.readable.getReader();\n const writer = socket.writable.getWriter();\n try {\n await socket.opened;\n const auth = username ? [\"AUTH\", username, password] : [\"AUTH\", password];\n await writer.write(encodeRespArray(auth));\n const response = await readResponseLine(reader);\n if (response === \"+OK\") return socket;\n const message = response.startsWith(\"-\") ? response.slice(1) : `unexpected response ${JSON.stringify(response)}`;\n throw new Error(`Redis authentication failed: ${message}`);\n } catch (error) {\n socket.close?.();\n throw error;\n } finally {\n reader.releaseLock();\n writer.releaseLock();\n }\n}\n\nexport function authenticateRedisSocketIfNeeded(\n socket: unknown,\n username: string | undefined,\n password: string | undefined,\n): unknown | Promise<CloudflareTcpSocket> {\n return password ? authenticateRedisSocket(socket, username, password) : socket;\n}\n",
22
+ "private-data-sources/redis.ts": "import { buildIoredisConnectorFactory } from \"./ioredis-adapter\";\nimport { privateDataSourceReference } from \"./manifest\";\nimport { authenticateRedisSocketIfNeeded } from \"./redis-auth\";\nimport { buildTcpPrivateDataSource } from \"./tcp\";\n\nexport function redis(name: unknown) {\n const source = buildTcpPrivateDataSource(\n privateDataSourceReference(name, \"redis\"),\n ) as ReturnType<typeof buildTcpPrivateDataSource> & {\n connect: (options?: unknown) => unknown;\n };\n const { connect: _connect, ...descriptors } =\n Object.getOwnPropertyDescriptors(source);\n const extension = {\n connect(options?: unknown) {\n return authenticateRedisSocketIfNeeded(\n source.connect(options),\n source.username,\n source.password,\n );\n },\n ioredisConnector() {\n return buildIoredisConnectorFactory(() =>\n authenticateRedisSocketIfNeeded(\n source.connect(),\n source.username,\n source.password,\n ),\n );\n },\n ioredisOptions() {\n return Object.freeze({\n Connector: buildIoredisConnectorFactory(() => source.connect()),\n ...(source.password && source.username\n ? { username: source.username }\n : {}),\n ...(source.password ? { password: source.password } : {}),\n });\n },\n };\n return Object.freeze(\n Object.defineProperties(\n extension,\n descriptors,\n ) as typeof source & typeof extension,\n );\n}\n",
23
+ "private-data-sources/runtime-environment.ts": "export {\n currentWorkerRuntimeContext,\n workerEnvironment,\n} from \"base44:internal/runtime-context\";\n",
24
+ "private-data-sources/runtime-manifest-store.ts": "// Private, single-instance channel for the handshake-delivered PDS manifest.\n//\n// The manifest carries plaintext VPC/DB credentials, so it must NOT be\n// reachable by user code. It lives here in module-private state: the activation\n// shim writes it (via `setRuntimeManifest`) and `manifest.ts` reads it (via\n// `getRuntimeManifest`) — both resolve to THIS one module instance in the final\n// bundle, so the value never touches `globalThis`, `process.env`, or any\n// user-importable surface. User function code cannot import this module, via\n// two independent gates: (1) the bundler's private-data-sources virtual plugin\n// resolves the `base44:private-data-sources/runtime-manifest-store` specifier\n// ONLY when the importer is EXACTLY the injected activation shim's bundle-root\n// key (not a suffix/segment match — else a nested `x/__base44_activation.mjs`\n// could pose as it); (2) `assertNoReservedFilenames` rejects that basename at\n// any depth in user files. The relative `./runtime-manifest-store` path only\n// resolves inside the plugin's namespace (the adapters + manifest.ts), never\n// from a user file.\n//\n// Single instance: both importers resolve to the SAME (namespace, path) pair,\n// so esbuild emits one module. The runtime-secrets e2e proves this end to end —\n// if the two ever diverged into separate instances, the shim would write one\n// and manifest.ts would read the other (empty), and the delivered manifest\n// would resolve as \"not bound\".\n\nlet runtimeManifestRaw: string | undefined;\n\nexport function setRuntimeManifest(raw: string | undefined): void {\n runtimeManifestRaw = raw;\n}\n\nexport function getRuntimeManifest(): string | undefined {\n return runtimeManifestRaw;\n}\n",
25
+ "private-data-sources/sqlserver.ts": "import { buildTediousConnectorFactory } from \"./tedious-adapter\";\nimport { privateDataSourceReference } from \"./manifest\";\nimport { buildTcpPrivateDataSource } from \"./tcp\";\n\nexport function sqlserver(name: unknown) {\n const source = buildTcpPrivateDataSource(\n privateDataSourceReference(name, \"sqlserver\"),\n ) as ReturnType<typeof buildTcpPrivateDataSource> & {\n connect: (options?: unknown) => unknown;\n };\n const extension = {\n tediousConnector() {\n return buildTediousConnectorFactory(() => source.connect());\n },\n };\n return Object.freeze(\n Object.defineProperties(\n extension,\n Object.getOwnPropertyDescriptors(source),\n ) as typeof source & typeof extension,\n );\n}\n",
26
+ "private-data-sources/tcp.ts": "import {\n currentPrivateDataSource,\n privateDataSourceReference,\n privateDataSourceBinding,\n} from \"./manifest\";\nimport type {\n CloudflareTcpSocket,\n PrivateDataSourceManifestEntry,\n TcpPrivateDataSourceBinding,\n} from \"./types\";\n\nfunction hasConnect(binding: unknown): binding is TcpPrivateDataSourceBinding {\n return (\n binding !== null &&\n typeof binding === \"object\" &&\n typeof (binding as { connect?: unknown }).connect === \"function\"\n );\n}\n\nexport function buildTcpPrivateDataSource(entry: PrivateDataSourceManifestEntry) {\n return Object.freeze({\n name: entry.name,\n type: entry.type,\n get bindingName() {\n return currentPrivateDataSource(entry).bindingName;\n },\n get host() {\n return currentPrivateDataSource(entry).host;\n },\n get port() {\n return currentPrivateDataSource(entry).port;\n },\n get database() {\n return currentPrivateDataSource(entry).database;\n },\n get username() {\n return currentPrivateDataSource(entry).username;\n },\n get user() {\n return currentPrivateDataSource(entry).username;\n },\n get password() {\n return currentPrivateDataSource(entry).password;\n },\n connect(options?: unknown) {\n const current = currentPrivateDataSource(entry);\n const binding = privateDataSourceBinding(current);\n if (!hasConnect(binding)) {\n throw new Error(\n `Private data source \"${current.name}\" does not expose connect()`,\n );\n }\n const address =\n typeof current.host === \"string\" && typeof current.port === \"number\"\n ? { hostname: current.host, port: current.port }\n : null;\n if (!address) {\n throw new Error(\n `Private data source \"${current.name}\" has no TCP address`,\n );\n }\n return binding.connect(address, options);\n },\n get binding() {\n return privateDataSourceBinding(entry);\n },\n });\n}\n\nexport function isCloudflareTcpSocket(socket: unknown): socket is CloudflareTcpSocket {\n const socketObject = socket as Partial<CloudflareTcpSocket> | null;\n return (\n socketObject !== null &&\n typeof socketObject === \"object\" &&\n !!socketObject.readable &&\n typeof socketObject.readable.getReader === \"function\" &&\n !!socketObject.writable &&\n typeof socketObject.writable.getWriter === \"function\"\n );\n}\n\nexport function tcp(name: unknown, expectedType: string) {\n return buildTcpPrivateDataSource(\n privateDataSourceReference(name, expectedType),\n );\n}\n",
27
+ "private-data-sources/tedious-adapter.ts": "import { isCloudflareTcpSocket } from \"./tcp\";\nimport { buildNodeNetSocket } from \"./node-net-adapter\";\n\nfunction abortError(label: string, signal: AbortSignal): Error {\n return signal.reason instanceof Error\n ? signal.reason\n : new Error(`${label} connection aborted`);\n}\n\nasync function waitForCloudflareTcpSocketOpen(\n socket: unknown,\n label: string,\n signal?: AbortSignal,\n) {\n if (!isCloudflareTcpSocket(socket)) {\n throw new Error(`${label} did not return a readable/writable TCP socket`);\n }\n if (!socket.opened) return;\n\n if (!signal) {\n await socket.opened;\n return;\n }\n\n if (signal.aborted) {\n try {\n socket.close?.();\n } catch {\n // Best-effort cleanup; surface the abort reason below.\n }\n throw abortError(label, signal);\n }\n\n let onAbort: (() => void) | null = null;\n try {\n await Promise.race([\n socket.opened,\n new Promise((_, reject) => {\n onAbort = () => reject(abortError(label, signal));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }),\n ]);\n } catch (error) {\n try {\n socket.close?.();\n } catch {\n // Preserve the original connection/abort error.\n }\n throw error;\n } finally {\n if (onAbort) signal.removeEventListener(\"abort\", onAbort);\n }\n}\n\nfunction buildTediousNetSocket(socket: unknown) {\n return buildNodeNetSocket(socket, \"SQL Server private data source\", {\n deferConnectEvent: true,\n });\n}\n\nexport function buildTediousConnectorFactory(connect: () => unknown) {\n return async (_connectOptions?: unknown, _lookup?: unknown, signal?: AbortSignal) => {\n const socket = connect();\n await waitForCloudflareTcpSocketOpen(socket, \"SQL Server private data source\", signal);\n return buildTediousNetSocket(socket);\n };\n}\n",
28
+ "private-data-sources/types.ts": "export interface PrivateDataSourceManifestEntry {\n name?: string;\n type?: string;\n bindingName?: string;\n bindingKind?: string;\n networkScope?: string;\n baseUrl?: string;\n host?: string;\n port?: number;\n database?: string;\n username?: string;\n password?: string;\n}\n\nexport interface FetchPrivateDataSourceBinding {\n fetch: (resource: RequestInfo | URL, init?: RequestInit) => Response | Promise<Response>;\n}\n\nexport interface TcpPrivateDataSourceBinding {\n connect: (address: unknown, options?: unknown) => unknown;\n}\n\nexport interface CloudflareTcpSocket {\n readable: ReadableStream<Uint8Array>;\n writable: WritableStream<Uint8Array>;\n opened?: Promise<unknown>;\n close?: () => void;\n closed?: Promise<unknown>;\n}\n",
29
+ };
30
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../../../src/generated/assets.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,MAAM,CAAC,MAAM,MAAM,GAAqC;IACtD,eAAe,EAAE,i+sEAAi+sE;IACl/sE,qBAAqB,EAAE,8paAA8pa;IACrra,WAAW,EAAE,+/qCAA+/qC;IAC5grC,kBAAkB,EAAE,2pCAA2pC;IAC/qC,oBAAoB,EAAE,gyBAAgyB;IACtzB,oCAAoC,EAAE,k4DAAk4D;IACx6D,uCAAuC,EAAE,uRAAuR;IAChU,kCAAkC,EAAE,s9BAAs9B;IAC1/B,8BAA8B,EAAE,0PAA0P;IAC1R,oCAAoC,EAAE,yqCAAyqC;IAC/sC,yCAAyC,EAAE,0rNAA0rN;IACruN,kCAAkC,EAAE,2uLAA2uL;IAC/wL,iCAAiC,EAAE,uRAAuR;IAC1T,iCAAiC,EAAE,srFAAsrF;IACztF,+BAA+B,EAAE,mRAAmR;IACpT,0CAA0C,EAAE,08PAA08P;IACt/P,gCAAgC,EAAE,6pDAA6pD;IAC/rD,kCAAkC,EAAE,yRAAyR;IAC7T,oCAAoC,EAAE,s9FAAs9F;IAC5/F,+BAA+B,EAAE,s+CAAs+C;IACvgD,6CAA6C,EAAE,+GAA+G;IAC9J,gDAAgD,EAAE,2sDAA2sD;IAC7vD,mCAAmC,EAAE,yuBAAyuB;IAC9wB,6BAA6B,EAAE,+jFAA+jF;IAC9lF,yCAAyC,EAAE,y0DAAy0D;IACp3D,+BAA+B,EAAE,4vBAA4vB;CAC9xB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function lazyEsbuild(): Promise<typeof import("esbuild")>;
2
+ export declare function lazyDenoLoader(): Promise<typeof import("@deno/loader")>;
@@ -0,0 +1,11 @@
1
+ // esbuild and @deno/loader ship a native binary and WASM, so a consumer that
2
+ // bundles this compiler keeps them external — and an ESM import of an external
3
+ // is hoisted to the top of the bundle, loading both at that consumer's startup
4
+ // whether or not it ever compiles. Imported on first use instead.
5
+ export function lazyEsbuild() {
6
+ return import("esbuild");
7
+ }
8
+ export function lazyDenoLoader() {
9
+ return import("@deno/loader");
10
+ }
11
+ //# sourceMappingURL=lazy-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy-deps.js","sourceRoot":"","sources":["../../src/lazy-deps.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,+EAA+E;AAC/E,+EAA+E;AAC/E,kEAAkE;AAElE,MAAM,UAAU,WAAW;IACzB,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC;AAChC,CAAC"}
@@ -12,4 +12,4 @@
12
12
  * drifts from `package.json`, so bumping the package still means editing two
13
13
  * files but cannot mean forgetting one.
14
14
  */
15
- export declare const COMPILER_VERSION = "0.1.5";
15
+ export declare const COMPILER_VERSION = "0.1.6";
@@ -12,5 +12,5 @@
12
12
  * drifts from `package.json`, so bumping the package still means editing two
13
13
  * files but cannot mean forgetting one.
14
14
  */
15
- export const COMPILER_VERSION = "0.1.5";
15
+ export const COMPILER_VERSION = "0.1.6";
16
16
  //# sourceMappingURL=version.js.map
@@ -4,26 +4,18 @@
4
4
  * `npm:`/`jsr:`/`https:` specifiers) plus an injected shim and a generated
5
5
  * Worker entry. This is the layer that understands "functions" and "an app".
6
6
  */
7
- import { readFileSync } from "node:fs";
7
+ import { asset } from "./assets.js";
8
8
  import { DenoCompatError } from "./errors.js";
9
9
  import { RUNTIME_CONTEXT_SPECIFIER } from "./esbuild/runtime-context-virtual.js";
10
10
  import { ASCII_ESCAPE, CAPTURE_PATCH, INVOCATION_LOGS_PATCH, } from "./invocation-logs.js";
11
11
  import { TELEMETRY_PATCH, TELEMETRY_STORE_FIELDS } from "./telemetry.js";
12
12
  import { COMPILER_VERSION } from "./version.js";
13
- // Pre-built by scripts/build-shim.ts; regenerate it after changing the shim.
14
- // Read LAZILY, not at module load: build-shim.ts transitively imports this
15
- // module through the esbuild plugins, and on a fresh checkout dist/ doesn't
16
- // exist yet — a load-time read would crash the very script that produces these
17
- // files (and only pass locally where dist/ already exists).
18
- let _denoShimSource;
13
+ // Pre-built by scripts/build-shim.ts; regenerate them after changing a shim.
19
14
  function denoShimSource() {
20
- _denoShimSource ??= readFileSync(new URL("../dist/deno-shim.mjs", import.meta.url), "utf8");
21
- return _denoShimSource;
15
+ return asset("deno-shim.mjs");
22
16
  }
23
- let _activationShimSource;
24
17
  function activationShimSource() {
25
- _activationShimSource ??= readFileSync(new URL("../dist/activation-shim.mjs", import.meta.url), "utf8");
26
- return _activationShimSource;
18
+ return asset("activation-shim.mjs");
27
19
  }
28
20
  // Synthetic files injected into the bundle; asserted absent from user input.
29
21
  export const SHIM_FILENAME = "__base44_deno_shim.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"worker-entry.js","sourceRoot":"","sources":["../../src/worker-entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-entry.js","sourceRoot":"","sources":["../../src/worker-entry.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base44/functions-compiler",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Production compiler for Base44 backend functions — turns function sources into a single Cloudflare Workers module.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -23,9 +23,10 @@
23
23
  "README.md"
24
24
  ],
25
25
  "scripts": {
26
- "build": "bun run clean && bun run build:shim && tsc -p tsconfig.build.json && bun run scripts/copy-assets.ts",
26
+ "build": "bun run clean && bun run build:shim && tsc -p tsconfig.build.json",
27
27
  "build:shim": "bun run scripts/build-shim.ts",
28
- "clean": "rm -rf dist lib",
28
+ "prepare": "bun run build:shim",
29
+ "clean": "rm -rf dist lib src/generated",
29
30
  "typecheck": "tsc --noEmit",
30
31
  "test": "bun run build:shim && vitest run"
31
32
  },