create-opentray 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{bin-Dyfucd3C.mjs → bin-DDNgskyb.mjs} +195 -45
- package/dist/bin-DDNgskyb.mjs.map +1 -0
- package/dist/bin.mjs +1 -1
- package/dist/index.d.mts +23 -4
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/shell/assets/index.css +1 -1
- package/dist/shell/assets/index2.js +2 -0
- package/dist/shell/assets/main.js +19 -18
- package/dist/shell/assets/ort.bundle.min.js +2763 -0
- package/dist/shell/assets/ort.bundle.min.mjs +2817 -0
- package/dist/shell/assets/ort.webgpu.bundle.min.js +2763 -0
- package/dist/shell/assets/ort.webgpu.bundle.min.mjs +2817 -0
- package/dist/webui/assets/index.css +1 -1
- package/dist/webui/assets/index2.js +2 -0
- package/dist/webui/assets/main.js +19 -18
- package/dist/webui/assets/ort.bundle.min.js +2763 -0
- package/dist/webui/assets/ort.bundle.min.mjs +2817 -0
- package/dist/webui/assets/ort.webgpu.bundle.min.js +2763 -0
- package/dist/webui/assets/ort.webgpu.bundle.min.mjs +2817 -0
- package/package.json +6 -6
- package/dist/bin-Dyfucd3C.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin-DDNgskyb.mjs","names":["isOptionToken","encode","fetch","escapeRegex","decode","parse","util","Stream","util","util","zlib","zlib","util","Stream","zlib","util","zlib","crc32","PNG","CACHE_SCHEMA_VERSION","RECIPE_VERSION","require","parse","module","killProcessTree","isDirectoryOccupied","_a","F","initializer","util.jsonStringifyReplacer","core.$ZodAsyncError","util.finalizeIssue","core.config","errors.$ZodError","safeParse","errors.$ZodRealError","safeParseAsync","duration","_emoji","base64","date","time","datetime","string","number","boolean","util.floatSafeRemainder","util.NUMBER_FORMAT_RANGES","regexes.integer","util.nullish","util.getLengthableOrigin","regexes.lowercase","regexes.uppercase","util.escapeRegex","content","util.aborted","util.explicitlyAborted","core.$ZodAsyncError","safeParse","safeParseAsync","regexes.string","regexes.guid","regexes.uuid","regexes.email","regexes.emoji","regexes.nanoid","regexes.cuid","regexes.cuid2","regexes.ulid","regexes.xid","regexes.ksuid","regexes.datetime","regexes.date","regexes.time","regexes.duration","regexes.ipv4","regexes.ipv6","regexes.cidrv4","regexes.cidrv6","regexes.base64","regexes.base64url","regexes.e164","regexes.number","regexes.boolean","util.prefixIssues","util.optionalKeys","util.cached","isObject","util.isObject","util.esc","allowsEval","util.allowsEval","util.finalizeIssue","core.config","util.cleanRegex","util.isPlainObject","util.getEnumValues","util.escapeRegex","core.$ZodEncodeError","util.issue","util.normalizeParams","checks.$ZodCheckLessThan","checks.$ZodCheckGreaterThan","checks.$ZodCheckMultipleOf","checks.$ZodCheckMaxLength","checks.$ZodCheckMinLength","checks.$ZodCheckLengthEquals","checks.$ZodCheckRegex","checks.$ZodCheckLowerCase","checks.$ZodCheckUpperCase","checks.$ZodCheckIncludes","checks.$ZodCheckStartsWith","checks.$ZodCheckEndsWith","checks.$ZodCheckOverwrite","util.slugify","issue","util.issue","checks.$ZodCheck","process","process","core._isoDateTime","core._isoDate","core._isoTime","core._isoDuration","core.formatError","core.flattenError","util.jsonStringifyReplacer","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","util.mergeDefs","core.clone","checks.overwrite","processors.stringProcessor","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","checks.slugify","core._email","core._url","core._jwt","core._emoji","core._guid","core._uuid","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","core._cuid","core._cuid2","core._ulid","core._base64","core._base64url","core._xid","core._ksuid","core._ipv4","core._ipv6","core._cidrv4","core._cidrv6","core._e164","iso.datetime","iso.date","iso.time","iso.duration","core._string","processors.numberProcessor","checks.gt","checks.gte","checks.lt","checks.lte","checks.multipleOf","core._number","core._int","processors.booleanProcessor","core._boolean","processors.unknownProcessor","core._unknown","processors.neverProcessor","core._never","processors.arrayProcessor","core._array","processors.objectProcessor","util.extend","util.safeExtend","util.merge","util.pick","util.omit","util.partial","util.required","util.normalizeParams","processors.unionProcessor","processors.intersectionProcessor","processors.recordProcessor","processors.enumProcessor","processors.literalProcessor","processors.transformProcessor","core.$ZodEncodeError","issue","util.issue","processors.optionalProcessor","processors.nullableProcessor","processors.defaultProcessor","util.shallowClone","processors.prefaultProcessor","processors.nonoptionalProcessor","processors.catchProcessor","processors.pipeProcessor","processors.readonlyProcessor","processors.customProcessor","core._refine","core._superRefine","DEFAULT_ICON_SCALE","z\n .string","z.object","z.union","z.literal","z.string","z\n .object","z.enum","z.array","z.record","z.boolean","z\n .number","z.number","exists","resolveSkillRoot","readDependencyRange"],"sources":["../packages/core/src/app-id.ts","../../../node_modules/.pnpm/shell-quote@1.10.0/node_modules/shell-quote/quote.js","../../../node_modules/.pnpm/shell-quote@1.10.0/node_modules/shell-quote/parse.js","../../../node_modules/.pnpm/shell-quote@1.10.0/node_modules/shell-quote/index.js","../packages/core/src/tokenize.ts","../packages/core/src/command-family.ts","../packages/core/src/launch-vector.ts","../packages/core/src/port-scan.ts","../../../node_modules/.pnpm/node-html-parser@9.0.1/node_modules/node-html-parser/dist/index.mjs","../../../node_modules/.pnpm/figma-squircle@1.1.0/node_modules/figma-squircle/dist/index.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/chunkstream.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/interlace.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/paeth-predictor.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/filter-parse.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/filter-parse-async.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/constants.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/crc.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/parser.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/bitmapper.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/format-normaliser.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/parser-async.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/bitpacker.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/filter-pack.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/packer.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/packer-async.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/sync-inflate.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/sync-reader.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/filter-parse-sync.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/parser-sync.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/packer-sync.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/png-sync.js","../../../node_modules/.pnpm/pngjs@7.0.0/node_modules/pngjs/lib/png.js","../../../node_modules/.pnpm/@shockpkg+icon-encoder@3.2.3/node_modules/@shockpkg/icon-encoder/esm/util.mjs","../../../node_modules/.pnpm/@shockpkg+icon-encoder@3.2.3/node_modules/@shockpkg/icon-encoder/esm/icon.mjs","../../../node_modules/.pnpm/@shockpkg+icon-encoder@3.2.3/node_modules/@shockpkg/icon-encoder/esm/icon/icns.mjs","../../../node_modules/.pnpm/@shockpkg+icon-encoder@3.2.3/node_modules/@shockpkg/icon-encoder/esm/icon/ico.mjs","../../icon/src/encode.ts","../../icon/src/generate.ts","../../icon/src/glyph.ts","../../icon/src/compose.ts","../../icon/src/default-icon.ts","../packages/core/src/scrape.ts","../packages/core/src/icon-codec.ts","../packages/core/src/command-run.ts","../packages/core/src/entry-template.ts","../packages/core/src/url-entry-template.ts","../packages/core/src/shell-server-template.ts","../packages/core/src/scaffold.ts","../packages/core/src/materialize.ts","../packages/core/src/open-app.ts","../packages/core/src/errors.ts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/util.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/errors.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/parse.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/regexes.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/checks.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/doc.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/versions.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/schemas.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/registries.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/api.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/to-json-schema.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-processors.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/iso.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/errors.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/parse.js","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js","../packages/core/src/config.ts","../packages/core/src/registry.ts","../packages/core/src/runtime-record.ts","../packages/core/src/scan.ts","../packages/core/src/links.ts","../packages/core/src/resources.ts","../packages/core/src/lifecycle.ts","../packages/core/src/export.ts","../src/wizard.ts","../src/workbench-api.ts","../src/server.ts","../packages/cli/src/options.ts","../packages/cli/src/output.ts","../packages/cli/src/skill.ts","../packages/cli/src/commands.ts","../src/bin.ts"],"sourcesContent":["// Orthogonal intents (maintained 2026-08-19; original user request: the default\n// appId is the command segment before the first Option, reversed and dot-joined;\n// 2026-08-19 scoped-package commands must derive like the user reads them —\n// `npx @deepseek-ai/dsh@latest web` → `web.dsh.npx`: the `@scope` segment is\n// dropped and `name@version` keeps only `name`;\n// 2026-09-09 add-create-url-apps D5: URL applications derive identity from the\n// address text alone — first path segment + reversed hostname, offline):\n// 1. Derive the default appId from the pre-option tokens of the command.\n// 2. Derive the default identity of a URL application from its address.\n// 3. Keep the derivations pure so they are testable against the user's examples.\n// 4. Provide a display-name and directory-safe projection for scaffolding.\n\n/** A token that looks like a command option, e.g. `--xx`, `-p`, or `--port=8080`. */\nconst isOptionToken = (token: string): boolean => token.startsWith(\"-\") && token.length > 1;\n\n/**\n * Normalize one command token into an appId segment (or nothing).\n * - Scoped packages `@scope/name` split on `/` and DROP the `@scope` lead.\n * - A bare `@scope`-looking segment carries no identity and is dropped.\n * - `name@version` keeps only the name (a version pin is not identity).\n * - Plain paths keep only their last segment.\n */\nconst tokenToSegment = (token: string): string => {\n const segments = token.split(/[/\\\\]/).filter((segment) => segment.length > 0);\n if (segments.some((segment) => segment.startsWith(\"@\"))) {\n const unscoped = segments.filter((segment) => !segment.startsWith(\"@\"));\n return (unscoped[unscoped.length - 1] ?? \"\").split(\"@\")[0] ?? \"\";\n }\n const last = segments[segments.length - 1] ?? token;\n return last.split(\"@\")[0] ?? \"\";\n};\n\n/**\n * Default appId derivation. `npx somecommand start --xx` keeps the pre-option\n * tokens `[\"npx\", \"somecommand\", \"start\"]`, reverses them, and dot-joins:\n * `start.somecommand.npx`. Scoped commands like `npx @deepseek-ai/dsh@latest\n * web` derive `web.dsh.npx`.\n */\nexport const deriveDefaultAppId = (tokens: readonly string[]): string => {\n const preOption: string[] = [];\n for (const token of tokens) {\n if (isOptionToken(token)) {\n break;\n }\n preOption.push(token);\n }\n const segments = preOption\n .map(tokenToSegment)\n .filter((segment) => segment.length > 0)\n .reverse();\n if (segments.length === 0) {\n return \"app.opentray\";\n }\n return segments.join(\".\");\n};\n\n/** Human display name from the appId derivation: `Somecommand Start`. */\nexport const deriveDefaultAppName = (tokens: readonly string[]): string => {\n const appId = deriveDefaultAppId(tokens);\n return appId\n .split(\".\")\n .filter((segment) => segment.length > 0)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join(\" \");\n};\n\n/** Directory-safe project name from an appId (mirrors packaging normalizeAppId semantics). */\nexport const toProjectDirectoryName = (appId: string): string => {\n const normalized = appId\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n return normalized.length > 0 ? normalized : \"opentray-app\";\n};\n\n/** True when the appId has the shape consumers expect for stable identity. */\nexport const isValidAppId = (appId: string): boolean => {\n const trimmed = appId.trim();\n return trimmed.length > 0 && /^[a-z0-9]+(\\.[a-z0-9-]+)+$/iu.test(trimmed);\n};\n\n// URL identity derivation (add-create-url-apps D5, 2026-09-09): the address\n// text alone decides — first appId-legal path segment (most specific first,\n// matching the command derivation style) + reversed hostname; no fetch.\n// The appId FIRST segment must be bare alphanumeric (isValidAppId law), so a\n// hyphenated path segment (e.g. /my-tool) contributes the display name only.\nconst APPID_PATH_SEGMENT = /^[a-z0-9]+$/u;\nconst NAME_PATH_SEGMENT = /^[a-z0-9][a-z0-9_-]*$/iu;\n\nconst titleCaseSegment = (segment: string): string =>\n segment\n .split(/[-_]+/u)\n .filter((part) => part.length > 0)\n .map((part) => part.charAt(0).toUpperCase() + part.slice(1))\n .join(\" \");\n\nexport interface DerivedUrlIdentity {\n readonly appId: string;\n readonly appName: string;\n}\n\n/**\n * Default identity for a URL application: `https://example.com/app` derives\n * appId `app.com.example` / appName `App`; `https://example.com` derives\n * `com.example` / `Example`. An address whose derivation is not a valid\n * reverse-dotted identity (e.g. single-label hosts like `localhost`) falls\n * back to the shared appId while still deriving the display name.\n */\nexport const deriveUrlIdentity = (url: string): DerivedUrlIdentity => {\n let parsed: URL;\n try {\n parsed = new URL(url);\n } catch {\n return { appId: \"app.opentray\", appName: \"App\" };\n }\n const hostLabels = parsed.hostname.toLowerCase().split(\".\").filter((label) => label.length > 0);\n if (hostLabels.length === 0) {\n return { appId: \"app.opentray\", appName: \"App\" };\n }\n const pathSegments = parsed.pathname\n .split(\"/\")\n .map((segment) => segment.toLowerCase())\n .filter((segment) => segment.length > 0);\n const appIdSegment = pathSegments.find((segment) => APPID_PATH_SEGMENT.test(segment));\n const nameSegment = pathSegments.find((segment) => NAME_PATH_SEGMENT.test(segment));\n const reversedHost = [...hostLabels].reverse();\n const appId = (appIdSegment === undefined ? reversedHost : [appIdSegment, ...reversedHost]).join(\".\");\n const appName = titleCaseSegment(nameSegment ?? hostLabels[0] ?? \"app\") || \"App\";\n if (!isValidAppId(appId)) {\n return { appId: \"app.opentray\", appName };\n }\n return { appId, appName };\n};\n","'use strict';\n\n/** @import { ControlOperator } from './parse' */\n\n/** @type {ControlOperator['op'][]} */\nvar OPS = /** @type {const} */ ([\n\t'||',\n\t'&&',\n\t';;',\n\t'|&',\n\t'<(',\n\t'<<<',\n\t'>>',\n\t'>&',\n\t'<&',\n\t'&',\n\t';',\n\t'(',\n\t')',\n\t'|',\n\t'<',\n\t'>'\n]);\nvar LINE_TERMINATORS = /[\\n\\r\\u2028\\u2029]/;\nvar GLOB_SHELL_SPECIAL = /[\\s#!\"$&'():;<=>@\\\\^`|]/g;\n\n/** @type {typeof import('./quote')} */\nmodule.exports = function quote(xs) {\n\treturn xs.map(function (s) {\n\t\tif (s === '') {\n\t\t\treturn /** @type {const} */ ('\\'\\'');\n\t\t}\n\t\tif (s && typeof s === 'object') {\n\t\t\tif ('op' in s && s.op === 'glob') {\n\t\t\t\tif (typeof s.pattern !== 'string') {\n\t\t\t\t\tthrow new TypeError('glob token requires a string `pattern`');\n\t\t\t\t}\n\t\t\t\tif (LINE_TERMINATORS.test(s.pattern)) {\n\t\t\t\t\tthrow new TypeError('glob `pattern` must not contain line terminators');\n\t\t\t\t}\n\t\t\t\treturn s.pattern.replace(GLOB_SHELL_SPECIAL, '\\\\$&');\n\t\t\t}\n\t\t\tif ('op' in s && typeof s.op === 'string') {\n\t\t\t\tif (OPS.indexOf(s.op) < 0) {\n\t\t\t\t\tthrow new TypeError('invalid `op` value: ' + JSON.stringify(s.op));\n\t\t\t\t}\n\t\t\t\treturn s.op.replace(/[\\s\\S]/g, '\\\\$&');\n\t\t\t}\n\t\t\tif ('comment' in s && typeof s.comment === 'string') {\n\t\t\t\tif (LINE_TERMINATORS.test(s.comment)) {\n\t\t\t\t\tthrow new TypeError('`comment` must not contain line terminators');\n\t\t\t\t}\n\t\t\t\treturn '#' + s.comment;\n\t\t\t}\n\t\t\tthrow new TypeError('unrecognized object token shape');\n\t\t}\n\t\tif ((/[\"\\s\\\\]/).test(s) && !(/'/).test(s)) {\n\t\t\treturn \"'\" + s.replace(/(['])/g, '\\\\$1') + \"'\";\n\t\t}\n\t\tif ((/[\"'\\s]/).test(s)) {\n\t\t\treturn '\"' + s.replace(/([\"\\\\$`!])/g, '\\\\$1') + '\"';\n\t\t}\n\t\treturn String(s).replace(/([A-Za-z]:)?([#!\"$&'()*,:;<=>?@[\\\\\\]^`{|}~])/g, '$1\\\\$2');\n\t}).join(' ');\n};\n","'use strict';\n\n/**\n * @import {\n * \tControlOperator,\n * \tEnv,\n * \tGlobPattern,\n * \tParseEntry,\n * } from './parse' */\n\n// '<(' is process substitution operator and\n// can be parsed the same as control operator\nvar CONTROL = /** @type {const} */ ('(?:') + /** @type {const} */ ([\n\t'\\\\|\\\\|',\n\t'\\\\&\\\\&',\n\t';;',\n\t'\\\\|\\\\&',\n\t'\\\\<\\\\(',\n\t'\\\\<\\\\<\\\\<',\n\t'>>',\n\t'>\\\\&',\n\t'<\\\\&',\n\t'[&;()|<>]'\n]).join(/** @type {const} */ ('|')) + /** @type {const} */ (')');\nvar controlRE = new RegExp('^' + CONTROL + '$');\nvar META = /** @type {const} */ ('|&;()<> \\\\t');\nvar SINGLE_QUOTE = /** @type {const} */ ('\\'([^\\']*?)\\'');\nvar DOUBLE_QUOTE = /** @type {const} */ ('\"((\\\\\\\\\"|[^\"])*?)\"');\nvar hash = /^#$/;\n\nvar SQ = /** @type {const} */ (\"'\");\nvar DQ = /** @type {const} */ ('\"');\nvar DS = /** @type {const} */ ('$');\n\nvar TOKEN = '';\nvar mult = /** @type {const} */ (0x100000000); // Math.pow(16, 8);\nfor (var i = 0; i < 4; i++) {\n\tTOKEN += (mult * Math.random()).toString(16);\n}\nvar startsWithToken = new RegExp('^' + TOKEN);\n\n/**\n * @param {string} s\n * @param {RegExp} r\n */\nfunction matchAll(s, r) {\n\tvar origIndex = r.lastIndex;\n\n\tvar matches = [];\n\tvar matchObj;\n\n\twhile ((matchObj = r.exec(s))) {\n\t\tmatches[matches.length] = matchObj;\n\t\tif (r.lastIndex === matchObj.index) {\n\t\t\tr.lastIndex += 1;\n\t\t}\n\t}\n\n\tr.lastIndex = origIndex;\n\n\treturn matches;\n}\n\n/**\n * @param {Env} env\n * @param {string} pre\n * @param {string} key\n */\nfunction getVar(env, pre, key) {\n\tvar r = typeof env === 'function' ? env(key) : env[key];\n\tif (typeof r === 'undefined' && key != '') {\n\t\tr = '';\n\t} else if (typeof r === 'undefined') {\n\t\tr = '$';\n\t}\n\n\tif (typeof r === 'object') {\n\t\treturn pre + TOKEN + JSON.stringify(r) + TOKEN;\n\t}\n\treturn pre + r;\n}\n\n/**\n * @param {string} string\n * @param {Env} [env]\n * @param {{ escape?: string, splitUnquoted?: boolean | string }} [opts]\n * @returns {ParseEntry[]}\n */\nfunction parseInternal(string, env, opts) {\n\tif (!opts) {\n\t\topts = {};\n\t}\n\tvar BS = opts.escape || '\\\\';\n\tvar ifs = opts.splitUnquoted === true ? ' \\t\\n' : (typeof opts.splitUnquoted === 'string' ? opts.splitUnquoted : '');\n\tvar BAREWORD = '(\\\\' + BS + '[\\'\"' + META + ']|[^\\\\s\\'\"' + META + '])+';\n\n\tvar chunker = new RegExp([\n\t\t'(' + CONTROL + ')', // control chars\n\t\t'(' + BAREWORD + '|' + DOUBLE_QUOTE + '|' + SINGLE_QUOTE + ')+'\n\t].join('|'), 'g');\n\n\tvar matches = matchAll(string, chunker);\n\n\tif (matches.length === 0) {\n\t\treturn [];\n\t}\n\tif (!env) {\n\t\tenv = {};\n\t}\n\n\tvar commented = false;\n\n\treturn matches.map(function (match) {\n\t\tvar s = match[0];\n\t\tif (!s || commented) {\n\t\t\treturn void undefined;\n\t\t}\n\t\tif (controlRE.test(s)) {\n\t\t\treturn /** @type {ControlOperator} */ ({ op: s });\n\t\t}\n\n\t\t// Hand-written scanner/parser for Bash quoting rules:\n\t\t//\n\t\t// 1. inside single quotes, all characters are printed literally.\n\t\t// 2. inside double quotes, all characters are printed literally\n\t\t// except variables prefixed by '$' and backslashes followed by\n\t\t// either a double quote or another backslash.\n\t\t// 3. outside of any quotes, backslashes are treated as escape\n\t\t// characters and not printed (unless they are themselves escaped)\n\t\t// 4. quote context can switch mid-token if there is no whitespace\n\t\t// between the two quote contexts (e.g. all'one'\"token\" parses as\n\t\t// \"allonetoken\")\n\t\t/** @type {string | boolean} */\n\t\tvar quote = false;\n\t\tvar esc = false;\n\t\tvar out = '';\n\t\t/** @type {string[]} */\n\t\tvar words = [];\n\t\tvar sawQuote = false;\n\t\t/** @type {number | null} */\n\t\tvar pendingNw = null;\n\t\tvar isGlob = false;\n\t\t/** @type {number} */\n\t\tvar i;\n\n\t\tfunction parseEnvVar() {\n\t\t\ti += 1;\n\t\t\t/** @type {number | RegExpMatchArray | null} */\n\t\t\tvar varend;\n\t\t\t/** @type {string} */\n\t\t\tvar varname;\n\t\t\tvar char = s.charAt(i);\n\n\t\t\tif (char === '{') {\n\t\t\t\ti += 1;\n\t\t\t\tif (s.charAt(i) === '}') {\n\t\t\t\t\tthrow new Error('Bad substitution: ' + s.slice(i - 2, i + 1));\n\t\t\t\t}\n\t\t\t\t// match braces by depth so a nested `${` keeps its inner `}` from ending the outer substitution\n\t\t\t\tvar depth = 1;\n\t\t\t\tvarend = i;\n\t\t\t\twhile (depth > 0 && varend < s.length) {\n\t\t\t\t\tif (s.charAt(varend) === '{' && s.charAt(varend - 1) === '$') {\n\t\t\t\t\t\tdepth += 1;\n\t\t\t\t\t} else if (s.charAt(varend) === '}') {\n\t\t\t\t\t\tdepth -= 1;\n\t\t\t\t\t}\n\t\t\t\t\tvarend += 1;\n\t\t\t\t}\n\t\t\t\tif (depth !== 0) {\n\t\t\t\t\tthrow new Error('Bad substitution: ' + s.slice(i));\n\t\t\t\t}\n\t\t\t\tvarend -= 1;\n\t\t\t\tvarname = s.slice(i, varend);\n\t\t\t\ti = varend;\n\t\t\t} else if ((/[*@#?$!_-]/).test(char)) {\n\t\t\t\tvarname = char;\n\t\t\t\ti += 1;\n\t\t\t} else {\n\t\t\t\tvar slicedFromI = s.slice(i);\n\t\t\t\tvarend = slicedFromI.match(/[^\\w\\d_]/);\n\t\t\t\tif (!varend) {\n\t\t\t\t\tvarname = slicedFromI;\n\t\t\t\t\ti = s.length;\n\t\t\t\t} else {\n\t\t\t\t\tvarname = slicedFromI.slice(0, varend.index);\n\t\t\t\t\ti += /** @type {number} */ (varend.index) - 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn getVar(/** @type {NonNullable<typeof env>} */ (env), '', varname);\n\t\t}\n\n\t\tfunction flushRun() {\n\t\t\tif (pendingNw === null) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (pendingNw === 0) {\n\t\t\t\tif (out !== '') {\n\t\t\t\t\twords[words.length] = out;\n\t\t\t\t\tout = '';\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twords[words.length] = out;\n\t\t\t\tout = '';\n\t\t\t\tfor (var fe = 1; fe < pendingNw; fe += 1) {\n\t\t\t\t\twords[words.length] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tpendingNw = null;\n\t\t}\n\n\t\tfor (i = 0; i < s.length; i++) {\n\t\t\tvar c = s.charAt(i);\n\t\t\tif (ifs && c !== DS) {\n\t\t\t\tflushRun();\n\t\t\t}\n\t\t\tisGlob = isGlob || (!quote && (c === '*' || c === '?'));\n\t\t\tif (esc) {\n\t\t\t\tout += c;\n\t\t\t\tesc = false;\n\t\t\t} else if (quote) {\n\t\t\t\tif (c === quote) {\n\t\t\t\t\tquote = false;\n\t\t\t\t} else if (quote == SQ) {\n\t\t\t\t\tout += c;\n\t\t\t\t} else { // Double quote\n\t\t\t\t\tif (c === BS) {\n\t\t\t\t\t\ti += 1;\n\t\t\t\t\t\tc = s.charAt(i);\n\t\t\t\t\t\tif (c === DQ || c === BS || c === DS) {\n\t\t\t\t\t\t\tout += c;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tout += BS + c;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (c === DS) {\n\t\t\t\t\t\tout += parseEnvVar();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tout += c;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (c === DQ || c === SQ) {\n\t\t\t\tquote = c;\n\t\t\t\tsawQuote = true;\n\t\t\t} else if (controlRE.test(c)) {\n\t\t\t\treturn /** @type {ControlOperator} */ ({ op: s });\n\t\t\t} else if (hash.test(c)) {\n\t\t\t\tcommented = true;\n\t\t\t\tvar commentObj = { comment: string.slice(match.index + i + 1) };\n\t\t\t\tif (out.length) {\n\t\t\t\t\treturn /** @type {const} */ ([out, commentObj]);\n\t\t\t\t}\n\t\t\t\treturn /** @type {const} */ ([commentObj]);\n\t\t\t} else if (c === BS) {\n\t\t\t\tesc = true;\n\t\t\t} else if (c === DS) {\n\t\t\t\tvar value = parseEnvVar();\n\t\t\t\tif (!ifs) {\n\t\t\t\t\tout += value;\n\t\t\t\t} else {\n\t\t\t\t\tfor (var vi = 0; vi < value.length; vi += 1) {\n\t\t\t\t\t\tvar vc = value.charAt(vi);\n\t\t\t\t\t\tif (ifs.indexOf(vc) < 0) {\n\t\t\t\t\t\t\tflushRun();\n\t\t\t\t\t\t\tout += vc;\n\t\t\t\t\t\t} else if (pendingNw === null) {\n\t\t\t\t\t\t\tpendingNw = vc === ' ' || vc === '\\t' || vc === '\\n' ? 0 : 1;\n\t\t\t\t\t\t} else if (vc !== ' ' && vc !== '\\t' && vc !== '\\n') {\n\t\t\t\t\t\t\tpendingNw += 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tout += c;\n\t\t\t}\n\t\t}\n\n\t\tif (isGlob) {\n\t\t\treturn /** @type {GlobPattern} */ ({ op: 'glob', pattern: out });\n\t\t}\n\n\t\tif (ifs) {\n\t\t\tif (pendingNw !== null && pendingNw > 0) {\n\t\t\t\twords[words.length] = out;\n\t\t\t\tout = '';\n\t\t\t\tfor (var te = 1; te < pendingNw; te += 1) {\n\t\t\t\t\twords[words.length] = '';\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (out !== '' || (sawQuote && words.length === 0)) {\n\t\t\t\twords[words.length] = out;\n\t\t\t}\n\t\t\treturn words;\n\t\t}\n\n\t\treturn out;\n\t}).reduce(function (prev, arg) { // finalize parsed arguments\n\t\tif (typeof arg === 'undefined') {\n\t\t\treturn prev;\n\t\t}\n\t\t/** @type {ParseEntry[]} */ ([]).concat(arg).forEach(function (entry) {\n\t\t\tprev[prev.length] = entry;\n\t\t});\n\t\treturn prev;\n\t}, /** @type {ParseEntry[]} */ ([]));\n}\n\n/** @type {typeof import('./parse')} */\nmodule.exports = function parse(s, env, opts) {\n\tvar mapped = parseInternal(s, env, opts);\n\tif (typeof env !== 'function') {\n\t\treturn mapped;\n\t}\n\treturn mapped.reduce(function (acc, s) {\n\t\tif (typeof s === 'object') {\n\t\t\tacc[acc.length] = s;\n\t\t\treturn acc;\n\t\t}\n\t\tvar xs = s.split(RegExp('(' + TOKEN + '.*?' + TOKEN + ')', 'g'));\n\t\tif (xs.length === 1) {\n\t\t\tacc[acc.length] = xs[0];\n\t\t\treturn acc;\n\t\t}\n\t\txs.filter(Boolean).forEach(function (x) {\n\t\t\tacc[acc.length] = startsWithToken.test(x)\n\t\t\t\t? JSON.parse(x.split(TOKEN)[1])\n\t\t\t\t: x;\n\t\t});\n\t\treturn acc;\n\t}, /** @type {ParseEntry[]} */ ([]));\n};\n","'use strict';\n\nexports.quote = require('./quote');\nexports.parse = require('./parse');\n","// Orthogonal intents (maintained 2026-07-22; original user request: the wizard\n// runs the user's start command once and derives identity from it):\n// 1. Split a command line into an argv without invoking a shell.\n// 2. Preserve quoting and escaping semantics for POSIX-like input.\n// 3. Report unbalanced quotes instead of silently dropping tokens.\n//\n// Implementation: shell-quote's `parse` (battle-tested POSIX tokenizer) with a\n// thin adapter that keeps this module's typed result surface. shell-quote\n// returns special token objects for `$(...)`/`<`/`>` constructs — a wizard\n// command must never contain those, so they surface as typed errors instead\n// of being silently flattened into strings.\n\nimport { parse } from \"shell-quote\";\n\nexport interface TokenizeResult {\n readonly ok: boolean;\n readonly tokens: readonly string[];\n readonly error: string | undefined;\n}\n\n/**\n * Shell-style tokenizer for the wizard command input (shell-quote under the\n * hood). Supports single quotes, double quotes, backslash escapes, and\n * adjacent segments (`a\"b c\"d` → `[\"ab cd\"]`). It never executes anything;\n * it only produces the argv that will be spawned.\n */\nexport const tokenizeCommandLine = (input: string): TokenizeResult => {\n // shell-quote tolerates unbalanced quotes; the wizard's input contract is\n // stricter — surface them before parse (an unterminated quote almost always\n // means the user is mid-edit).\n if (/[\"']/.test(input)) {\n const single = (input.match(/'/gu) ?? []).length;\n const double = (input.match(/\"/gu) ?? []).length;\n if (single % 2 === 1) {\n return { ok: false, tokens: [], error: \"unbalanced single quote in command\" };\n }\n if (double % 2 === 1) {\n return { ok: false, tokens: [], error: \"unbalanced double quote in command\" };\n }\n }\n const parsed = parse(input);\n const tokens: string[] = [];\n for (const node of parsed) {\n if (typeof node !== \"string\") {\n // Command substitution / redirection operators: meaningless for a\n // spawn vector and dangerous to reinterpret — reject explicitly.\n const op = \"op\" in node ? node.op : \"pattern\" in node ? node.pattern : \"command\";\n return {\n ok: false,\n tokens: [],\n error: `command contains a shell operator token (${String(op)}); pass it as a quoted argument instead`,\n };\n }\n tokens.push(node);\n }\n if (tokens.length === 0) {\n return { ok: false, tokens: [], error: \"command is empty\" };\n }\n return { ok: true, tokens, error: undefined };\n};\n","// Orthogonal intents (maintained 2026-08-19; original user request: create-opentray\n// 命令配置支持业内流行命令系列(npm/go/rust/python/.NET/自定义)的分系列默认 appId、\n// 结构化参数输入与 npm 系列环境变量预设 — governed by openspec change\n// add-create-command-family):\n// 1. 解析命令 token 流 → 系列表单状态(plan.md D2/D9:服务端单一解析权威)。\n// 2. 分系列默认 appId 推导:runner 归一身份段 + 固定生态尾段(D3)。\n// 3. npm 系列(npx/pnpx)确认跳过环境变量预设推导(D4)。\n// 4. 系列表单状态 ↔ 命令串行化(含 Rust 两段式、deno npm: 前缀)。\n// 依赖约束:本模块必须保持纯函数、无平台依赖 —— create-webui 以手工镜像复用\n// (仓内 wizard-protocol.ts 模式),修改此处必须同步镜像与金样本测试。\n\nimport { deriveDefaultAppId } from \"./app-id\";\nimport { tokenizeCommandLine } from \"./tokenize\";\n\nexport type Family = \"npm\" | \"go\" | \"rust\" | \"python\" | \"dotnet\" | \"custom\";\n\nexport const FAMILY_ORDER: readonly Family[] = [\n \"npm\",\n \"go\",\n \"rust\",\n \"python\",\n \"dotnet\",\n \"custom\",\n];\n\nexport const FAMILY_LABEL: Record<Family, string> = {\n npm: \"npm\",\n go: \"Go\",\n rust: \"Rust\",\n python: \"Python\",\n dotnet: \".NET\",\n custom: \"自定义\",\n};\n\n/** 固定生态尾段(用户 2026-08-19 拍板「全名」方案)。 */\nexport const FAMILY_TAIL: Record<Exclude<Family, \"custom\">, string> = {\n npm: \"npmjs\",\n go: \"golang\",\n rust: \"rust\",\n python: \"python\",\n dotnet: \"dotnet\",\n};\n\n/** npm 系列的 runner 头(多词 runner 用空格连接)。 */\nexport const NPM_RUNNERS: readonly string[] = [\n \"npx\",\n \"pnpx\",\n \"bunx\",\n \"yarn dlx\",\n \"nubx\",\n \"deno run\",\n \"vpx\",\n];\n\nexport const PYTHON_RUNNERS: readonly string[] = [\"uvx\", \"pipx run\"];\n\nexport interface FamilyFormState {\n readonly family: Family;\n /** npm/python 系列的 runner(如 `npx`、`yarn dlx`、`uvx`、`pipx run`)。 */\n readonly runner: string;\n /** runner 与包名之间的选项 token(如 `deno run -A` 的 `-A`)。 */\n readonly runnerFlags: string;\n /** 包名 / module 路径 / crate / 工具 ID(保持用户输入原样)。 */\n readonly pkg: string;\n /** 空串 = latest/省略。 */\n readonly version: string;\n /** 包名之后的参数(原样字符串)。 */\n readonly args: string;\n /** 仅 Rust:运行二进制名;空串 = 与 crate 同名。 */\n readonly binary: string;\n /** 仅自定义:完整自由命令。 */\n readonly raw: string;\n}\n\nexport const EMPTY_FAMILY_STATE: FamilyFormState = {\n family: \"npm\",\n runner: \"npx\",\n runnerFlags: \"\",\n pkg: \"\",\n version: \"\",\n args: \"\",\n binary: \"\",\n raw: \"\",\n};\n\nconst isOptionToken = (token: string): boolean =>\n token.startsWith(\"-\") && token.length > 1;\n\n/** `npm:cowsay@latest` → base `npm:cowsay` + version `latest`;`@scope/name` 不误拆。 */\nconst splitPackageVersion = (pkg: string): { base: string; version: string } => {\n const at = pkg.lastIndexOf(\"@\");\n if (at > 0) {\n return { base: pkg.slice(0, at), version: pkg.slice(at + 1) };\n }\n return { base: pkg, version: \"\" };\n};\n\nconst joinParts = (parts: readonly string[]): string =>\n parts\n .map((part) => part.trim())\n .filter((part) => part.length > 0)\n .join(\" \");\n\nconst withVersion = (pkg: string, version: string): string => {\n if (version.trim().length === 0) {\n return pkg;\n }\n const { version: existing } = splitPackageVersion(pkg);\n if (existing.length > 0) {\n return pkg;\n }\n return `${pkg}@${version.trim()}`;\n};\n\nconst denoNpmPackage = (pkg: string): string =>\n /^(npm|jsr):/.test(pkg) ? pkg : `npm:${pkg}`;\n\n// 参数保真(plan.md D12 / Codex B5):FamilyFormState.args 保存「序列化后的\n// 参数串」。serializeArg 与 tokenizeCommandLine 的 POSIX 语义对称——含空白/\n// 引号/元字符的 token 以单引号包裹(内部 ' 转义为 '\\''),保证\n// tokenize(build(parse(cmd))) 与原 tokens 逐项相等;空 token 序列化为 ''。\nconst ARG_SAFE = /^[A-Za-z0-9@._/:+=-]+$/u;\nconst serializeArg = (token: string): string => {\n if (ARG_SAFE.test(token) && token.length > 0) {\n return token;\n }\n return `'${token.replaceAll(\"'\", `'\\\\''`)}'`;\n};\n\nexport const serializeArgs = (tokens: readonly string[]): string =>\n tokens.map(serializeArg).join(\" \");\n\n/** Rust 安装头命令(cargo install …):系列可解析,但向导绝不代执行(D7/D11)。 */\nexport const isRustInstallCommand = (tokens: readonly string[]): boolean =>\n (tokens[0] ?? \"\") === \"cargo\" && (tokens[1] ?? \"\") === \"install\";\n\n/** 跳过前导选项 token,返回 { runner 选项, 其余(首 token 必为非选项)}。 */\nconst splitLeadingFlags = (\n tokens: readonly string[],\n): { flags: string[]; rest: string[] } => {\n const flags: string[] = [];\n let index = 0;\n while (index < tokens.length && isOptionToken(tokens[index] ?? \"\")) {\n flags.push(tokens[index] ?? \"\");\n index += 1;\n }\n return { flags, rest: tokens.slice(index) };\n};\n\n// 带值 flag 保真(plan.md D12 / Codex R2-B2):runner 与包名之间的选项区只\n// 接受一个保守的「已知无值 flag」白名单(deno 的 -A/--allow-*/--no-* 等、\n// npx 的 -y/--yes)。白名单之外出现任何 option token(如 deno --config\n// <path>、npx -c <cmd>,其值会被误当包名),整条命令保守回落 custom,\n// 绝不静默改义;带 `=` 的长选项一律视为带值。\nconst VALUELESS_RUNNER_FLAGS: readonly Set<string>[] = [\n new Set([\n \"-A\",\n \"--allow-all\",\n \"--allow-read\",\n \"--allow-write\",\n \"--allow-net\",\n \"--allow-env\",\n \"--allow-run\",\n \"--allow-sys\",\n \"--allow-ffi\",\n \"--allow-hrtime\",\n \"--no-check\",\n \"--no-remote\",\n \"--quiet\",\n \"-q\",\n \"--cached-only\",\n ]),\n new Set([\"-y\", \"--yes\"]),\n];\n\nconst isKnownValuelessFlag = (token: string): boolean => {\n if (token.includes(\"=\")) {\n return false;\n }\n return VALUELESS_RUNNER_FLAGS.some((set) => set.has(token));\n};\n\n/** runner 选项区是否可无歧义解析(全为已知无值 flag)。 */\nexport const runnerFlagsAreUnambiguous = (\n flags: readonly string[],\n): boolean => flags.every((flag) => isKnownValuelessFlag(flag));\n\nconst matchHead = (tokens: readonly string[], head: string): number => {\n const parts = head.split(\" \");\n if (tokens.length < parts.length) {\n return -1;\n }\n for (let index = 0; index < parts.length; index += 1) {\n if ((tokens[index] ?? \"\") !== (parts[index] ?? \"\")) {\n return -1;\n }\n }\n return parts.length;\n};\n\nconst familyState = (patch: Partial<FamilyFormState>): FamilyFormState => ({\n ...EMPTY_FAMILY_STATE,\n ...patch,\n});\n\n// 带值/未知 runner flag 无法无歧义映射到结构化字段(其值会被误当包名):\n// 保守回落 custom,绝不静默改义(plan.md D12 / Codex R2-B2)。\nconst ambiguousToCustom = (tokens: readonly string[]): FamilyFormState =>\n familyState({ family: \"custom\", raw: serializeArgs(tokens) });\n\n/** 已有 token 流 → 系列表单状态(wizard prime/submit 的服务端入口)。 */\nexport const parseCommandTokens = (\n tokens: readonly string[],\n): FamilyFormState => {\n const first = tokens[0] ?? \"\";\n const second = tokens[1] ?? \"\";\n\n for (const runner of NPM_RUNNERS) {\n const consumed = matchHead(tokens, runner);\n if (consumed > 0) {\n const { flags, rest } = splitLeadingFlags(tokens.slice(consumed));\n if (!runnerFlagsAreUnambiguous(flags)) {\n return ambiguousToCustom(tokens);\n }\n const pkgToken = rest[0] ?? \"\";\n const { base, version } =\n pkgToken.length > 0\n ? splitPackageVersion(pkgToken)\n : { base: \"\", version: \"\" };\n return familyState({\n family: \"npm\",\n runner,\n runnerFlags: flags.join(\" \"),\n pkg: base,\n version,\n args: serializeArgs(rest.slice(1)),\n raw: tokens.join(\" \"),\n });\n }\n }\n\n if (first === \"go\" && second === \"run\") {\n const { flags, rest } = splitLeadingFlags(tokens.slice(2));\n if (!runnerFlagsAreUnambiguous(flags)) {\n return ambiguousToCustom(tokens);\n }\n const moduleToken = rest[0] ?? \"\";\n const { base, version } =\n moduleToken.length > 0\n ? splitPackageVersion(moduleToken)\n : { base: \"\", version: \"\" };\n return familyState({\n family: \"go\",\n runner: \"\",\n runnerFlags: flags.join(\" \"),\n pkg: base,\n version,\n args: serializeArgs(rest.slice(1)),\n raw: tokens.join(\" \"),\n });\n }\n\n if (first === \"cargo\" && second === \"install\") {\n const { flags, rest } = splitLeadingFlags(tokens.slice(2));\n if (!runnerFlagsAreUnambiguous(flags)) {\n return ambiguousToCustom(tokens);\n }\n const crateToken = rest[0] ?? \"\";\n const base =\n crateToken.length > 0 ? splitPackageVersion(crateToken).base : \"\";\n return familyState({\n family: \"rust\",\n runner: \"\",\n runnerFlags: flags.join(\" \"),\n pkg: base,\n args: serializeArgs(rest.slice(1)),\n raw: tokens.join(\" \"),\n });\n }\n\n if (first === \"uvx\" || (first === \"pipx\" && second === \"run\")) {\n const consumed = first === \"uvx\" ? 1 : 2;\n const { flags, rest } = splitLeadingFlags(tokens.slice(consumed));\n if (!runnerFlagsAreUnambiguous(flags)) {\n return ambiguousToCustom(tokens);\n }\n const pkgToken = rest[0] ?? \"\";\n const { base, version } =\n pkgToken.length > 0\n ? splitPackageVersion(pkgToken)\n : { base: \"\", version: \"\" };\n return familyState({\n family: \"python\",\n runner: first === \"uvx\" ? \"uvx\" : \"pipx run\",\n runnerFlags: flags.join(\" \"),\n pkg: base,\n version,\n args: serializeArgs(rest.slice(1)),\n raw: tokens.join(\" \"),\n });\n }\n\n if (first === \"dnx\") {\n const { flags, rest } = splitLeadingFlags(tokens.slice(1));\n if (!runnerFlagsAreUnambiguous(flags)) {\n return ambiguousToCustom(tokens);\n }\n const toolToken = rest[0] ?? \"\";\n const { base, version } =\n toolToken.length > 0\n ? splitPackageVersion(toolToken)\n : { base: \"\", version: \"\" };\n return familyState({\n family: \"dotnet\",\n runner: \"\",\n runnerFlags: flags.join(\" \"),\n pkg: base,\n version,\n args: serializeArgs(rest.slice(1)),\n raw: tokens.join(\" \"),\n });\n }\n\n return familyState({ family: \"custom\", raw: serializeArgs(tokens) });\n};\n\n/** 自由命令文本 → 系列表单状态;未识别任何系列头回落 custom(D9)。 */\nexport const parseCommand = (text: string): FamilyFormState => {\n const result = tokenizeCommandLine(text);\n if (!result.ok || result.tokens.length === 0) {\n // 输入中断(未闭合引号等):安全回落自定义,交由上层既有错误路径处理。\n return familyState({ family: \"custom\", raw: text });\n }\n return parseCommandTokens(result.tokens);\n};\n\n/** Rust 两段式:先 `cargo install`,再运行二进制(D7:安装仅为展示,不代执行)。 */\nexport const buildRustCommands = (\n state: FamilyFormState,\n): { install: string; run: string } => {\n const crate = state.pkg.trim();\n const binary = state.binary.trim().length > 0 ? state.binary.trim() : crate;\n return {\n install: joinParts([\"cargo\", \"install\", state.runnerFlags, crate]),\n run: joinParts([binary, state.args]),\n };\n};\n\n/** 系列表单状态 → 单行展示命令(Rust 取运行行;完整两段用 buildRustCommands)。 */\nexport const buildCommand = (state: FamilyFormState): string => {\n switch (state.family) {\n case \"custom\":\n return state.raw.trim();\n case \"rust\":\n return buildRustCommands(state).run;\n case \"npm\": {\n const pkg =\n state.runner === \"deno run\"\n ? denoNpmPackage(withVersion(state.pkg.trim(), state.version))\n : withVersion(state.pkg.trim(), state.version);\n return joinParts([state.runner, state.runnerFlags, pkg, state.args]);\n }\n case \"go\":\n return joinParts([\n \"go\",\n \"run\",\n state.runnerFlags,\n withVersion(state.pkg.trim(), state.version),\n state.args,\n ]);\n case \"python\":\n return joinParts([\n state.runner,\n state.runnerFlags,\n withVersion(state.pkg.trim(), state.version),\n state.args,\n ]);\n case \"dotnet\":\n return joinParts([\n \"dnx\",\n state.runnerFlags,\n withVersion(state.pkg.trim(), state.version),\n state.args,\n ]);\n }\n};\n\n/** 包名 → 身份段:去 npm:/jsr: 前缀、去 @scope、去版本、取末段;Python 的 . _ 归一为 -。 */\nconst packageToSegment = (pkg: string, family: Family): string => {\n const stripped = pkg.trim().replace(/^(npm|jsr):/, \"\");\n const segments = stripped\n .split(/[/\\\\]/)\n .filter((segment) => segment.length > 0 && !segment.startsWith(\"@\"));\n const last = segments[segments.length - 1] ?? stripped;\n let name = splitPackageVersion(last).base.toLowerCase();\n if (family === \"python\") {\n name = name.replace(/[._]/g, \"-\");\n }\n return name.replace(/[^a-z0-9-]/g, \"\");\n};\n\n/** 参数中第一个选项 token 之前的子命令段(如 `web`、`format`)。 */\nconst argSegments = (args: string): string[] => {\n const segments: string[] = [];\n const result = tokenizeCommandLine(args);\n if (!result.ok) {\n return segments;\n }\n for (const token of result.tokens) {\n if (isOptionToken(token)) {\n break;\n }\n const segment = token.toLowerCase().replace(/[^a-z0-9-]/g, \"\");\n if (segment.length === 0) {\n break;\n }\n segments.push(segment);\n }\n return segments;\n};\n\nexport interface FamilyDerivation {\n /** 生效的默认 appId(无身份段时为 app.opentray 回落)。 */\n readonly appId: string;\n /** 现行(custom)规则在同一命令上的结果,用于对照与回归判定。 */\n readonly legacyAppId: string;\n readonly appName: string;\n readonly identitySegments: readonly string[];\n /** custom 系列 = 旧规则本身(tail 为空)。 */\n readonly tail: string;\n readonly changed: boolean;\n}\n\n/**\n * 分系列默认 appId 推导(D3):身份段 = 选项前子命令段 + 归一化包名(Rust 以\n * 运行二进制为身份),点连接后接固定生态尾段;runner 机制段不参与,同一包换\n * runner 结果不变。custom 系列原样返回现行规则结果。\n */\nexport const deriveFamily = (state: FamilyFormState): FamilyDerivation => {\n const tokenizeResult = tokenizeCommandLine(buildCommand(state));\n const legacyAppId = deriveDefaultAppId(\n tokenizeResult.ok ? tokenizeResult.tokens : [],\n );\n if (state.family === \"custom\") {\n return {\n appId: legacyAppId,\n legacyAppId,\n appName:\n legacyAppId === \"app.opentray\"\n ? \"Opentray App\"\n : legacyAppId\n .split(\".\")\n .filter((segment) => segment.length > 0)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join(\" \"),\n identitySegments: legacyAppId.split(\".\"),\n tail: \"\",\n changed: false,\n };\n }\n\n const tail = FAMILY_TAIL[state.family];\n let identity: string[];\n switch (state.family) {\n case \"npm\":\n identity = [\n ...argSegments(state.args),\n packageToSegment(state.pkg, \"npm\"),\n ];\n break;\n case \"go\":\n identity = [\n ...argSegments(state.args),\n packageToSegment(state.pkg, \"go\"),\n ];\n break;\n case \"rust\": {\n const crate = packageToSegment(state.pkg, \"rust\");\n const binary =\n state.binary.trim().length > 0\n ? state.binary.trim().toLowerCase().replace(/[^a-z0-9-]/g, \"\")\n : crate;\n identity = [...argSegments(state.args), binary];\n break;\n }\n case \"python\":\n identity = [\n ...argSegments(state.args),\n packageToSegment(state.pkg, \"python\"),\n ];\n break;\n case \"dotnet\":\n identity = [\n ...argSegments(state.args),\n packageToSegment(state.pkg, \"dotnet\"),\n ];\n break;\n }\n const cleaned = identity.filter((segment) => segment.length > 0);\n // identity 已按 appId 顺序构建:子命令在前、包名在后,直接点连接。\n const appId =\n cleaned.length > 0 ? `${cleaned.join(\".\")}.${tail}` : \"app.opentray\";\n const appName =\n cleaned.length > 0\n ? cleaned\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join(\" \")\n : \"Opentray App\";\n return {\n appId,\n legacyAppId,\n appName,\n identitySegments: cleaned,\n tail,\n changed: appId !== legacyAppId,\n };\n};\n\n// ---------------------------------------------------------------------------\n// 环境变量预设(D4)\n// ---------------------------------------------------------------------------\n\nexport interface EnvPreset {\n readonly key: string;\n readonly value: string;\n readonly note: string;\n}\n\n/** npmjs 生态的 npx/pnpx 会交互式确认安装,注入 npm_config_yes=true 消除首跑交互。 */\nexport const envPresetsFor = (state: FamilyFormState): readonly EnvPreset[] => {\n if (state.family === \"npm\" && (state.runner === \"npx\" || state.runner === \"pnpx\")) {\n return [\n {\n key: \"npm_config_yes\",\n value: \"true\",\n note: \"跳过 npm 安装确认(等效 -y),首次运行无需交互\",\n },\n ];\n }\n return [];\n};\n","// Orthogonal intents (maintained 2026-07-22; original user request: the\n// generated app must relaunch from Finder/Dock without the terminal's PATH;\n// governed by the App Launch Law):\n// 1. Resolve the user command into a PATH-independent absolute vector.\n// 2. Unwrap `#!/usr/bin/env node` style scripts onto their interpreter.\n// 3. Keep environment maps out of the persisted descriptor.\n\nimport { constants } from \"node:fs\";\nimport { access, readFile } from \"node:fs/promises\";\nimport { delimiter, isAbsolute, resolve } from \"node:path\";\n\nexport interface LaunchVector {\n readonly command: string;\n readonly args: readonly string[];\n readonly cwd: string;\n /** Optional explicit env overlay merged over the runtime environment. */\n readonly env?: Readonly<Record<string, string>>;\n}\n\nexport interface ResolveLaunchVectorOptions {\n readonly tokens: readonly string[];\n readonly cwd: string;\n readonly platform?: NodeJS.Platform;\n readonly pathEnv?: string;\n readonly accessFile?: (path: string) => Promise<void>;\n readonly firstLine?: (path: string) => Promise<string | undefined>;\n}\n\nconst isExecutable = async (path: string): Promise<boolean> => {\n try {\n await access(path, constants.X_OK);\n return true;\n } catch {\n return false;\n }\n};\n\nconst readFirstLine = async (path: string): Promise<string | undefined> => {\n try {\n const content = await readFile(path, \"utf8\");\n return content.split(\"\\n\", 1)[0];\n } catch {\n return undefined;\n }\n};\n\n/** Resolve a bare command name against PATH; returns undefined when absent. */\nexport const resolveOnPath = async (\n command: string,\n options: Pick<ResolveLaunchVectorOptions, \"platform\" | \"pathEnv\" | \"accessFile\">,\n): Promise<string | undefined> => {\n if (isAbsolute(command) || command.includes(\"/\") || command.includes(\"\\\\\")) {\n return undefined;\n }\n const platform = options.platform ?? process.platform;\n const pathEnv =\n options.pathEnv ??\n (platform === \"win32\"\n ? `${process.env.PATH ?? \"\"}${delimiter}${process.cwd()}`\n : process.env.PATH ?? \"\");\n const extensions =\n platform === \"win32\" ? [\"\", \".cmd\", \".exe\", \".bat\"] : [\"\"];\n for (const dir of pathEnv.split(delimiter).filter(Boolean)) {\n for (const ext of extensions) {\n const candidate = resolve(dir, `${command}${ext}`);\n const exists = options.accessFile\n ? await options.accessFile(candidate).then(\n () => true,\n () => false,\n )\n : await isExecutable(candidate);\n if (exists) {\n return candidate;\n }\n }\n }\n return undefined;\n};\n\n/** Read a `#!/usr/bin/env <interpreter>` shebang; undefined for other files. */\nexport const parseShebangInterpreter = (\n firstLine: string | undefined,\n): { interpreter: string; args: readonly string[] } | undefined => {\n if (firstLine === undefined || !firstLine.startsWith(\"#!\")) {\n return undefined;\n }\n const tokens = firstLine.slice(2).trim().split(/\\s+/u).filter(Boolean);\n const [interpreter, ...interpreterArgs] = tokens;\n if (interpreter === undefined) {\n return undefined;\n }\n return { interpreter, args: interpreterArgs };\n};\n\n/**\n * Resolve the user's command tokens to a PATH-independent vector:\n * - absolute-ize bare executables through PATH lookup;\n * - resolve relative script paths against cwd;\n * - when the executable is an `env <interpreter>` shebang script, run the\n * interpreter directly with the script as its first argument.\n * The persisted descriptor never includes an environment map.\n */\nexport const resolveLaunchVector = async (\n options: ResolveLaunchVectorOptions,\n): Promise<LaunchVector> => {\n const [rawCommand, ...restArgs] = options.tokens;\n if (rawCommand === undefined || rawCommand.trim().length === 0) {\n throw new Error(\"launch vector requires a command\");\n }\n const accessFile = options.accessFile ?? (async (path: string) => access(path));\n const firstLine = options.firstLine ?? readFirstLine;\n\n let command = rawCommand;\n if (!isAbsolute(command)) {\n const onPath = await resolveOnPath(command, options);\n if (onPath !== undefined) {\n command = onPath;\n } else if (command.includes(\"/\") || command.includes(\"\\\\\")) {\n command = resolve(options.cwd, command);\n }\n }\n\n // Windows .cmd shims are not directly spawnable without a shell; route them\n // through cmd.exe explicitly so the vector stays shell-string-free. The\n // original user-typed path is preserved verbatim for cmd to resolve.\n const platform = options.platform ?? process.platform;\n if (platform === \"win32\" && /\\.cmd$/iu.test(rawCommand)) {\n return {\n command: resolveSystemPath(\"cmd.exe\"),\n args: [\"/d\", \"/s\", \"/c\", rawCommand, ...restArgs],\n cwd: options.cwd,\n };\n }\n\n const shebang = parseShebangInterpreter(await firstLine(command).catch(() => undefined));\n if (shebang !== undefined && !command.endsWith(\".exe\")) {\n let interpreter = shebang.interpreter;\n if (interpreter === \"/usr/bin/env\" || interpreter === \"env\") {\n const [envTarget, ...envArgs] = shebang.args;\n if (envTarget !== undefined) {\n const resolved = (await resolveOnPath(envTarget, options)) ?? envTarget;\n return {\n command: resolved,\n args: [...envArgs, command, ...restArgs],\n cwd: options.cwd,\n };\n }\n interpreter = \"/usr/bin/env\";\n }\n return {\n command: interpreter,\n args: [...shebang.args, command, ...restArgs],\n cwd: options.cwd,\n };\n }\n\n return { command, args: restArgs, cwd: options.cwd };\n};\n\nconst resolveSystemPath = (name: string): string => {\n if (isAbsolute(name)) {\n return name;\n }\n const systemRoot = process.env.SystemRoot ?? \"C:\\\\Windows\";\n return `${systemRoot}\\\\System32\\\\${name}`;\n};\n","// Orthogonal intents (maintained 2026-07-22; original user request: run the\n// command once and discover the HTTP ports it listens on):\n// 1. Snapshot listening TCP ports before spawn as the diff baseline.\n// 2. Enumerate listeners per platform: lsof (macOS/Linux), netstat/PowerShell (Windows).\n// 3. Verify candidates answer HTTP before listing them as services.\n\nimport { execFile } from \"node:child_process\";\nimport net from \"node:net\";\n\nexport interface DiscoveredService {\n readonly port: number;\n readonly url: string;\n readonly firstSeenAt: number;\n title?: string;\n}\n\nexport type ListenersRunner = (platform: NodeJS.Platform) => Promise<ReadonlySet<number>>;\n\n/** Listener snapshot with process ownership: port -> owning PIDs. */\nexport type ListenerOwners = ReadonlyMap<number, ReadonlySet<number>>;\n\n/** Loopback service URL for a discovered port. */\nexport const serviceUrl = (port: number): string => `http://127.0.0.1:${port}`;\n\nconst LOOPBACK_NO_PROXY = \"localhost,127.0.0.1,::1\";\n/** Ensure loopback fetches bypass system proxies (same guard as source examples). */\nexport const ensureLoopbackNoProxy = (env: NodeJS.ProcessEnv = process.env): void => {\n const existing = env.NO_PROXY ?? env.no_proxy ?? \"\";\n const merged = [existing, LOOPBACK_NO_PROXY]\n .join(\",\")\n .split(\",\")\n .map((value) => value.trim())\n .filter(Boolean);\n env.NO_PROXY = Array.from(new Set(merged)).join(\",\");\n env.no_proxy = env.NO_PROXY;\n};\n\nexport const listListeningPorts: ListenersRunner = async (platform) => {\n if (platform === \"win32\") {\n return listWindowsListeningPorts();\n }\n return listLsofListeningPorts();\n};\n\n/** Listeners with ownership; used to attribute ports to the preview process tree. */\nexport const listListeningPortOwners = async (\n platform: NodeJS.Platform = process.platform,\n): Promise<ListenerOwners> => {\n if (platform === \"win32\") {\n const structured = await listWindowsListenersStructured().catch(() => undefined);\n if (structured !== undefined) {\n return structured;\n }\n const stdout = await runCapture(\"netstat\", [\"-ano\", \"-p\", \"tcp\"]).catch(() => \"\");\n return parseNetstatPortOwners(stdout);\n }\n const stdout = await runCapture(\"lsof\", [\"-nP\", \"-iTCP\", \"-sTCP:LISTEN\", \"-F\", \"pPn\"]).catch(\n () => \"\",\n );\n return parseLsofPortOwners(stdout);\n};\n\nconst listLsofListeningPorts = async (): Promise<ReadonlySet<number>> => {\n // lsof exits non-zero when NO listener matches (\"no process found\") —\n // an empty result, not an error. The sibling owner-scan above already\n // treats it that way; this call site rejected and killed whole test\n // suites on quiet machines (CI runners).\n const stdout = await runCapture(\"lsof\", [\n \"-nP\",\n \"-iTCP\",\n \"-sTCP:LISTEN\",\n \"-F\",\n \"Pn\",\n ]).catch(() => \"\");\n return parseLsofPorts(stdout);\n};\n\n/**\n * Parse `lsof -F pPn` output into port -> owning PIDs. The field stream is\n * `p<pid>`, `P<proto>`, `n<host:port>` per socket, so each address inherits\n * the most recent pid field.\n */\nexport const parseLsofPortOwners = (stdout: string): ListenerOwners => {\n const owners = new Map<number, Set<number>>();\n let currentPid: number | undefined;\n for (const line of stdout.split(\"\\n\")) {\n if (line.startsWith(\"p\")) {\n const pid = Number.parseInt(line.slice(1), 10);\n currentPid = Number.isInteger(pid) ? pid : undefined;\n continue;\n }\n if (!line.startsWith(\"n\")) {\n continue;\n }\n const hostPort = line.slice(1);\n const index = hostPort.lastIndexOf(\":\");\n if (index < 0) {\n continue;\n }\n const port = Number.parseInt(hostPort.slice(index + 1), 10);\n if (!Number.isInteger(port) || port <= 0 || currentPid === undefined) {\n continue;\n }\n const pids = owners.get(port) ?? new Set<number>();\n pids.add(currentPid);\n owners.set(port, pids);\n }\n return owners;\n};\n\n/** Parse `netstat -ano -p tcp` into port -> owning PIDs (PID is the last column). */\n/**\n * Locale-independent netstat listener discriminator. A TCP listener data row\n * is [TCP, local:endpoint, remote:endpoint, state, pid] and its remote\n * endpoint is always the unspecified address with port 0 (0.0.0.0:0 /\n * [::]:0). We deliberately do NOT match the state word: it is localized on\n * non-English Windows (ABHÖREN, ...), which silently dropped every listener.\n */\nconst isNetstatListenerRow = (cols: readonly string[]): boolean => {\n if (cols.length < 5 || cols[0]?.toLowerCase() !== \"tcp\") {\n return false;\n }\n const remote = cols[2] ?? \"\";\n const portIndex = remote.lastIndexOf(\":\");\n if (portIndex < 0) {\n return false;\n }\n const remotePort = Number.parseInt(remote.slice(portIndex + 1), 10);\n const localPort = Number.parseInt((cols[1] ?? \"\").split(\":\").pop() ?? \"\", 10);\n return (\n remotePort === 0 &&\n Number.isInteger(localPort) &&\n localPort > 0 &&\n /^\\d+$/.test(cols[4] ?? \"\")\n );\n};\n\nexport const parseNetstatPortOwners = (stdout: string): ListenerOwners => {\n const owners = new Map<number, Set<number>>();\n for (const rawLine of stdout.split(\"\\n\")) {\n const columns = rawLine.trim().split(/\\s+/);\n if (!isNetstatListenerRow(columns)) {\n continue;\n }\n const local = columns[1] ?? \"\";\n const pid = Number.parseInt(columns[columns.length - 1] ?? \"\", 10);\n if (local === undefined || !Number.isInteger(pid)) {\n continue;\n }\n const index = local.lastIndexOf(\":\");\n const port = Number.parseInt(local.slice(index + 1), 10);\n if (!Number.isInteger(port) || port <= 0) {\n continue;\n }\n const pids = owners.get(port) ?? new Set<number>();\n pids.add(pid);\n owners.set(port, pids);\n }\n return owners;\n};\n\nexport const parseLsofPorts = (stdout: string): ReadonlySet<number> => {\n const ports = new Set<number>();\n for (const line of stdout.split(\"\\n\")) {\n if (!line.startsWith(\"n\")) {\n continue;\n }\n const hostPort = line.slice(1);\n const index = hostPort.lastIndexOf(\":\");\n if (index < 0) {\n continue;\n }\n const port = Number.parseInt(hostPort.slice(index + 1), 10);\n if (Number.isInteger(port) && port > 0) {\n ports.add(port);\n }\n }\n return ports;\n};\n\nconst listWindowsListeningPorts = async (): Promise<ReadonlySet<number>> => {\n // Structured source first: Get-NetTCPConnection is locale-independent\n // (netstat's state column is localized — ABHÖREN on German Windows — which\n // silently breaks the text parser) and carries OwningProcess in one call.\n const structured = await listWindowsListenersStructured().catch(() => undefined);\n if (structured !== undefined) {\n return new Set(structured.keys());\n }\n try {\n const stdout = await runCapture(\"netstat\", [\"-ano\", \"-p\", \"tcp\"]);\n return parseNetstatPorts(stdout);\n } catch {\n const stdout = await runPowerShellTcpListeners().catch(() => \"\");\n return parsePowerShellPorts(stdout);\n }\n};\n\n/**\n * Windows structured listener+owner enumeration via Get-NetTCPConnection\n * (Win8+/PS3.0+): `-State Listen` filters server-side sockets server-side\n * and ConvertTo-Json keeps parsing locale-independent.\n */\nconst listWindowsListenersStructured = async (): Promise<ListenerOwners> => {\n const script = [\n \"Get-NetTCPConnection -State Listen |\",\n \"Select-Object LocalPort, OwningProcess |\",\n \"ConvertTo-Json -Compress\",\n ].join(\" \");\n const stdout = await runCapture(\"powershell.exe\", [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-ExecutionPolicy\",\n \"Bypass\",\n \"-Command\",\n script,\n ]);\n return parseNetTcpConnectionJson(stdout);\n};\n\n/** Parse Get-NetTCPConnection JSON (single object or array) into owners. */\nexport const parseNetTcpConnectionJson = (stdout: string): ListenerOwners => {\n const owners = new Map<number, Set<number>>();\n const trimmed = stdout.trim();\n if (trimmed.length === 0) {\n return owners;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(trimmed);\n } catch {\n return owners;\n }\n const rows = Array.isArray(parsed) ? parsed : [parsed];\n for (const row of rows) {\n if (typeof row !== \"object\" || row === null) {\n continue;\n }\n const record = row as { LocalPort?: unknown; OwningProcess?: unknown };\n const port = Number(record.LocalPort);\n const pid = Number(record.OwningProcess);\n if (!Number.isInteger(port) || port <= 0 || !Number.isInteger(pid) || pid <= 0) {\n continue;\n }\n const pids = owners.get(port) ?? new Set<number>();\n pids.add(pid);\n owners.set(port, pids);\n }\n return owners;\n};\n\n/** Parses `netstat -ano -p tcp` output; keeps LISTENING rows. */\nexport const parseNetstatPorts = (stdout: string): ReadonlySet<number> => {\n const ports = new Set<number>();\n for (const rawLine of stdout.split(\"\\n\")) {\n const columns = rawLine.trim().split(/\\s+/);\n if (!isNetstatListenerRow(columns)) {\n continue;\n }\n const local = columns[1] ?? \"\";\n if (local === undefined) {\n continue;\n }\n const index = local.lastIndexOf(\":\");\n const port = Number.parseInt(local.slice(index + 1), 10);\n if (Number.isInteger(port) && port > 0) {\n ports.add(port);\n }\n }\n return ports;\n};\n\nconst runPowerShellTcpListeners = async (): Promise<string> => {\n // [Net.NetworkInformation.NetworkInformation] does not exist in Windows\n // PowerShell 5.1 (the class was never public); the real surface is the\n // IPGlobalProperties instance method GetActiveTcpListeners.\n const script = \"[System.Net.NetworkInformation.IPGlobalProperties]::GetIPGlobalProperties().GetActiveTcpListeners() | ForEach-Object { $_.Port }\";\n return await runCapture(\"powershell.exe\", [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-ExecutionPolicy\",\n \"Bypass\",\n \"-Command\",\n script,\n ]);\n};\n\nexport const parsePowerShellPorts = (stdout: string): ReadonlySet<number> => {\n const ports = new Set<number>();\n for (const line of stdout.split(\"\\n\")) {\n const port = Number.parseInt(line.trim(), 10);\n if (Number.isInteger(port) && port > 0) {\n ports.add(port);\n }\n }\n return ports;\n};\n\n/** TCP-connect probe used by the generated app and discovery verification. */\nexport const waitForTcpPort = async (\n port: number,\n timeoutMs: number,\n intervalMs = 150,\n host = \"127.0.0.1\",\n): Promise<boolean> => {\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n if (await tcpProbe(host, port)) {\n return true;\n }\n await sleep(intervalMs);\n }\n return false;\n};\n\nexport const tcpProbe = (host: string, port: number, timeoutMs = 500): Promise<boolean> =>\n new Promise((resolve) => {\n const socket = new net.Socket();\n const finish = (result: boolean): void => {\n socket.destroy();\n resolve(result);\n };\n socket.setTimeout(timeoutMs);\n socket.once(\"connect\", () => finish(true));\n socket.once(\"timeout\", () => finish(false));\n socket.once(\"error\", () => finish(false));\n socket.connect(port, host);\n });\n\n/** Verify a port answers with an HTTP response (any status counts). */\nexport const verifyHttpService = async (port: number, timeoutMs = 2_000): Promise<boolean> => {\n ensureLoopbackNoProxy();\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const response = await fetch(serviceUrl(port), {\n signal: controller.signal,\n redirect: \"manual\",\n });\n // Any HTTP answer (including 4xx/5xx and redirects) proves an HTTP service.\n return response.status > 0;\n } catch {\n return false;\n } finally {\n clearTimeout(timer);\n }\n};\n\n/** Collect a PID and every descendant (BFS over `pgrep -P` on POSIX). */\nexport const collectProcessTreePids = async (\n rootPid: number,\n platform: NodeJS.Platform = process.platform,\n options: { runCapture?: typeof runCapture } = {},\n): Promise<ReadonlySet<number>> => {\n const capture = options.runCapture ?? runCapture;\n const tree = new Set<number>([rootPid]);\n if (platform === \"win32\") {\n return collectWindowsProcessTreePids(rootPid, capture);\n }\n const frontier = [rootPid];\n while (frontier.length > 0) {\n const pid = frontier.shift();\n if (pid === undefined) {\n break;\n }\n const stdout = await capture(\"pgrep\", [\"-P\", String(pid)]).catch(() => \"\");\n for (const line of stdout.split(\"\\n\")) {\n const child = Number.parseInt(line.trim(), 10);\n if (Number.isInteger(child) && child > 0 && !tree.has(child)) {\n tree.add(child);\n frontier.push(child);\n }\n }\n }\n return tree;\n};\n\n/**\n * Windows descendant enumeration: BFS over Win32_Process ParentProcessId —\n * the same primitive taskkill /T uses internally (wmic is removed in Win11\n * 24H2, so CIM is the durable surface). npm/pnpm wrappers insert 2-3 layers\n * (cmd.exe -> npm -> node) between the spawned PID and the listener; without\n * this walk the ownership gate rejected every discovered port on Windows.\n */\nconst collectWindowsProcessTreePids = async (\n rootPid: number,\n capture: typeof runCapture,\n): Promise<ReadonlySet<number>> => {\n const script = [\n \"$pids = @(\" + String(rootPid) + \");\",\n \"$all = Get-CimInstance Win32_Process | Select-Object ProcessId, ParentProcessId;\",\n \"for ($i = 0; $i -lt $pids.Count; $i++) {\",\n \" $children = $all | Where-Object { $_.ParentProcessId -eq $pids[$i] -and -not $pids.Contains([int]$_.ProcessId) };\",\n \" foreach ($c in $children) { [void]$pids.Add([int]$c.ProcessId) }\",\n \"}\",\n \"$pids -join ' '\",\n ].join(\" \");\n const stdout = await capture(\"powershell.exe\", [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-ExecutionPolicy\",\n \"Bypass\",\n \"-Command\",\n script,\n ]).catch(() => \"\");\n const tree = new Set<number>([rootPid]);\n for (const token of stdout.split(/\\s+/)) {\n const pid = Number.parseInt(token, 10);\n if (Number.isInteger(pid) && pid > 0) {\n tree.add(pid);\n }\n }\n return tree;\n};\n\nexport interface PortDiscoveryOptions {\n readonly platform?: NodeJS.Platform;\n readonly baseline: ReadonlySet<number>;\n readonly listListeners?: ListenersRunner;\n readonly verifyHttp?: (port: number) => Promise<boolean>;\n /** Resolves the PIDs whose listeners count as services (preview process tree). */\n readonly resolveOwnerPids?: () => Promise<ReadonlySet<number>>;\n readonly listOwners?: () => Promise<ListenerOwners>;\n readonly intervalMs?: number;\n}\n\nexport interface PortDiscoverySession {\n /** Known new services, first-seen order. */\n services(): readonly DiscoveredService[];\n /** One polling pass; resolves to services discovered during this pass. */\n poll(): Promise<readonly DiscoveredService[]>;\n stop(): void;\n}\n\n/**\n * Diff-based port discovery. Each poll re-enumerates listeners, keeps ports\n * absent from the baseline, and adds HTTP-verified ones in first-seen order.\n */\nexport const createPortDiscovery = (options: PortDiscoveryOptions): PortDiscoverySession => {\n const platform = options.platform ?? process.platform;\n const listListeners = options.listListeners ?? listListeningPorts;\n const verifyHttp = options.verifyHttp ?? verifyHttpService;\n const listOwners = options.listOwners ?? (() => listListeningPortOwners(platform));\n const services = new Map<number, DiscoveredService>();\n const verifying = new Set<number>();\n const rejected = new Set<number>();\n let stopped = false;\n\n const poll = async (): Promise<readonly DiscoveredService[]> => {\n if (stopped) {\n return [];\n }\n let listeners: ReadonlySet<number>;\n try {\n listeners = await listListeners(platform);\n } catch {\n return [];\n }\n\n // Ownership filter: only ports owned by the preview process tree may\n // become services, so foreign loopback listeners (browser DevTools\n // sockets, sync daemons) are never adopted.\n let owners: ListenerOwners | undefined;\n let ownerPids: ReadonlySet<number> | undefined;\n if (options.resolveOwnerPids !== undefined) {\n const [ownerMap, pids] = await Promise.all([\n listOwners().catch(() => undefined),\n options.resolveOwnerPids().catch(() => undefined),\n ]);\n owners = ownerMap;\n ownerPids = pids;\n }\n\n const added: DiscoveredService[] = [];\n const pending: Promise<void>[] = [];\n for (const port of listeners) {\n if (options.baseline.has(port) || services.has(port) || rejected.has(port)) {\n continue;\n }\n if (verifying.has(port)) {\n continue;\n }\n // Ownership gating only when BOTH sides enumerated. An empty owner map\n // (enumeration failed) or an empty tree must NOT reject every port —\n // that was the Windows \"zero services, zero errors\" failure mode.\n const ownersKnown = owners !== undefined && owners.size > 0;\n const treeKnown = ownerPids !== undefined && ownerPids.size > 0;\n if (ownersKnown && treeKnown && owners !== undefined && ownerPids !== undefined) {\n const portOwners = owners.get(port);\n const owned =\n portOwners !== undefined &&\n [...portOwners].some((pid) => ownerPids.has(pid));\n if (!owned) {\n // Another process owns this listener; ignore it permanently unless\n // ownership changes (re-checked next poll while unknown).\n continue;\n }\n }\n verifying.add(port);\n pending.push(\n verifyHttp(port)\n .then((ok) => {\n if (!ok) {\n rejected.add(port);\n return;\n }\n const service: DiscoveredService = {\n port,\n url: serviceUrl(port),\n firstSeenAt: Date.now(),\n };\n services.set(port, service);\n added.push(service);\n })\n .catch(() => {\n rejected.add(port);\n })\n .finally(() => {\n verifying.delete(port);\n }),\n );\n }\n await Promise.all(pending);\n return [...services.values()].sort((a, b) => a.firstSeenAt - b.firstSeenAt);\n };\n\n return {\n services: () => [...services.values()].sort((a, b) => a.firstSeenAt - b.firstSeenAt),\n poll,\n stop() {\n stopped = true;\n },\n };\n};\n\nexport const runCapture = async (\n command: string,\n args: readonly string[],\n): Promise<string> =>\n new Promise((resolve, reject) => {\n execFile(\n command,\n [...args],\n { encoding: \"utf8\", timeout: 10_000, windowsHide: true },\n (error, stdout) => {\n if (error !== null) {\n reject(error);\n return;\n }\n resolve(stdout);\n },\n );\n });\n\nconst sleep = (ms: number): Promise<void> =>\n new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n","//#region \\0rolldown/runtime.js\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 __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);\nvar __exportAll = (all, no_symbols) => {\n\tlet target = {};\n\tfor (var name in all) __defProp(target, name, {\n\t\tget: all[name],\n\t\tenumerable: true\n\t});\n\tif (!no_symbols) __defProp(target, Symbol.toStringTag, { value: \"Module\" });\n\treturn target;\n};\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target, mod));\n//#endregion\n//#region node_modules/entities/dist/decode-codepoint.js\nconst decodeMap = /* @__PURE__ */ new Map([\n\t[0, 65533],\n\t[128, 8364],\n\t[130, 8218],\n\t[131, 402],\n\t[132, 8222],\n\t[133, 8230],\n\t[134, 8224],\n\t[135, 8225],\n\t[136, 710],\n\t[137, 8240],\n\t[138, 352],\n\t[139, 8249],\n\t[140, 338],\n\t[142, 381],\n\t[145, 8216],\n\t[146, 8217],\n\t[147, 8220],\n\t[148, 8221],\n\t[149, 8226],\n\t[150, 8211],\n\t[151, 8212],\n\t[152, 732],\n\t[153, 8482],\n\t[154, 353],\n\t[155, 8250],\n\t[156, 339],\n\t[158, 382],\n\t[159, 376]\n]);\n/**\n* Replace the given code point with a replacement character if it is a\n* surrogate or is outside the valid range. Otherwise return the code\n* point unchanged.\n* @param codePoint Unicode code point to convert.\n*/\nfunction replaceCodePoint(codePoint) {\n\tvar _decodeMap$get;\n\tif (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) return 65533;\n\treturn (_decodeMap$get = decodeMap.get(codePoint)) !== null && _decodeMap$get !== void 0 ? _decodeMap$get : codePoint;\n}\n//#endregion\n//#region node_modules/entities/dist/internal/decode-shared.js\n/**\n* Shared base64 decode helper for generated decode data.\n* Assumes global atob is available.\n* @param input Input string to encode or decode.\n*/\nfunction decodeBase64(input) {\n\tconst binary = atob(input);\n\tconst evenLength = binary.length & -2;\n\tconst out = new Uint16Array(evenLength / 2);\n\tfor (let index = 0, outIndex = 0; index < evenLength; index += 2) {\n\t\tconst lo = binary.charCodeAt(index);\n\t\tconst hi = binary.charCodeAt(index + 1);\n\t\tout[outIndex++] = lo | hi << 8;\n\t}\n\treturn out;\n}\n//#endregion\n//#region node_modules/entities/dist/generated/decode-data-html.js\n/** Packed HTML decode trie data. */\nconst htmlDecodeTree = /* #__PURE__ */ decodeBase64(\"QR08ALkAAgH6AYsDNQR2BO0EPgXZBQEGLAbdBxMISQrvCmQLfQurDKQNLw4fD4YPpA+6D/IPAAAAAAAAAAAAAAAAKhBMEY8TmxUWF2EYLBkxGuAa3RsJHDscWR8YIC8jSCSIJcMl6ie3Ku8rEC0CLjoupS7kLgAIRU1hYmNmZ2xtbm9wcnN0dVQAWgBeAGUAaQBzAHcAfgCBAIQAhwCSAJoAoACsALMAbABpAGcAO4DGAMZAUAA7gCYAJkBjAHUAdABlADuAwQDBQHIiZXZlAAJhAAFpeW0AcgByAGMAO4DCAMJAEGRyAADgNdgE3XIAYQB2AGUAO4DAAMBA8CFoYZFj4SFjcgBhZAAAoFMqAAFncIsAjgBvAG4ABGFmAADgNdg43fAlbHlGdW5jdGlvbgCgYSBpAG4AZwA7gMUAxUAAAWNzpACoAHIAAOA12Jzc6SFnbgCgVCJpAGwAZABlADuAwwDDQG0AbAA7gMQAxEAABGFjZWZvcnN1xQDYANoA7QDxAPYA+QD8AAABY3LJAM8AayNzbGFzaAAAoBYidgHTANUAAKDnKmUAZAAAoAYjeQARZIABY3J0AOAA5QDrAGEidXNlAACgNSLuI291bGxpcwCgLCFhAJJjcgAA4DXYBd1wAGYAAOA12Dnd5SF2ZdhiYwDyAOoAbSJwZXEAAKBOIgAHSE9hY2RlZmhpbG9yc3UXARoBHwE6AVIBVQFiAWQBZgGCAakB6QHtAfIBYwB5ACdkUABZADuAqQCpQIABY3B5ACUBKAE1AfUhdGUGYWmg0iJ0KGFsRGlmZmVyZW50aWFsRAAAoEUhbCJleXMAAKAtIQACYWVpb0EBRAFKAU0B8iFvbgxhZABpAGwAO4DHAMdAcgBjAAhhbiJpbnQAAKAwIm8AdAAKYQABZG5ZAV0BaSJsbGEAuGB0I2VyRG90ALdg8gA5AWkAp2NyImNsZQAAAkRNUFRwAXQBeQF9AW8AdAAAoJkiaSJudXMAAKCWIuwhdXMAoJUiaSJtZXMAAKCXIm8AAAFjc4cBlAFrKndpc2VDb250b3VySW50ZWdyYWwAAKAyImUjQ3VybHkAAAFEUZwBpAFvJXVibGVRdW90ZQAAoB0gdSJvdGUAAKAZIAACbG5wdbABtgHNAdgBbwBuAGWgNyIAoHQqgAFnaXQAvAHBAcUB8iJ1ZW50AKBhIm4AdAAAoC8i7yV1ckludGVncmFsAKAuIgABZnLRAdMBAKACIe8iZHVjdACgECJuLnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbAAAoDMi7yFzcwCgLypjAHIAAOA12J7ccABDoNMiYQBwAACgTSKABURKU1phY2VmaW9zAAsCEgIVAhgCGwIsAjQCOQI9AnMCfwNvoEUh9CJyYWhkAKARKWMAeQACZGMAeQAFZGMAeQAPZIABZ3JzACECJQIoAuchZXIAoCEgcgAAoKEhaAB2AACg5CoAAWF5MAIzAvIhb24OYRRkbAB0oAciYQCUY3IAAOA12AfdAAFhZkECawIAAWNtRQJnAvIjaXRpY2FsAAJBREdUUAJUAl8CYwJjInV0ZQC0YG8AdAFZAloC2WJiJGxlQWN1dGUA3WJyImF2ZQBgYGkibGRlANxi7yFuZACgxCJmJWVyZW50aWFsRAAAoEYhcAR9AgAAAAAAAIECjgIAABoDZgAA4DXYO91EoagAhQKJAm8AdAAAoNwgcSJ1YWwAAKBQIuIhbGUAA0NETFJVVpkCqAK1Au8C/wIRA28AbgB0AG8AdQByAEkAbgB0AGUAZwByAGEA7ADEAW8AdAKvAgAAAACwAqhgbiNBcnJvdwAAoNMhAAFlb7kC0AJmAHQAgAFBUlQAwQLGAs0CciJyb3cAAKDQIekkZ2h0QXJyb3cAoNQhZQDlACsCbgBnAAABTFLWAugC5SFmdAABQVLcAuECciJyb3cAAKD4J+kkZ2h0QXJyb3cAoPon6SRnaHRBcnJvdwCg+SdpImdodAAAAUFU9gL7AnIicm93AACg0iFlAGUAAKCoInAAQQIGAwAAAAALA3Iicm93AACg0SFvJHduQXJyb3cAAKDVIWUlcnRpY2FsQmFyAACgJSJuAAADQUJMUlRhJAM2AzoDWgNxA3oDciJyb3cAAKGTIUJVLAMwA2EAcgAAoBMpcCNBcnJvdwAAoPUhciJldmUAEWPlIWZ00gJDAwAASwMAAFIDaSVnaHRWZWN0b3IAAKBQKWUkZVZlY3RvcgAAoF4p5SJjdG9yQqC9IWEAcgAAoFYpaSJnaHQA1AFiAwAAaQNlJGVWZWN0b3IAAKBfKeUiY3RvckKgwSFhAHIAAKBXKWUAZQBBoKQiciJyb3cAAKCnIXIAcgBvAPcAtAIAAWN0gwOHA3IA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YwAAoN8i4SFycnCgtiEAoD0pgKIqImJjZG9zACsVMBU6FT4VQRVyImNhcAAAoEgqAAFhdTQVNxVwAACgRipwAACgSipvAHQAAKCNInIAAKBFKgDgKiIA/gACYWxydksVURVuFXMVcgByAG2gtyEAoDwpeQCAAWV2dwBYFWUVaRVxAHACXxUAAAAAYxVyAGUA4wAXFXUA4wAZFWUAZQAAoM4iZSJkZ2UAAKDPImUAbgA7gKQApEBlI2Fycm93AAABbHJ7FX8V5SFmdACgtiFpImdodAAAoLchZQDkAG0VAAFjaYsVkRVvAG4AaQBuAPQAkwFuAHQAAKAxImwiY3R5AACgLSOACUFIYWJjZGVmaGlqbG9yc3R1d3oAuBW7Fb8V1RXgFegV+RUKFhUWHxZUFlcWZRbFFtsW7xb7FgUXChdyAPIAtAJhAHIAAKBlKQACZ2xyc8YVyhXOFdAV5yFlcgCgICDlIXRoAKA4IfIA9QxoAHagECAAoKMiawHZFd4VYSJyb3cAAKAPKWEA4wBfAgABYXnkFecV8iFvbg9hNGQAoUYhYW/tFfQVAAFnciEC8RVyAACgyiF0InNlcQAAoHcqgAFnbG0A/xUCFgUWO4CwALBAdABhALRjcCJ0eXYAAKCxKQABaXIOFhIW8yFodACgfykA4DXYId1hAHIAAAFschsWHRYAoMMhAKDCIYACYWVnc3YAKBauAjYWOhY+Fm0AAKHEIm9zLhY0Fm4AZABzoMQi9SFpdACgZiZhIm1tYQDdY2kAbgAAoPIiAKH3AGlvQxZRFmQAZQAAgfcAO29KFksW90BuI3RpbWVzAACgxyJuAPgAUBZjAHkAUmRjAG8CXhYAAAAAYhZyAG4AAKAeI28AcAAAoA0jgAJscHR1dwBuFnEWdRaSFp4W7CFhciRgZgAA4DXYVd0AotkCZW1wc30WhBaJFo0WcQBkoFAibwB0AACgUSJpIm51cwAAoDgi7CF1cwCgFCLxInVhcmUAoKEiYgBsAGUAYgBhAHIAdwBlAGQAZwDlANcAbgCAAWFkaAClFqoWtBZyAHIAbwD3APUMbwB3AG4AYQByAHIAbwB3APMA8xVhI3Jwb29uAAABbHK8FsAWZQBmAPQAHBZpAGcAaAD0AB4WYgHJFs8WawBhAHIAbwD3AJILbwLUFgAAAADYFnIAbgAAoB8jbwBwAACgDCOAAWNvdADhFukW7BYAAXJ55RboFgDgNdi53FVkbAAAoPYp8iFvaxFhAAFkcvMW9xZvAHQAAKDxImkA5qC/JVsSAAFhaP8WAhdyAPIANQNhAPIA1wvhIm5nbGUAoKYpAAFjaQ4XEBd5AF9k5yJyYXJyAKD/JwAJRGFjZGVmZ2xtbm9wcXJzdHV4MRc4F0YXWxcyBF4XaRd5F40XrBe0F78X2RcVGCEYLRg1GEAYAAFEbzUXgRZvAPQA+BUAAWNzPBdCF3UAdABlADuA6QDpQPQhZXIAoG4qAAJhaW95TRdQF1YXWhfyIW9uG2FyAGOgViI7gOoA6kDsIW9uAKBVIk1kbwB0ABdhAAFEcmIXZhdvAHQAAKBSIgDgNdgi3XKhmipuF3QXYQB2AGUAO4DoAOhAZKCWKm8AdAAAoJgqgKGZKmlscwCAF4UXhxfuInRlcnMAoOcjAKATIWSglSpvAHQAAKCXKoABYXBzAJMXlheiF2MAcgATYXQAeQBzogUinxcAAAAAoRdlAHQAAKAFInAAMaADIDMBqRerFwCgBCAAoAUgAAFnc7AXsRdLYXAAAKACIAABZ3C4F7sXbwBuABlhZgAA4DXYVt2AAWFscwDFF8sXzxdyAHOg1SJsAACg4yl1AHMAAKBxKmkAAKG1A2x21RfYF28AbgC1Y/VjAAJjc3V24BfoF/0XEBgAAWlv5BdWF3IAYwAAoFYiaQLuFwAAAADwF+0ADQThIW50AAFnbPUX+Rd0AHIAAKCWKuUhc3MAoJUqgAFhZWkAAxgGGAoYbABzAD1gcwB0AACgXyJ2AESgYSJEAACgeCrwImFyc2wAoOUpAAFEYRkYHRhvAHQAAKBTInIAcgAAoHEpgAFjZGkAJxgqGO0XcgAAoC8hbwD0AIwCAAFhaDEYMhi3YzuA8ADwQAABbXI5GD0YbAA7gOsA60BvAACgrCCAAWNpcABGGEgYSxhsACFgcwD0ACwEAAFlb08YVxhjAHQAYQB0AGkAbwDuABoEbgBlAG4AdABpAGEAbADlADME4Ql1GAAAgRgAAIMYiBgAAAAAoRilGAAAqhgAALsYvhjRGAAA1xgnGWwAbABpAG4AZwBkAG8AdABzAGUA8QBlF3kARGRtImFsZQAAoEAmgAFpbHIAjRiRGJ0Y7CFpZwCgA/tpApcYAAAAAJoYZwAAoAD7aQBnAACgBPsA4DXYI93sIWlnAKAB++whaWcA4GYAagCAAWFsdACvGLIYthh0AACgbSZpAGcAAKAC+24AcwAAoLElbwBmAJJh8AHCGAAAxhhmAADgNdhX3QABYWvJGMwYbADsAGsEdqDUIgCg2SphI3J0aW50AACgDSoAAWFv2hgiGQABY3PeGB8ZsQPnGP0YBRkSGRUZAAAdGbID7xjyGPQY9xj5GAAA+xg7gL0AvUAAoFMhO4C8ALxAAKBVIQCgWSEAoFshswEBGQAAAxkAoFQhAKBWIbQCCxkOGQAAAAAQGTuAvgC+QACgVyEAoFwhNQAAoFghtgEZGQAAGxkAoFohAKBdITgAAKBeIWwAAKBEIHcAbgAAoCIjYwByAADgNdi73IAIRWFiY2RlZmdpamxub3JzdHYARhlKGVoZXhlmGWkZkhmWGZkZnRmgGa0ZxhnLGc8Z4BkjGmygZyIAoIwqgAFjbXAAUBlTGVgZ9SF0ZfVhbQBhAOSgswM6FgCghipyImV2ZQAfYQABaXliGWUZcgBjAB1hM2RvAHQAIWGAoWUibHFzAMYEcBl6GfGhZSLOBAAAdhlsAGEAbgD0AN8EgKF+KmNkbACBGYQZjBljAACgqSpvAHQAb6CAKmyggioAoIQqZeDbIgD+cwAAoJQqcgAA4DXYJN3noGsirATtIWVsAKA3IWMAeQBTZIChdyJFYWoApxmpGasZAKCSKgCgpSoAoKQqAAJFYWVztBm2Gb0ZwhkAoGkicABwoIoq8iFveACgiipxoIgq8aCIKrUZaQBtAACg5yJwAGYAAOA12FjdYQB2AOUAYwIAAWNp0xnWGXIAAKAKIW0AAKFzImVs3BneGQCgjioAoJAqAIM+ADtjZGxxco0E6xn0GfgZ/BkBGgABY2nvGfEZAKCnKnIAAKB6Km8AdAAAoNci0CFhcgCglSl1ImVzdAAAoHwqgAJhZGVscwAKGvQZFhrVBCAa8AEPGgAAFBpwAHIAbwD4AFkZcgAAoHgpcQAAAWxxxAQbGmwAZQBzAPMASRlpAO0A5AQAAWVuJxouGnIjdG5lcXEAAOBpIgD+xQAsGgAFQWFiY2Vma29zeUAaQxpmGmoabRqDGocalhrCGtMacgDyAMwCAAJpbG1yShpOGlAaVBpyAHMA8ABxD2YAvWBpAGwA9AASBQABZHJYGlsaYwB5AEpkAKGUIWN3YBpkGmkAcgAAoEgpAKCtIWEAcgAAoA8h6SFyYyVhgAFhbHIAcxp7Gn8a8iF0c3WgZSZpAHQAAKBlJuwhaXAAoCYg4yFvbgCguSJyAADgNdgl3XMAAAFld4wakRphInJvdwAAoCUpYSJyb3cAAKAmKYACYW1vcHIAnxqjGqcauhq+GnIAcgAAoP8h9CFodACgOyJrAAABbHKsGrMaZSRmdGFycm93AACgqSHpJGdodGFycm93AKCqIWYAAOA12Fnd4iFhcgCgFSCAAWNsdADIGswa0BpyAADgNdi93GEAcwDoAGka8iFvaydhAAFicNca2xr1IWxsAKBDIOghZW4AoBAg4Qr2GgAA/RoAAAgbExsaGwAAIRs7GwAAAAA+G2IbmRuVG6sbAACyG80b0htjAHUAdABlADuA7QDtQAChYyBpeQEbBhtyAGMAO4DuAO5AOGQAAWN4CxsNG3kANWRjAGwAO4ChAKFAAAFmcssCFhsA4DXYJt1yAGEAdgBlADuA7ADsQIChSCFpbm8AJxsyGzYbAAFpbisbLxtuAHQAAKAMKnQAAKAtIuYhaW4AoNwpdABhAACgKSHsIWlnM2GAAWFvcABDG1sbXhuAAWNndABJG0sbWRtyACthgAFlbHAAcQVRG1UbaQBuAOUAyAVhAHIA9AByBWgAMWFmAACgtyJlAGQAtWEAoggiY2ZvdGkbbRt1G3kb4SFyZQCgBSFpAG4AdKAeImkAZQAAoN0pZABvAPQAWxsAoisiY2VscIEbhRuPG5QbYQBsAACguiIAAWdyiRuNG2UAcgDzACMQ4wCCG2EicmhrAACgFyryIW9kAKA8KgACY2dwdJ8boRukG6gbeQBRZG8AbgAvYWYAAOA12FrdYQC5Y3UAZQBzAHQAO4C/AL9AAAFjabUbuRtyAADgNdi+3G4AAKIIIkVkc3bCG8QbyBvQAwCg+SJvAHQAAKD1Inag9CIAoPMiaaBiIOwhZGUpYesB1hsAANkbYwB5AFZkbAA7gO8A70AAA2NmbW9zdeYb7hvyG/Ub+hsFHAABaXnqG+0bcgBjADVhOWRyAADgNdgn3eEhdGg3YnAAZgAA4DXYW93jAf8bAAADHHIAAOA12L/c8iFjeVhk6yFjeVRkAARhY2ZnaGpvcxUcGhwiHCYcKhwtHDAcNRzwIXBhdqC6A/BjAAFleR4cIRzkIWls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ZmdobG1vcHJzdHV3CiwNLBEsHSwnLDEsQCxLLFIsYix6LIQsjyzLLOgs7Sz/LAotcgDyAAkDYQByAACgYykAAWNyFSwbLHUAdABlADuA+gD6QPIACQ1yAOMBIywAACUseQBeZHYAZQBtYQABaXkrLDAscgBjADuA+wD7QENkgAFhYmgANyw6LD0scgDyANEO7CFhY3FhYQDyAOAOAAFpckQsSCzzIWh0AKB+KQDgNdgy3XIAYQB2AGUAO4D5APlAYQFWLF8scgAAAWxyWixcLACgvyEAoL4hbABrAACggCUAAWN0Zix2LG8CbCwAAAAAcyxyAG4AZaAcI3IAAKAcI28AcAAAoA8jcgBpAACg+CUAAWFsfiyBLGMAcgBrYTuAqACoQAABZ3CILIssbwBuAHNhZgAA4DXYZt0AA2FkaGxzdZksniynLLgsuyzFLHIAcgBvAPcACQ1vAHcAbgBhAHIAcgBvAPcA2A5hI3Jwb29uAAABbHKvLLMsZQBmAPQAWyxpAGcAaAD0AF0sdQDzAKYOaQAAocUDaGzBLMIs0mNvAG4AxWPwI2Fycm93cwCgyCGAAWNpdADRLOEs5CxvAtcsAAAAAN4scgBuAGWgHSNyAACgHSNvAHAAAKAOI24AZwBvYXIAaQAAoPklYwByAADgNdjK3IABZGlyAPMs9yz6LG8AdAAAoPAi7CFkZWlhaQBmoLUlAKC0JQABYW0DLQYtcgDyAMosbAA7gPwA/EDhIm5nbGUAoKcpgAdBQkRhY2RlZmxub3Byc3oAJy0qLTAtNC2bLZ0toS2/LcMtxy3TLdgt3C3gLfwtcgDyABADYQByAHag6CoAoOkqYQBzAOgA/gIAAW5yOC08LechcnQAoJwpgANla25wcnN0AJkpSC1NLVQtXi1iLYItYQBwAHAA4QAaHG8AdABoAGkAbgDnAKEXgAFoaXIAoSmzJFotbwBwAPQAdCVooJUh7wD4JgABaXVmLWotZwBtAOEAuygAAWJwbi14LXMjZXRuZXEAceCKIgD+AODLKgD+cyNldG5lcQBx4IsiAP4A4MwqAP4AAWhyhi2KLWUAdADhABIraSNhbmdsZQAAAWxyki2WLeUhZnQAoLIiaSJnaHQAAKCzInkAMmThIXNoAKCiIoABZWxyAKcttC24LWKiKCKuLQAAAACyLWEAcgAAoLsicQAAoFoi7CFpcACg7iIAAWJ0vC1eD2EA8gBfD3IAAOA12DPddAByAOkAlS1zAHUAAAFicM0t0C0A4IIi0iAA4IMi0iBwAGYAAOA12GfdcgBvAPAAWQt0AHIA6QCaLQABY3XkLegtcgAA4DXYy9wAAWJw7C30LW4AAAFFZXUt8S0A4IoiAP5uAAABRWV/LfktAOCLIgD+6SJnemFnAKCaKYADY2Vmb3BycwANLhAuJS4pLiMuLi40LukhcmN1YQABZGkULiEuAAFiZxguHC5hAHIAAKBfKmUAcaAnIgCgWSLlIXJwAKAYIXIAAOA12DTdcABmAADgNdho3WWgQCJhAHQA6ABqD2MAcgAA4DXYzNzjCuQRUC4AAFQuAABYLmIuAAAAAGMubS5wLnQuAAAAAIguki4AAJouJxIqEnQAcgDpAB0ScgAA4DXYNd0AAUFhWy5eLnIA8gDnAnIA8gCTB75jAAFBYWYuaS5yAPIA4AJyAPIAjAdhAPAAeh5pAHMAAKD7IoABZHB0APgReS6DLgABZmx9LoAuAOA12GnddQDzAP8RaQBtAOUABBIAAUFhiy6OLnIA8gDuAnIA8gCaBwABY3GVLgoScgAA4DXYzdwAAXB0nS6hLmwAdQDzACUScgDpACASAARhY2VmaW9zdbEuvC7ELsguzC7PLtQu2S5jAAABdXm2LrsudABlADuA/QD9QE9kAAFpecAuwy5yAGMAd2FLZG4AO4ClAKVAcgAA4DXYNt1jAHkAV2RwAGYAAOA12GrdYwByAADgNdjO3AABY23dLt8ueQBOZGwAO4D/AP9AAAVhY2RlZmhpb3N38y73Lv8uAi8MLxAvEy8YLx0vIi9jInV0ZQB6YQABYXn7Lv4u8iFvbn5hN2RvAHQAfGEAAWV0Bi8KL3QAcgDmAB8QYQC2Y3IAAOA12DfdYwB5ADZk5yJyYXJyAKDdIXAAZgAA4DXYa91jAHIAAOA12M/cAAFqbiYvKC8AoA0gagAAoAwg\");\n//#endregion\n//#region node_modules/entities/dist/internal/bin-trie-flags.js\n/**\n* Bit flags & masks for the binary trie encoding used for entity decoding.\n*\n* Bit layout (16 bits total):\n* 15..14 VALUE_LENGTH (+1 encoding; 0 => no value)\n* 13 FLAG13. If valueLength>0: semicolon required flag (implicit ';').\n* If valueLength==0: compact run flag.\n* 12..7 BRANCH_LENGTH Branch length (0 => single branch in 6..0 if jumpOffset==char) OR run length (when compact run)\n* 6..0 JUMP_TABLE Jump offset (jump table) OR single-branch char code OR first run char\n*/\nvar BinTrieFlags;\n(function(BinTrieFlags) {\n\tBinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n\tBinTrieFlags[BinTrieFlags[\"FLAG13\"] = 8192] = \"FLAG13\";\n\tBinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 8064] = \"BRANCH_LENGTH\";\n\tBinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\n//#endregion\n//#region node_modules/entities/dist/decode.js\nvar CharCodes;\n(function(CharCodes) {\n\tCharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n\tCharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n\tCharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n\tCharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n\tCharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n\tCharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n\tCharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n\tCharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n\tCharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n\tCharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n\tCharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n\tCharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 32;\nfunction isNumber(code) {\n\treturn code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n\treturn code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;\n}\nfunction isAsciiAlphaNumeric(code) {\n\treturn code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);\n}\n/**\n* Checks if the given character is a valid end character for an entity in an attribute.\n*\n* Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n* See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n* @param code Code point to decode.\n*/\nfunction isEntityInAttributeInvalidEnd(code) {\n\treturn code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function(EntityDecoderState) {\n\tEntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n\tEntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n\tEntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n\tEntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n\tEntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\n/**\n* Decoding mode for named entities.\n*/\nvar DecodingMode;\n(function(DecodingMode) {\n\t/** Entities in text nodes that can end with any character. */\n\tDecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n\t/** Only allow entities terminated with a semicolon. */\n\tDecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n\t/** Entities in attributes have limitations on ending characters. */\n\tDecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n* Token decoder with support of writing partial entities.\n*/\nvar EntityDecoder = class {\n\tconstructor(decodeTree, emitCodePoint, errors) {\n\t\tthis.state = EntityDecoderState.EntityStart;\n\t\tthis.consumed = 1;\n\t\tthis.result = 0;\n\t\tthis.treeIndex = 0;\n\t\tthis.excess = 1;\n\t\tthis.decodeMode = DecodingMode.Strict;\n\t\tthis.runConsumed = 0;\n\t\tthis.decodeTree = decodeTree;\n\t\tthis.emitCodePoint = emitCodePoint;\n\t\tthis.errors = errors;\n\t}\n\t/**\n\t* Resets the instance to make it reusable.\n\t* @param decodeMode Entity decoding mode to use.\n\t*/\n\tstartEntity(decodeMode) {\n\t\tthis.decodeMode = decodeMode;\n\t\tthis.state = EntityDecoderState.EntityStart;\n\t\tthis.result = 0;\n\t\tthis.treeIndex = 0;\n\t\tthis.excess = 1;\n\t\tthis.consumed = 1;\n\t\tthis.runConsumed = 0;\n\t}\n\t/**\n\t* Write an entity to the decoder. This can be called multiple times with partial entities.\n\t* If the entity is incomplete, the decoder will return -1.\n\t*\n\t* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n\t* entity is incomplete, and resume when the next string is written.\n\t* @param input The string containing the entity (or a continuation of the entity).\n\t* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n\t* @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n\t*/\n\twrite(input, offset) {\n\t\tswitch (this.state) {\n\t\t\tcase EntityDecoderState.EntityStart:\n\t\t\t\tif (input.charCodeAt(offset) === CharCodes.NUM) {\n\t\t\t\t\tthis.state = EntityDecoderState.NumericStart;\n\t\t\t\t\tthis.consumed += 1;\n\t\t\t\t\treturn this.stateNumericStart(input, offset + 1);\n\t\t\t\t}\n\t\t\t\tthis.state = EntityDecoderState.NamedEntity;\n\t\t\t\treturn this.stateNamedEntity(input, offset);\n\t\t\tcase EntityDecoderState.NumericStart: return this.stateNumericStart(input, offset);\n\t\t\tcase EntityDecoderState.NumericDecimal: return this.stateNumericDecimal(input, offset);\n\t\t\tcase EntityDecoderState.NumericHex: return this.stateNumericHex(input, offset);\n\t\t\tcase EntityDecoderState.NamedEntity: return this.stateNamedEntity(input, offset);\n\t\t}\n\t}\n\t/**\n\t* Switches between the numeric decimal and hexadecimal states.\n\t*\n\t* Equivalent to the `Numeric character reference state` in the HTML spec.\n\t* @param input The string containing the entity (or a continuation of the entity).\n\t* @param offset The current offset.\n\t* @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n\t*/\n\tstateNumericStart(input, offset) {\n\t\tif (offset >= input.length) return -1;\n\t\tif ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n\t\t\tthis.state = EntityDecoderState.NumericHex;\n\t\t\tthis.consumed += 1;\n\t\t\treturn this.stateNumericHex(input, offset + 1);\n\t\t}\n\t\tthis.state = EntityDecoderState.NumericDecimal;\n\t\treturn this.stateNumericDecimal(input, offset);\n\t}\n\t/**\n\t* Parses a hexadecimal numeric entity.\n\t*\n\t* Equivalent to the `Hexademical character reference state` in the HTML spec.\n\t* @param input The string containing the entity (or a continuation of the entity).\n\t* @param offset The current offset.\n\t* @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n\t*/\n\tstateNumericHex(input, offset) {\n\t\twhile (offset < input.length) {\n\t\t\tconst char = input.charCodeAt(offset);\n\t\t\tif (isNumber(char) || isHexadecimalCharacter(char)) {\n\t\t\t\tconst digit = char <= CharCodes.NINE ? char - CharCodes.ZERO : (char | TO_LOWER_BIT) - CharCodes.LOWER_A + 10;\n\t\t\t\tthis.result = this.result * 16 + digit;\n\t\t\t\tthis.consumed++;\n\t\t\t\toffset++;\n\t\t\t} else return this.emitNumericEntity(char, 3);\n\t\t}\n\t\treturn -1;\n\t}\n\t/**\n\t* Parses a decimal numeric entity.\n\t*\n\t* Equivalent to the `Decimal character reference state` in the HTML spec.\n\t* @param input The string containing the entity (or a continuation of the entity).\n\t* @param offset The current offset.\n\t* @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n\t*/\n\tstateNumericDecimal(input, offset) {\n\t\twhile (offset < input.length) {\n\t\t\tconst char = input.charCodeAt(offset);\n\t\t\tif (isNumber(char)) {\n\t\t\t\tthis.result = this.result * 10 + (char - CharCodes.ZERO);\n\t\t\t\tthis.consumed++;\n\t\t\t\toffset++;\n\t\t\t} else return this.emitNumericEntity(char, 2);\n\t\t}\n\t\treturn -1;\n\t}\n\t/**\n\t* Validate and emit a numeric entity.\n\t*\n\t* Implements the logic from the `Hexademical character reference start\n\t* state` and `Numeric character reference end state` in the HTML spec.\n\t* @param lastCp The last code point of the entity. Used to see if the\n\t* entity was terminated with a semicolon.\n\t* @param expectedLength The minimum number of characters that should be\n\t* consumed. Used to validate that at least one digit\n\t* was consumed.\n\t* @returns The number of characters that were consumed.\n\t*/\n\temitNumericEntity(lastCp, expectedLength) {\n\t\tif (this.consumed <= expectedLength) {\n\t\t\tvar _this$errors;\n\t\t\t(_this$errors = this.errors) === null || _this$errors === void 0 || _this$errors.absenceOfDigitsInNumericCharacterReference(this.consumed);\n\t\t\treturn 0;\n\t\t}\n\t\tif (lastCp === CharCodes.SEMI) this.consumed += 1;\n\t\telse if (this.decodeMode === DecodingMode.Strict) return 0;\n\t\tthis.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n\t\tif (this.errors) {\n\t\t\tif (lastCp !== CharCodes.SEMI) this.errors.missingSemicolonAfterCharacterReference();\n\t\t\tthis.errors.validateNumericCharacterReference(this.result);\n\t\t}\n\t\treturn this.consumed;\n\t}\n\t/**\n\t* Parses a named entity.\n\t*\n\t* Equivalent to the `Named character reference state` in the HTML spec.\n\t* @param input The string containing the entity (or a continuation of the entity).\n\t* @param offset The current offset.\n\t* @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n\t*/\n\tstateNamedEntity(input, offset) {\n\t\tconst { decodeTree } = this;\n\t\tlet current = decodeTree[this.treeIndex];\n\t\tlet valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\t\twhile (offset < input.length) {\n\t\t\tif (valueLength === 0 && (current & BinTrieFlags.FLAG13) !== 0) {\n\t\t\t\tconst runLength = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n\t\t\t\tif (this.runConsumed === 0) {\n\t\t\t\t\tconst firstChar = current & BinTrieFlags.JUMP_TABLE;\n\t\t\t\t\tif (input.charCodeAt(offset) !== firstChar) return this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();\n\t\t\t\t\toffset++;\n\t\t\t\t\tthis.excess++;\n\t\t\t\t\tthis.runConsumed++;\n\t\t\t\t}\n\t\t\t\twhile (this.runConsumed < runLength) {\n\t\t\t\t\tif (offset >= input.length) return -1;\n\t\t\t\t\tconst charIndexInPacked = this.runConsumed - 1;\n\t\t\t\t\tconst packedWord = decodeTree[this.treeIndex + 1 + (charIndexInPacked >> 1)];\n\t\t\t\t\tconst expectedChar = charIndexInPacked % 2 === 0 ? packedWord & 255 : packedWord >> 8 & 255;\n\t\t\t\t\tif (input.charCodeAt(offset) !== expectedChar) {\n\t\t\t\t\t\tthis.runConsumed = 0;\n\t\t\t\t\t\treturn this.result === 0 ? 0 : this.emitNotTerminatedNamedEntity();\n\t\t\t\t\t}\n\t\t\t\t\toffset++;\n\t\t\t\t\tthis.excess++;\n\t\t\t\t\tthis.runConsumed++;\n\t\t\t\t}\n\t\t\t\tthis.runConsumed = 0;\n\t\t\t\tthis.treeIndex += 1 + (runLength >> 1);\n\t\t\t\tcurrent = decodeTree[this.treeIndex];\n\t\t\t\tvalueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\t\t\t}\n\t\t\tif (offset >= input.length) break;\n\t\t\tconst char = input.charCodeAt(offset);\n\t\t\tif (char === CharCodes.SEMI && valueLength !== 0 && (current & BinTrieFlags.FLAG13) !== 0) return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n\t\t\tthis.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n\t\t\tif (this.treeIndex < 0) return this.result === 0 || this.decodeMode === DecodingMode.Attribute && (valueLength === 0 || isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();\n\t\t\tcurrent = decodeTree[this.treeIndex];\n\t\t\tvalueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n\t\t\tif (valueLength !== 0) {\n\t\t\t\tif (char === CharCodes.SEMI) return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n\t\t\t\tif (this.decodeMode !== DecodingMode.Strict && (current & BinTrieFlags.FLAG13) === 0) {\n\t\t\t\t\tthis.result = this.treeIndex;\n\t\t\t\t\tthis.consumed += this.excess;\n\t\t\t\t\tthis.excess = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\toffset++;\n\t\t\tthis.excess++;\n\t\t}\n\t\treturn -1;\n\t}\n\t/**\n\t* Emit a named entity that was not terminated with a semicolon.\n\t* @returns The number of characters consumed.\n\t*/\n\temitNotTerminatedNamedEntity() {\n\t\tvar _this$errors2;\n\t\tconst { result, decodeTree } = this;\n\t\tconst valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n\t\tthis.emitNamedEntityData(result, valueLength, this.consumed);\n\t\t(_this$errors2 = this.errors) === null || _this$errors2 === void 0 || _this$errors2.missingSemicolonAfterCharacterReference();\n\t\treturn this.consumed;\n\t}\n\t/**\n\t* Emit a named entity.\n\t* @param result The index of the entity in the decode tree.\n\t* @param valueLength The number of bytes in the entity.\n\t* @param consumed The number of characters consumed.\n\t* @returns The number of characters consumed.\n\t*/\n\temitNamedEntityData(result, valueLength, consumed) {\n\t\tconst { decodeTree } = this;\n\t\tthis.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~(BinTrieFlags.VALUE_LENGTH | BinTrieFlags.FLAG13) : decodeTree[result + 1], consumed);\n\t\tif (valueLength === 3) this.emitCodePoint(decodeTree[result + 2], consumed);\n\t\treturn consumed;\n\t}\n\t/**\n\t* Signal to the parser that the end of the input was reached.\n\t*\n\t* Remaining data will be emitted and relevant errors will be produced.\n\t* @returns The number of characters consumed.\n\t*/\n\tend() {\n\t\tswitch (this.state) {\n\t\t\tcase EntityDecoderState.NamedEntity: return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;\n\t\t\tcase EntityDecoderState.NumericDecimal: return this.emitNumericEntity(0, 2);\n\t\t\tcase EntityDecoderState.NumericHex: return this.emitNumericEntity(0, 3);\n\t\t\tcase EntityDecoderState.NumericStart:\n\t\t\t\tvar _this$errors3;\n\t\t\t\t(_this$errors3 = this.errors) === null || _this$errors3 === void 0 || _this$errors3.absenceOfDigitsInNumericCharacterReference(this.consumed);\n\t\t\t\treturn 0;\n\t\t\tcase EntityDecoderState.EntityStart: return 0;\n\t\t}\n\t}\n};\n/**\n* Creates a function that decodes entities in a string.\n* @param decodeTree The decode tree.\n* @returns A function that decodes entities in a string.\n*/\nfunction getDecoder(decodeTree) {\n\tlet returnValue = \"\";\n\tconst decoder = new EntityDecoder(decodeTree, (data) => returnValue += String.fromCodePoint(data));\n\treturn function decodeWithTrie(input, decodeMode) {\n\t\tlet lastIndex = 0;\n\t\tlet offset = 0;\n\t\twhile ((offset = input.indexOf(\"&\", offset)) >= 0) {\n\t\t\treturnValue += input.slice(lastIndex, offset);\n\t\t\tdecoder.startEntity(decodeMode);\n\t\t\tconst length = decoder.write(input, offset + 1);\n\t\t\tif (length < 0) {\n\t\t\t\tlastIndex = offset + decoder.end();\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tlastIndex = offset + length;\n\t\t\toffset = length === 0 ? lastIndex + 1 : lastIndex;\n\t\t}\n\t\tconst result = returnValue + input.slice(lastIndex);\n\t\treturnValue = \"\";\n\t\treturn result;\n\t};\n}\n/**\n* Determines the branch of the current node that is taken given the current\n* character. This function is used to traverse the trie.\n* @param decodeTree The trie.\n* @param current The current node.\n* @param nodeIndex Index immediately after the current node header.\n* @param char The current character.\n* @returns The index of the next node, or -1 if no branch is taken.\n*/\nfunction determineBranch(decodeTree, current, nodeIndex, char) {\n\tconst branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n\tconst jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n\tif (branchCount === 0) return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n\tif (jumpOffset) {\n\t\tconst value = char - jumpOffset;\n\t\treturn value < 0 || value >= branchCount ? -1 : decodeTree[nodeIndex + value] - 1;\n\t}\n\tconst packedKeySlots = branchCount + 1 >> 1;\n\tlet lo = 0;\n\tlet hi = branchCount - 1;\n\twhile (lo <= hi) {\n\t\tconst mid = lo + hi >>> 1;\n\t\tconst midKey = decodeTree[nodeIndex + (mid >> 1)] >> (mid & 1) * 8 & 255;\n\t\tif (midKey < char) lo = mid + 1;\n\t\telse if (midKey > char) hi = mid - 1;\n\t\telse return decodeTree[nodeIndex + packedKeySlots + mid];\n\t}\n\treturn -1;\n}\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\n/**\n* Decodes an HTML string.\n* @param htmlString The string to decode.\n* @param mode The decoding mode.\n* @returns The decoded string.\n*/\nfunction decodeHTML(htmlString, mode = DecodingMode.Legacy) {\n\treturn htmlDecoder(htmlString, mode);\n}\n//#endregion\n//#region node_modules/entities/dist/escape.js\nconst xmlCodeMap$1 = /* @__PURE__ */ new Map([\n\t[34, \""\"],\n\t[38, \"&\"],\n\t[39, \"'\"],\n\t[60, \"<\"],\n\t[62, \">\"]\n]);\n/**\n* Read a code point at a given index.\n* @param input Input string to encode or decode.\n* @param index Current read position in the input string.\n*/\nconst getCodePoint$1 = typeof String.prototype.codePointAt === \"function\" ? (input, index) => input.codePointAt(index) : (c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index);\n/**\n* Bitset for ASCII characters that need to be escaped in XML.\n*/\nconst XML_BITSET_VALUE = 1342177476;\n/**\n* Encodes all non-ASCII characters, as well as characters not valid in XML\n* documents using XML entities. Uses a fast bitset scan instead of RegExp.\n*\n* If a character has no equivalent entity, a numeric hexadecimal reference\n* (eg. `ü`) will be used.\n* @param input Input string to encode or decode.\n*/\nfunction encodeXML$1(input) {\n\tlet out;\n\tlet last = 0;\n\tconst { length } = input;\n\tfor (let index = 0; index < length; index++) {\n\t\tconst char = input.charCodeAt(index);\n\t\tif (char < 128 && ((1342177476 >>> char & 1) === 0 || char >= 64 || char < 32)) continue;\n\t\tif (out === void 0) out = input.substring(0, index);\n\t\telse if (last !== index) out += input.substring(last, index);\n\t\tif (char < 64) {\n\t\t\tout += xmlCodeMap$1.get(char);\n\t\t\tlast = index + 1;\n\t\t\tcontinue;\n\t\t}\n\t\tconst cp = getCodePoint$1(input, index);\n\t\tout += `&#x${cp.toString(16)};`;\n\t\tif (cp !== char) index++;\n\t\tlast = index + 1;\n\t}\n\tif (out === void 0) return input;\n\tif (last < length) out += input.substr(last);\n\treturn out;\n}\n/**\n* Creates a function that escapes all characters matched by the given regular\n* expression using the given map of characters to escape to their entities.\n* @param regex Regular expression to match characters to escape.\n* @param map Map of characters to escape to their entities.\n* @returns Function that escapes all characters matched by the given regular\n* expression using the given map of characters to escape to their entities.\n*/\nfunction getEscaper$1(regex, map) {\n\treturn function escape(data) {\n\t\tlet match;\n\t\tlet lastIndex = 0;\n\t\tlet result = \"\";\n\t\twhile (match = regex.exec(data)) {\n\t\t\tif (lastIndex !== match.index) result += data.substring(lastIndex, match.index);\n\t\t\tresult += map.get(match[0].charCodeAt(0));\n\t\t\tlastIndex = match.index + 1;\n\t\t}\n\t\treturn result + data.substring(lastIndex);\n\t};\n}\n/**\n* Encodes all characters not valid in XML documents using XML entities.\n*\n* Note that the output will be character-set dependent.\n* @param data String to escape.\n*/\nconst escapeUTF8$1 = /* #__PURE__ */ getEscaper$1(/[\"&'<>]/g, xmlCodeMap$1);\n/**\n* Encodes all characters that have to be escaped in HTML attributes,\n* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n* @param data String to escape.\n*/\nconst escapeAttribute$1 = /* #__PURE__ */ getEscaper$1(/[\"&\\u00A0]/g, /* @__PURE__ */ new Map([\n\t[34, \""\"],\n\t[38, \"&\"],\n\t[160, \" \"]\n]));\n/**\n* Encodes all characters that have to be escaped in HTML text,\n* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n* @param data String to escape.\n*/\nconst escapeText$1 = /* #__PURE__ */ getEscaper$1(/[&<>\\u00A0]/g, /* @__PURE__ */ new Map([\n\t[38, \"&\"],\n\t[60, \"<\"],\n\t[62, \">\"],\n\t[160, \" \"]\n]));\n//#endregion\n//#region node_modules/entities/dist/internal/encode-shared.js\n/**\n* Parse a compact encode trie string into a Map structure used for encoding.\n*\n* Format per entry (ascending code points using delta encoding):\n* <diffBase36>[&name;][{<children>}] -- diff omitted when 0\n* Where diff = currentKey - previousKey - 1 (first entry stores absolute key).\n* `&name;` is the entity value (already wrapped); a following `{` denotes children.\n* @param serialized Serialized text fragment to encode.\n*/\nfunction parseEncodeTrie(serialized) {\n\tconst top = /* @__PURE__ */ new Map();\n\tconst totalLength = serialized.length;\n\tlet cursor = 0;\n\tlet lastTopKey = -1;\n\tfunction readDiff() {\n\t\tconst start = cursor;\n\t\twhile (cursor < totalLength) {\n\t\t\tconst char = serialized.charAt(cursor);\n\t\t\tif ((char < \"0\" || char > \"9\") && (char < \"a\" || char > \"z\")) break;\n\t\t\tcursor++;\n\t\t}\n\t\tif (cursor === start) return 0;\n\t\treturn Number.parseInt(serialized.slice(start, cursor), 36);\n\t}\n\tfunction readEntity() {\n\t\tif (serialized[cursor] !== \"&\") throw new Error(`Child entry missing value near index ${cursor}`);\n\t\tconst start = cursor;\n\t\tconst end = serialized.indexOf(\";\", cursor + 1);\n\t\tif (end === -1) throw new Error(`Unterminated entity starting at index ${start}`);\n\t\tcursor = end + 1;\n\t\treturn serialized.slice(start, cursor);\n\t}\n\twhile (cursor < totalLength) {\n\t\tconst keyDiff = readDiff();\n\t\tconst key = lastTopKey === -1 ? keyDiff : lastTopKey + keyDiff + 1;\n\t\tlet value;\n\t\tif (serialized[cursor] === \"&\") value = readEntity();\n\t\tif (serialized[cursor] === \"{\") {\n\t\t\tcursor++;\n\t\t\tlet diff = readDiff();\n\t\t\tlet childKey = diff;\n\t\t\tconst firstValue = readEntity();\n\t\t\tif (serialized[cursor] === \"{\") throw new Error(\"Unexpected nested '{' beyond depth 2\");\n\t\t\tif (serialized[cursor] === \"}\") {\n\t\t\t\ttop.set(key, {\n\t\t\t\t\tvalue,\n\t\t\t\t\tnext: childKey,\n\t\t\t\t\tnextValue: firstValue\n\t\t\t\t});\n\t\t\t\tcursor++;\n\t\t\t} else {\n\t\t\t\tconst childMap = /* @__PURE__ */ new Map([[childKey, firstValue]]);\n\t\t\t\tlet lastChildKey = childKey;\n\t\t\t\twhile (cursor < totalLength && serialized[cursor] !== \"}\") {\n\t\t\t\t\tdiff = readDiff();\n\t\t\t\t\tchildKey = lastChildKey + diff + 1;\n\t\t\t\t\tconst childValue = readEntity();\n\t\t\t\t\tif (serialized[cursor] === \"{\") throw new Error(\"Unexpected nested '{' beyond depth 2\");\n\t\t\t\t\tchildMap.set(childKey, childValue);\n\t\t\t\t\tlastChildKey = childKey;\n\t\t\t\t}\n\t\t\t\tif (serialized[cursor] !== \"}\") throw new Error(\"Unterminated child block\");\n\t\t\t\tcursor++;\n\t\t\t\ttop.set(key, {\n\t\t\t\t\tvalue,\n\t\t\t\t\tnext: childMap\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (value === void 0) throw new Error(`Malformed encode trie: missing value at index ${cursor}`);\n\t\telse top.set(key, value);\n\t\tlastTopKey = key;\n\t}\n\treturn top;\n}\n//#endregion\n//#region node_modules/entities/dist/generated/encode-html.js\n/** Compact serialized HTML encode trie (intended to stay small & JS engine friendly) */\n/** HTML entity encode trie. */\nconst htmlTrie = /* #__PURE__ */ parseEncodeTrie(\"9	
m!"#$%&'()*+,1./a:;<{6he<⃒}={6hx=⃥}>{6he>⃒}?@q[\]^_`5{2yfj}k{|}y ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒē2ĖėĘęĚěĜĝĞğĠġĢ1ĤĥĦħĨĩĪī2ĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌō2ŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžjƒyƵ1rǵ1tȷ3yˆˇg˘˙˚˛˜˝1f̑3jΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ1ΣΤΥΦΧΨΩ7αβγδεζηθικλμνξοπρςστυφχψω7ϑϒ2ϕϖ5Ϝϝiϰϱ3ϵ϶aЁЂЃЄЅІЇЈЉЊЋЌ1ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя1ёђѓєѕіїјљњћќ1ўџ5gi    1    ​‌‍‎‏‐2–—―‖1‘’‚1“”„1†‡•2‥…9‰‱′″‴‵3‹›3‾2⁁1⁃⁄a⁏7⁗7 {6bu  }⁠⁡⁢⁣20€1a⃛⃜11ℂ2℅4ℊℋℌℍℎℏℐℑℒℓ1ℕ№℗℘ℙℚℛℜℝ℞3™1ℤ2℧ℨ℩2ℬℭ1ℯℰℱ1ℳℴℵℶℷℸcⅅⅆⅇⅈa⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜⅝⅞1d←↑→↓↔↕↖↗↘↙↚↛1↝{mw↝̸}↞↟↠↡↢↣↤↥↦↧1↩↪↫↬↭↮1↰↱↲↳1↵↶↷2↺↻↼↽↾↿⇀⇁⇂⇃⇄⇅⇆⇇⇈⇉⇊⇋⇌⇍⇎⇏⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙⇚⇛1⇝6⇤⇥f⇵7⇽⇾⇿∀∁∂{mw∂̸}∃∄∅1∇∈∉1∋∌2∏∐∑−∓∔1∖∗∘1√2∝∞∟∠{6he∠⃒}∡∢∣∤∥∦∧∨∩{1e68∩︀}∪{1e68∪︀}∫∬∭∮∯∰∱∲∳∴∵∶∷∸1∺∻∼{6he∼⃒}∽{mp∽̱}∾{mr∾̳}∿≀≁≂{mw≂̸}≃≄≅≆≇≈≉≊≋{mw≋̸}≌≍{6he≍⃒}≎{mw≎̸}≏{mw≏̸}≐{mw≐̸}≑≒≓≔≕≖≗1≙≚1≜2≟≠≡{6hx≡⃥}≢1≤{6he≤⃒}≥{6he≥⃒}≦{mw≦̸}≧{mw≧̸}≨{1e68≨︀}≩{1e68≩︀}≪{mw≪̸5uh≪⃒}≫{mw≫̸5uh≫⃒}≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿{mw≿̸}⊀⊁⊂{6he⊂⃒}⊃{6he⊃⃒}⊄⊅⊆⊇⊈⊉⊊{1e68⊊︀}⊋{1e68⊋︀}1⊍⊎⊏{mw⊏̸}⊐{mw⊐̸}⊑⊒⊓{1e68⊓︀}⊔{1e68⊔︀}⊕⊖⊗⊘⊙⊚⊛1⊝⊞⊟⊠⊡⊢⊣⊤⊥1⊧⊨⊩⊪⊫⊬⊭⊮⊯⊰1⊲⊳⊴{6he⊴⃒}⊵{6he⊵⃒}⊶⊷⊸⊹⊺⊻1⊽⊾⊿⋀⋁⋂⋃⋄⋅⋆⋇⋈⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋔⋕⋖⋗⋘{mw⋘̸}⋙{mw⋙̸}⋚{1e68⋚︀}⋛{1e68⋛︀}2⋞⋟⋠⋡⋢⋣2⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵{mw⋵̸}⋶⋷1⋹{mw⋹̸}⋺⋻⋼⋽⋾6⌅⌆1⌈⌉⌊⌋⌌⌍⌎⌏⌐1⌒⌓1⌕⌖5⌜⌝⌞⌟2⌢⌣9⌭⌮7⌶6⌽1⌿1o⍼1f⎰⎱2⎴⎵⎶11⏜⏝⏞⏟2⏢4⏧1n␣4kⓈ1j─1│9┌3┐3└3┘3├7┤7┬7┴7┼j═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬j▀3▄3█8░▒▓d□8▪▫1▭▮2▱1△▴▵2▸▹3▽▾▿2◂◃6◊○w◬2◯8◸◹◺◻◼8★☆7☎1d♀1♂t♠2♣1♥♦3♪2♭♮♯4j✓3✗8✠l✶x❘p❲❳2c⟈⟉s⟦⟧⟨⟩⟪⟫⟬⟭7⟵⟶⟷⟸⟹⟺1⟼2⟿76⤂⤃⤄⤅6⤌⤍⤎⤏⤐⤑⤒⤓2⤖2⤙⤚⤛⤜⤝⤞⤟⤠2⤣⤤⤥⤦⤧⤨⤩⤪8⤳{mw⤳̸}1⤵⤶⤷⤸⤹2⤼⤽7⥅2⥈⥉⥊⥋2⥎⥏⥐⥑⥒⥓⥔⥕⥖⥗⥘⥙⥚⥛⥜⥝⥞⥟⥠⥡⥢⥣⥤⥥⥦⥧⥨⥩⥪⥫⥬⥭⥮⥯⥰⥱⥲⥳⥴⥵⥶1⥸⥹1⥻⥼⥽⥾⥿5⦅⦆4⦋⦌⦍⦎⦏⦐⦑⦒⦓⦔⦕⦖3⦚1⦜⦝6⦤⦥⦦⦧⦨⦩⦪⦫⦬⦭⦮⦯⦰⦱⦲⦳⦴⦵⦶⦷1⦹1⦻⦼1⦾⦿⧀⧁⧂⧃⧄⧅3⧉3⧍⧎⧏{mw⧏̸}⧐{mw⧐̸}b⧜⧝⧞4⧣⧤⧥5⧫8⧴1⧶9⨀⨁⨂1⨄1⨆5⨌⨍2⨐⨑⨒⨓⨔⨕⨖⨗a⨢⨣⨤⨥⨦⨧1⨩⨪2⨭⨮⨯⨰⨱1⨳⨴⨵⨶⨷⨸⨹⨺⨻⨼2⨿⩀1⩂⩃⩄⩅⩆⩇⩈⩉⩊⩋⩌⩍2⩐2⩓⩔⩕⩖⩗⩘1⩚⩛⩜⩝1⩟6⩦3⩪2⩭{mw⩭̸}⩮⩯⩰{mw⩰̸}⩱⩲⩳⩴⩵1⩷⩸⩹⩺⩻⩼⩽{mw⩽̸}⩾{mw⩾̸}⩿⪀⪁⪂⪃⪄⪅⪆⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒⪓⪔⪕⪖⪗⪘⪙⪚2⪝⪞⪟⪠⪡{mw⪡̸}⪢{mw⪢̸}1⪤⪥⪦⪧⪨⪩⪪⪫⪬{1e68⪬︀}⪭{1e68⪭︀}⪮⪯{mw⪯̸}⪰{mw⪰̸}2⪳⪴⪵⪶⪷⪸⪹⪺⪻⪼⪽⪾⪿⫀⫁⫂⫃⫄⫅{mw⫅̸}⫆{mw⫆̸}⫇⫈2⫋{1e68⫋︀}⫌{1e68⫌︀}2⫏⫐⫑⫒⫓⫔⫕⫖⫗⫘⫙⫚⫛8⫤1⫦⫧⫨⫩1⫫⫬⫭⫮⫯⫰⫱⫲⫳9⫽{6hx⫽⃥}y7r{17ks𝒜1𝒞𝒟2𝒢2𝒥𝒦2𝒩𝒪𝒫𝒬1𝒮𝒯𝒰𝒱𝒲𝒳𝒴𝒵𝒶𝒷𝒸𝒹1𝒻1𝒽𝒾𝒿𝓀𝓁𝓂𝓃1𝓅𝓆𝓇𝓈𝓉𝓊𝓋𝓌𝓍𝓎𝓏1g𝔄𝔅1𝔇𝔈𝔉𝔊2𝔍𝔎𝔏𝔐𝔑𝔒𝔓𝔔1𝔖𝔗𝔘𝔙𝔚𝔛𝔜1𝔞𝔟𝔠𝔡𝔢𝔣𝔤𝔥𝔦𝔧𝔨𝔩𝔪𝔫𝔬𝔭𝔮𝔯𝔰𝔱𝔲𝔳𝔴𝔵𝔶𝔷𝔸𝔹1𝔻𝔼𝔽𝔾1𝕀𝕁𝕂𝕃𝕄1𝕆3𝕊𝕋𝕌𝕍𝕎𝕏𝕐1𝕒𝕓𝕔𝕕𝕖𝕗𝕘𝕙𝕚𝕛𝕜𝕝𝕞𝕟𝕠𝕡𝕢𝕣𝕤𝕥𝕦𝕧𝕨𝕩𝕪𝕫}6vefffiflffiffl\");\n//#endregion\n//#region node_modules/entities/dist/encode.js\n/**\n* We store the characters to consider as a compact bitset for fast lookups.\n*/\nconst HTML_BITSET = /* #__PURE__ */ new Uint32Array([\n\t5632,\n\t4227923966,\n\t4160749569,\n\t939524097\n]);\nconst XML_BITSET = /* #__PURE__ */ new Uint32Array([\n\t0,\n\tXML_BITSET_VALUE,\n\t0,\n\t0\n]);\n/**\n* Encodes all characters in the input using HTML entities. This includes\n* characters that are valid ASCII characters in HTML documents, such as `#`.\n*\n* To get a more compact output, consider using the `encodeNonAsciiHTML`\n* function, which will only encode characters that are not valid in HTML\n* documents, as well as non-ASCII characters.\n*\n* If a character has no equivalent entity, a numeric hexadecimal reference\n* (eg. `ü`) will be used.\n* @param input Input string to encode or decode.\n*/\nfunction encodeHTML(input) {\n\treturn encodeHTMLTrieRe(HTML_BITSET, input);\n}\n/**\n* Encodes all non-ASCII characters, as well as characters not valid in HTML\n* documents using HTML entities. This function will not encode characters that\n* are valid in HTML documents, such as `#`.\n*\n* If a character has no equivalent entity, a numeric hexadecimal reference\n* (eg. `ü`) will be used.\n* @param input Input string to encode or decode.\n*/\nfunction encodeNonAsciiHTML(input) {\n\treturn encodeHTMLTrieRe(XML_BITSET, input);\n}\nfunction encodeHTMLTrieRe(bitset, input) {\n\tlet out;\n\tlet last = 0;\n\tconst { length } = input;\n\tfor (let index = 0; index < length; index++) {\n\t\tconst char = input.charCodeAt(index);\n\t\tif (char < 128 && !(bitset[char >>> 5] >>> char & 1)) continue;\n\t\tif (out === void 0) out = input.substring(0, index);\n\t\telse if (last !== index) out += input.substring(last, index);\n\t\tlet node = htmlTrie.get(char);\n\t\tif (typeof node === \"object\") {\n\t\t\tif (index + 1 < length) {\n\t\t\t\tconst nextChar = input.charCodeAt(index + 1);\n\t\t\t\tconst value = typeof node.next === \"number\" ? node.next === nextChar ? node.nextValue : void 0 : node.next.get(nextChar);\n\t\t\t\tif (value !== void 0) {\n\t\t\t\t\tout += value;\n\t\t\t\t\tindex++;\n\t\t\t\t\tlast = index + 1;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tnode = node.value;\n\t\t}\n\t\tif (node === void 0) {\n\t\t\tconst cp = getCodePoint$1(input, index);\n\t\t\tout += `&#x${cp.toString(16)};`;\n\t\t\tif (cp !== char) index++;\n\t\t\tlast = index + 1;\n\t\t} else {\n\t\t\tout += node;\n\t\t\tlast = index + 1;\n\t\t}\n\t}\n\tif (out === void 0) return input;\n\tif (last < length) out += input.substr(last);\n\treturn out;\n}\n//#endregion\n//#region node_modules/entities/dist/index.js\n/** The level of entities to support. */\nvar EntityLevel;\n(function(EntityLevel) {\n\t/** Support only XML entities. */\n\tEntityLevel[EntityLevel[\"XML\"] = 0] = \"XML\";\n\t/** Support HTML entities, which are a superset of XML entities. */\n\tEntityLevel[EntityLevel[\"HTML\"] = 1] = \"HTML\";\n})(EntityLevel || (EntityLevel = {}));\n/**\n* Encoding strategy used by `encode`.\n*/\nvar EncodingMode;\n(function(EncodingMode) {\n\t/**\n\t* The output is UTF-8 encoded. Only characters that need escaping within\n\t* XML will be escaped.\n\t*/\n\tEncodingMode[EncodingMode[\"UTF8\"] = 0] = \"UTF8\";\n\t/**\n\t* The output consists only of ASCII characters. Characters that need\n\t* escaping within HTML, and characters that aren't ASCII characters will\n\t* be escaped.\n\t*/\n\tEncodingMode[EncodingMode[\"ASCII\"] = 1] = \"ASCII\";\n\t/**\n\t* Encode all characters that have an equivalent entity, as well as all\n\t* characters that are not ASCII characters.\n\t*/\n\tEncodingMode[EncodingMode[\"Extensive\"] = 2] = \"Extensive\";\n\t/**\n\t* Encode all characters that have to be escaped in HTML attributes,\n\t* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n\t*/\n\tEncodingMode[EncodingMode[\"Attribute\"] = 3] = \"Attribute\";\n\t/**\n\t* Encode all characters that have to be escaped in HTML text,\n\t* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n\t*/\n\tEncodingMode[EncodingMode[\"Text\"] = 4] = \"Text\";\n})(EncodingMode || (EncodingMode = {}));\n/**\n* Encodes a string with entities.\n* @param input String to encode.\n* @param options Encoding options.\n*/\nfunction encode(input, options = EntityLevel.XML) {\n\tconst { mode = EncodingMode.Extensive, level = EntityLevel.XML } = typeof options === \"number\" ? { level: options } : options;\n\tswitch (mode) {\n\t\tcase EncodingMode.UTF8: return escapeUTF8$1(input);\n\t\tcase EncodingMode.Attribute: return escapeAttribute$1(input);\n\t\tcase EncodingMode.Text: return escapeText$1(input);\n\t\tcase EncodingMode.ASCII: return level === EntityLevel.HTML ? encodeNonAsciiHTML(input) : encodeXML$1(input);\n\t\tcase EncodingMode.Extensive:\n\t\tdefault: return level === EntityLevel.HTML ? encodeHTML(input) : encodeXML$1(input);\n\t}\n}\n//#endregion\n//#region src/nodes/node.ts\n/**\n* Node Class as base class for TextNode and HTMLElement.\n*/\nvar Node = class {\n\tconstructor(parentNode = null, range) {\n\t\tthis.parentNode = parentNode;\n\t\tthis.childNodes = [];\n\t\tObject.defineProperty(this, \"range\", {\n\t\t\tenumerable: false,\n\t\t\twritable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: range !== null && range !== void 0 ? range : [-1, -1]\n\t\t});\n\t}\n\t/**\n\t* Remove current node\n\t*/\n\tremove() {\n\t\tif (this.parentNode) {\n\t\t\tconst children = this.parentNode.childNodes;\n\t\t\tthis.parentNode.childNodes = children.filter((child) => {\n\t\t\t\treturn this !== child;\n\t\t\t});\n\t\t\tthis.parentNode = null;\n\t\t}\n\t\treturn this;\n\t}\n\tget innerText() {\n\t\treturn this.rawText;\n\t}\n\tget textContent() {\n\t\treturn decodeHTML(this.rawText);\n\t}\n\tset textContent(val) {\n\t\tthis.rawText = encode(val);\n\t}\n};\n//#endregion\n//#region src/nodes/type.ts\nvar NodeType = /* @__PURE__ */ function(NodeType) {\n\tNodeType[NodeType[\"ELEMENT_NODE\"] = 1] = \"ELEMENT_NODE\";\n\tNodeType[NodeType[\"TEXT_NODE\"] = 3] = \"TEXT_NODE\";\n\tNodeType[NodeType[\"COMMENT_NODE\"] = 8] = \"COMMENT_NODE\";\n\treturn NodeType;\n}(NodeType || {});\n//#endregion\n//#region src/nodes/comment.ts\nvar CommentNode = class CommentNode extends Node {\n\tclone() {\n\t\treturn new CommentNode(this.rawText, null, void 0, this.rawTagName);\n\t}\n\tconstructor(rawText, parentNode = null, range, rawTagName = \"!--\") {\n\t\tsuper(parentNode, range);\n\t\tthis.rawText = rawText;\n\t\tthis.rawTagName = rawTagName;\n\t\tthis.nodeType = 8;\n\t}\n\t/**\n\t* Get unescaped text value of current node and its children.\n\t* @return {string} text content\n\t*/\n\tget text() {\n\t\treturn this.rawText;\n\t}\n\ttoString() {\n\t\treturn `<!--${this.rawText}-->`;\n\t}\n};\n//#endregion\n//#region node_modules/domelementtype/lib/esm/index.js\n/** Types of elements found in htmlparser2's DOM */\nvar ElementType;\n(function(ElementType) {\n\t/** Type for the root element of a document */\n\tElementType[\"Root\"] = \"root\";\n\t/** Type for Text */\n\tElementType[\"Text\"] = \"text\";\n\t/** Type for <? ... ?> */\n\tElementType[\"Directive\"] = \"directive\";\n\t/** Type for <!-- ... --> */\n\tElementType[\"Comment\"] = \"comment\";\n\t/** Type for <script> tags */\n\tElementType[\"Script\"] = \"script\";\n\t/** Type for <style> tags */\n\tElementType[\"Style\"] = \"style\";\n\t/** Type for Any tag */\n\tElementType[\"Tag\"] = \"tag\";\n\t/** Type for <![CDATA[ ... ]]> */\n\tElementType[\"CDATA\"] = \"cdata\";\n\t/** Type for <!doctype ...> */\n\tElementType[\"Doctype\"] = \"doctype\";\n})(ElementType || (ElementType = {}));\n/**\n* Tests whether an element is a tag or not.\n*\n* @param elem Element to test\n*/\nfunction isTag$2(elem) {\n\treturn elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style;\n}\n/** Type for the root element of a document */\nconst Root = ElementType.Root;\n/** Type for Text */\nconst Text = ElementType.Text;\n/** Type for <? ... ?> */\nconst Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nconst Comment = ElementType.Comment;\n/** Type for <script> tags */\nconst Script = ElementType.Script;\n/** Type for <style> tags */\nconst Style = ElementType.Style;\n/** Type for Any tag */\nconst Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nconst CDATA = ElementType.CDATA;\n/** Type for <!doctype ...> */\nconst Doctype = ElementType.Doctype;\n//#endregion\n//#region \\0@oxc-project+runtime@0.138.0/helpers/esm/typeof.js\nfunction _typeof(o) {\n\t\"@babel/helpers - typeof\";\n\treturn _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o) {\n\t\treturn typeof o;\n\t} : function(o) {\n\t\treturn o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n\t}, _typeof(o);\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.138.0/helpers/esm/toPrimitive.js\nfunction toPrimitive(t, r) {\n\tif (\"object\" != _typeof(t) || !t) return t;\n\tvar e = t[Symbol.toPrimitive];\n\tif (void 0 !== e) {\n\t\tvar i = e.call(t, r || \"default\");\n\t\tif (\"object\" != _typeof(i)) return i;\n\t\tthrow new TypeError(\"@@toPrimitive must return a primitive value.\");\n\t}\n\treturn (\"string\" === r ? String : Number)(t);\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.138.0/helpers/esm/toPropertyKey.js\nfunction toPropertyKey(t) {\n\tvar i = toPrimitive(t, \"string\");\n\treturn \"symbol\" == _typeof(i) ? i : i + \"\";\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.138.0/helpers/esm/defineProperty.js\nfunction _defineProperty(e, r, t) {\n\treturn (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n\t\tvalue: t,\n\t\tenumerable: !0,\n\t\tconfigurable: !0,\n\t\twritable: !0\n\t}) : e[r] = t, e;\n}\n//#endregion\n//#region \\0@oxc-project+runtime@0.138.0/helpers/esm/objectSpread2.js\nfunction ownKeys(e, r) {\n\tvar t = Object.keys(e);\n\tif (Object.getOwnPropertySymbols) {\n\t\tvar o = Object.getOwnPropertySymbols(e);\n\t\tr && (o = o.filter(function(r) {\n\t\t\treturn Object.getOwnPropertyDescriptor(e, r).enumerable;\n\t\t})), t.push.apply(t, o);\n\t}\n\treturn t;\n}\nfunction _objectSpread2(e) {\n\tfor (var r = 1; r < arguments.length; r++) {\n\t\tvar t = null != arguments[r] ? arguments[r] : {};\n\t\tr % 2 ? ownKeys(Object(t), !0).forEach(function(r) {\n\t\t\t_defineProperty(e, r, t[r]);\n\t\t}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r) {\n\t\t\tObject.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n\t\t});\n\t}\n\treturn e;\n}\n//#endregion\n//#region node_modules/domhandler/lib/esm/node.js\n/**\n* @param node Node to check.\n* @returns `true` if the node is a `Element`, `false` otherwise.\n*/\nfunction isTag$1(node) {\n\treturn isTag$2(node);\n}\n/**\n* @param node Node to check.\n* @returns `true` if the node has the type `CDATA`, `false` otherwise.\n*/\nfunction isCDATA(node) {\n\treturn node.type === ElementType.CDATA;\n}\n/**\n* @param node Node to check.\n* @returns `true` if the node has the type `Text`, `false` otherwise.\n*/\nfunction isText(node) {\n\treturn node.type === ElementType.Text;\n}\n/**\n* @param node Node to check.\n* @returns `true` if the node has the type `Comment`, `false` otherwise.\n*/\nfunction isComment(node) {\n\treturn node.type === ElementType.Comment;\n}\n/**\n* @param node Node to check.\n* @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n*/\nfunction isDocument(node) {\n\treturn node.type === ElementType.Root;\n}\n/**\n* @param node Node to check.\n* @returns `true` if the node has children, `false` otherwise.\n*/\nfunction hasChildren(node) {\n\treturn Object.prototype.hasOwnProperty.call(node, \"children\");\n}\n//#endregion\n//#region node_modules/dom-serializer/node_modules/entities/lib/esm/escape.js\nconst xmlReplacer = /[\"&'<>$\\x80-\\uFFFF]/g;\nconst xmlCodeMap = /* @__PURE__ */ new Map([\n\t[34, \""\"],\n\t[38, \"&\"],\n\t[39, \"'\"],\n\t[60, \"<\"],\n\t[62, \">\"]\n]);\nconst getCodePoint = String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : (c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index);\n/**\n* Encodes all non-ASCII characters, as well as characters not valid in XML\n* documents using XML entities.\n*\n* If a character has no equivalent entity, a\n* numeric hexadecimal reference (eg. `ü`) will be used.\n*/\nfunction encodeXML(str) {\n\tlet ret = \"\";\n\tlet lastIdx = 0;\n\tlet match;\n\twhile ((match = xmlReplacer.exec(str)) !== null) {\n\t\tconst i = match.index;\n\t\tconst char = str.charCodeAt(i);\n\t\tconst next = xmlCodeMap.get(char);\n\t\tif (next !== void 0) {\n\t\t\tret += str.substring(lastIdx, i) + next;\n\t\t\tlastIdx = i + 1;\n\t\t} else {\n\t\t\tret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;\n\t\t\tlastIdx = xmlReplacer.lastIndex += Number((char & 64512) === 55296);\n\t\t}\n\t}\n\treturn ret + str.substr(lastIdx);\n}\n/**\n* Creates a function that escapes all characters matched by the given regular\n* expression using the given map of characters to escape to their entities.\n*\n* @param regex Regular expression to match characters to escape.\n* @param map Map of characters to escape to their entities.\n*\n* @returns Function that escapes all characters matched by the given regular\n* expression using the given map of characters to escape to their entities.\n*/\nfunction getEscaper(regex, map) {\n\treturn function escape(data) {\n\t\tlet match;\n\t\tlet lastIdx = 0;\n\t\tlet result = \"\";\n\t\twhile (match = regex.exec(data)) {\n\t\t\tif (lastIdx !== match.index) result += data.substring(lastIdx, match.index);\n\t\t\tresult += map.get(match[0].charCodeAt(0));\n\t\t\tlastIdx = match.index + 1;\n\t\t}\n\t\treturn result + data.substring(lastIdx);\n\t};\n}\n/**\n* Encodes all characters that have to be escaped in HTML attributes,\n* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n*\n* @param data String to escape.\n*/\nconst escapeAttribute = getEscaper(/[\"&\\u00A0]/g, /* @__PURE__ */ new Map([\n\t[34, \""\"],\n\t[38, \"&\"],\n\t[160, \" \"]\n]));\n/**\n* Encodes all characters that have to be escaped in HTML text,\n* following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n*\n* @param data String to escape.\n*/\nconst escapeText = getEscaper(/[&<>\\u00A0]/g, /* @__PURE__ */ new Map([\n\t[38, \"&\"],\n\t[60, \"<\"],\n\t[62, \">\"],\n\t[160, \" \"]\n]));\n//#endregion\n//#region node_modules/dom-serializer/lib/esm/foreignNames.js\nconst elementNames = new Map([\n\t\"altGlyph\",\n\t\"altGlyphDef\",\n\t\"altGlyphItem\",\n\t\"animateColor\",\n\t\"animateMotion\",\n\t\"animateTransform\",\n\t\"clipPath\",\n\t\"feBlend\",\n\t\"feColorMatrix\",\n\t\"feComponentTransfer\",\n\t\"feComposite\",\n\t\"feConvolveMatrix\",\n\t\"feDiffuseLighting\",\n\t\"feDisplacementMap\",\n\t\"feDistantLight\",\n\t\"feDropShadow\",\n\t\"feFlood\",\n\t\"feFuncA\",\n\t\"feFuncB\",\n\t\"feFuncG\",\n\t\"feFuncR\",\n\t\"feGaussianBlur\",\n\t\"feImage\",\n\t\"feMerge\",\n\t\"feMergeNode\",\n\t\"feMorphology\",\n\t\"feOffset\",\n\t\"fePointLight\",\n\t\"feSpecularLighting\",\n\t\"feSpotLight\",\n\t\"feTile\",\n\t\"feTurbulence\",\n\t\"foreignObject\",\n\t\"glyphRef\",\n\t\"linearGradient\",\n\t\"radialGradient\",\n\t\"textPath\"\n].map((val) => [val.toLowerCase(), val]));\nconst attributeNames = new Map([\n\t\"definitionURL\",\n\t\"attributeName\",\n\t\"attributeType\",\n\t\"baseFrequency\",\n\t\"baseProfile\",\n\t\"calcMode\",\n\t\"clipPathUnits\",\n\t\"diffuseConstant\",\n\t\"edgeMode\",\n\t\"filterUnits\",\n\t\"glyphRef\",\n\t\"gradientTransform\",\n\t\"gradientUnits\",\n\t\"kernelMatrix\",\n\t\"kernelUnitLength\",\n\t\"keyPoints\",\n\t\"keySplines\",\n\t\"keyTimes\",\n\t\"lengthAdjust\",\n\t\"limitingConeAngle\",\n\t\"markerHeight\",\n\t\"markerUnits\",\n\t\"markerWidth\",\n\t\"maskContentUnits\",\n\t\"maskUnits\",\n\t\"numOctaves\",\n\t\"pathLength\",\n\t\"patternContentUnits\",\n\t\"patternTransform\",\n\t\"patternUnits\",\n\t\"pointsAtX\",\n\t\"pointsAtY\",\n\t\"pointsAtZ\",\n\t\"preserveAlpha\",\n\t\"preserveAspectRatio\",\n\t\"primitiveUnits\",\n\t\"refX\",\n\t\"refY\",\n\t\"repeatCount\",\n\t\"repeatDur\",\n\t\"requiredExtensions\",\n\t\"requiredFeatures\",\n\t\"specularConstant\",\n\t\"specularExponent\",\n\t\"spreadMethod\",\n\t\"startOffset\",\n\t\"stdDeviation\",\n\t\"stitchTiles\",\n\t\"surfaceScale\",\n\t\"systemLanguage\",\n\t\"tableValues\",\n\t\"targetX\",\n\t\"targetY\",\n\t\"textLength\",\n\t\"viewBox\",\n\t\"viewTarget\",\n\t\"xChannelSelector\",\n\t\"yChannelSelector\",\n\t\"zoomAndPan\"\n].map((val) => [val.toLowerCase(), val]));\n//#endregion\n//#region node_modules/dom-serializer/lib/esm/index.js\n/**\n* Mixed-case SVG and MathML tags & attributes\n* recognized by the HTML parser.\n*\n* @see https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign\n*/\nconst unencodedElements = /* @__PURE__ */ new Set([\n\t\"style\",\n\t\"script\",\n\t\"xmp\",\n\t\"iframe\",\n\t\"noembed\",\n\t\"noframes\",\n\t\"plaintext\",\n\t\"noscript\"\n]);\nfunction replaceQuotes(value) {\n\treturn value.replace(/\"/g, \""\");\n}\n/**\n* Format attributes\n*/\nfunction formatAttributes(attributes, opts) {\n\tvar _a;\n\tif (!attributes) return;\n\tconst encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false ? replaceQuotes : opts.xmlMode || opts.encodeEntities !== \"utf8\" ? encodeXML : escapeAttribute;\n\treturn Object.keys(attributes).map((key) => {\n\t\tvar _a, _b;\n\t\tconst value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : \"\";\n\t\tif (opts.xmlMode === \"foreign\") key = (_b = attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;\n\t\tif (!opts.emptyAttrs && !opts.xmlMode && value === \"\") return key;\n\t\treturn `${key}=\"${encode(value)}\"`;\n\t}).join(\" \");\n}\n/**\n* Self-enclosing tags\n*/\nconst singleTag = /* @__PURE__ */ new Set([\n\t\"area\",\n\t\"base\",\n\t\"basefont\",\n\t\"br\",\n\t\"col\",\n\t\"command\",\n\t\"embed\",\n\t\"frame\",\n\t\"hr\",\n\t\"img\",\n\t\"input\",\n\t\"isindex\",\n\t\"keygen\",\n\t\"link\",\n\t\"meta\",\n\t\"param\",\n\t\"source\",\n\t\"track\",\n\t\"wbr\"\n]);\n/**\n* Renders a DOM node or an array of DOM nodes to a string.\n*\n* Can be thought of as the equivalent of the `outerHTML` of the passed node(s).\n*\n* @param node Node to be rendered.\n* @param options Changes serialization behavior\n*/\nfunction render(node, options = {}) {\n\tconst nodes = \"length\" in node ? node : [node];\n\tlet output = \"\";\n\tfor (let i = 0; i < nodes.length; i++) output += renderNode(nodes[i], options);\n\treturn output;\n}\nfunction renderNode(node, options) {\n\tswitch (node.type) {\n\t\tcase Root: return render(node.children, options);\n\t\tcase Doctype:\n\t\tcase Directive: return renderDirective(node);\n\t\tcase Comment: return renderComment(node);\n\t\tcase CDATA: return renderCdata(node);\n\t\tcase Script:\n\t\tcase Style:\n\t\tcase Tag: return renderTag(node, options);\n\t\tcase Text: return renderText(node, options);\n\t}\n}\nconst foreignModeIntegrationPoints = /* @__PURE__ */ new Set([\n\t\"mi\",\n\t\"mo\",\n\t\"mn\",\n\t\"ms\",\n\t\"mtext\",\n\t\"annotation-xml\",\n\t\"foreignObject\",\n\t\"desc\",\n\t\"title\"\n]);\nconst foreignElements = /* @__PURE__ */ new Set([\"svg\", \"math\"]);\nfunction renderTag(elem, opts) {\n\tvar _a;\n\tif (opts.xmlMode === \"foreign\") {\n\t\telem.name = (_a = elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;\n\t\tif (elem.parent && foreignModeIntegrationPoints.has(elem.parent.name)) opts = _objectSpread2(_objectSpread2({}, opts), {}, { xmlMode: false });\n\t}\n\tif (!opts.xmlMode && foreignElements.has(elem.name)) opts = _objectSpread2(_objectSpread2({}, opts), {}, { xmlMode: \"foreign\" });\n\tlet tag = `<${elem.name}`;\n\tconst attribs = formatAttributes(elem.attribs, opts);\n\tif (attribs) tag += ` ${attribs}`;\n\tif (elem.children.length === 0 && (opts.xmlMode ? opts.selfClosingTags !== false : opts.selfClosingTags && singleTag.has(elem.name))) {\n\t\tif (!opts.xmlMode) tag += \" \";\n\t\ttag += \"/>\";\n\t} else {\n\t\ttag += \">\";\n\t\tif (elem.children.length > 0) tag += render(elem.children, opts);\n\t\tif (opts.xmlMode || !singleTag.has(elem.name)) tag += `</${elem.name}>`;\n\t}\n\treturn tag;\n}\nfunction renderDirective(elem) {\n\treturn `<${elem.data}>`;\n}\nfunction renderText(elem, opts) {\n\tvar _a;\n\tlet data = elem.data || \"\";\n\tif (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false && !(!opts.xmlMode && elem.parent && unencodedElements.has(elem.parent.name))) data = opts.xmlMode || opts.encodeEntities !== \"utf8\" ? encodeXML(data) : escapeText(data);\n\treturn data;\n}\nfunction renderCdata(elem) {\n\treturn `<![CDATA[${elem.children[0].data}]]>`;\n}\nfunction renderComment(elem) {\n\treturn `<!--${elem.data}-->`;\n}\n//#endregion\n//#region node_modules/domutils/lib/esm/stringify.js\n/**\n* @category Stringify\n* @deprecated Use the `dom-serializer` module directly.\n* @param node Node to get the outer HTML of.\n* @param options Options for serialization.\n* @returns `node`'s outer HTML.\n*/\nfunction getOuterHTML(node, options) {\n\treturn render(node, options);\n}\n/**\n* @category Stringify\n* @deprecated Use the `dom-serializer` module directly.\n* @param node Node to get the inner HTML of.\n* @param options Options for serialization.\n* @returns `node`'s inner HTML.\n*/\nfunction getInnerHTML(node, options) {\n\treturn hasChildren(node) ? node.children.map((node) => getOuterHTML(node, options)).join(\"\") : \"\";\n}\n/**\n* Get a node's inner text. Same as `textContent`, but inserts newlines for `<br>` tags. Ignores comments.\n*\n* @category Stringify\n* @deprecated Use `textContent` instead.\n* @param node Node to get the inner text of.\n* @returns `node`'s inner text.\n*/\nfunction getText$1(node) {\n\tif (Array.isArray(node)) return node.map(getText$1).join(\"\");\n\tif (isTag$1(node)) return node.name === \"br\" ? \"\\n\" : getText$1(node.children);\n\tif (isCDATA(node)) return getText$1(node.children);\n\tif (isText(node)) return node.data;\n\treturn \"\";\n}\n/**\n* Get a node's text content. Ignores comments.\n*\n* @category Stringify\n* @param node Node to get the text content of.\n* @returns `node`'s text content.\n* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent}\n*/\nfunction textContent(node) {\n\tif (Array.isArray(node)) return node.map(textContent).join(\"\");\n\tif (hasChildren(node) && !isComment(node)) return textContent(node.children);\n\tif (isText(node)) return node.data;\n\treturn \"\";\n}\n/**\n* Get a node's inner text, ignoring `<script>` and `<style>` tags. Ignores comments.\n*\n* @category Stringify\n* @param node Node to get the inner text of.\n* @returns `node`'s inner text.\n* @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/innerText}\n*/\nfunction innerText(node) {\n\tif (Array.isArray(node)) return node.map(innerText).join(\"\");\n\tif (hasChildren(node) && (node.type === ElementType.Tag || isCDATA(node))) return innerText(node.children);\n\tif (isText(node)) return node.data;\n\treturn \"\";\n}\n//#endregion\n//#region node_modules/domutils/lib/esm/traversal.js\n/**\n* Get a node's children.\n*\n* @category Traversal\n* @param elem Node to get the children of.\n* @returns `elem`'s children, or an empty array.\n*/\nfunction getChildren$1(elem) {\n\treturn hasChildren(elem) ? elem.children : [];\n}\n/**\n* Get a node's parent.\n*\n* @category Traversal\n* @param elem Node to get the parent of.\n* @returns `elem`'s parent node, or `null` if `elem` is a root node.\n*/\nfunction getParent$1(elem) {\n\treturn elem.parent || null;\n}\n/**\n* Gets an elements siblings, including the element itself.\n*\n* Attempts to get the children through the element's parent first. If we don't\n* have a parent (the element is a root node), we walk the element's `prev` &\n* `next` to get all remaining nodes.\n*\n* @category Traversal\n* @param elem Element to get the siblings of.\n* @returns `elem`'s siblings, including `elem`.\n*/\nfunction getSiblings$1(elem) {\n\tconst parent = getParent$1(elem);\n\tif (parent != null) return getChildren$1(parent);\n\tconst siblings = [elem];\n\tlet { prev, next } = elem;\n\twhile (prev != null) {\n\t\tsiblings.unshift(prev);\n\t\t({prev} = prev);\n\t}\n\twhile (next != null) {\n\t\tsiblings.push(next);\n\t\t({next} = next);\n\t}\n\treturn siblings;\n}\n/**\n* Gets an attribute from an element.\n*\n* @category Traversal\n* @param elem Element to check.\n* @param name Attribute name to retrieve.\n* @returns The element's attribute value, or `undefined`.\n*/\nfunction getAttributeValue$1(elem, name) {\n\tvar _a;\n\treturn (_a = elem.attribs) === null || _a === void 0 ? void 0 : _a[name];\n}\n/**\n* Checks whether an element has an attribute.\n*\n* @category Traversal\n* @param elem Element to check.\n* @param name Attribute name to look for.\n* @returns Returns whether `elem` has the attribute `name`.\n*/\nfunction hasAttrib$1(elem, name) {\n\treturn elem.attribs != null && Object.prototype.hasOwnProperty.call(elem.attribs, name) && elem.attribs[name] != null;\n}\n/**\n* Get the tag name of an element.\n*\n* @category Traversal\n* @param elem The element to get the name for.\n* @returns The tag name of `elem`.\n*/\nfunction getName$1(elem) {\n\treturn elem.name;\n}\n/**\n* Returns the next element sibling of a node.\n*\n* @category Traversal\n* @param elem The element to get the next sibling of.\n* @returns `elem`'s next sibling that is a tag, or `null` if there is no next\n* sibling.\n*/\nfunction nextElementSibling(elem) {\n\tlet { next } = elem;\n\twhile (next !== null && !isTag$1(next)) ({next} = next);\n\treturn next;\n}\n/**\n* Returns the previous element sibling of a node.\n*\n* @category Traversal\n* @param elem The element to get the previous sibling of.\n* @returns `elem`'s previous sibling that is a tag, or `null` if there is no\n* previous sibling.\n*/\nfunction prevElementSibling(elem) {\n\tlet { prev } = elem;\n\twhile (prev !== null && !isTag$1(prev)) ({prev} = prev);\n\treturn prev;\n}\n//#endregion\n//#region node_modules/domutils/lib/esm/manipulation.js\n/**\n* Remove an element from the dom\n*\n* @category Manipulation\n* @param elem The element to be removed\n*/\nfunction removeElement(elem) {\n\tif (elem.prev) elem.prev.next = elem.next;\n\tif (elem.next) elem.next.prev = elem.prev;\n\tif (elem.parent) {\n\t\tconst childs = elem.parent.children;\n\t\tconst childsIndex = childs.lastIndexOf(elem);\n\t\tif (childsIndex >= 0) childs.splice(childsIndex, 1);\n\t}\n\telem.next = null;\n\telem.prev = null;\n\telem.parent = null;\n}\n/**\n* Replace an element in the dom\n*\n* @category Manipulation\n* @param elem The element to be replaced\n* @param replacement The element to be added\n*/\nfunction replaceElement(elem, replacement) {\n\tconst prev = replacement.prev = elem.prev;\n\tif (prev) prev.next = replacement;\n\tconst next = replacement.next = elem.next;\n\tif (next) next.prev = replacement;\n\tconst parent = replacement.parent = elem.parent;\n\tif (parent) {\n\t\tconst childs = parent.children;\n\t\tchilds[childs.lastIndexOf(elem)] = replacement;\n\t\telem.parent = null;\n\t}\n}\n/**\n* Append a child to an element.\n*\n* @category Manipulation\n* @param parent The element to append to.\n* @param child The element to be added as a child.\n*/\nfunction appendChild(parent, child) {\n\tremoveElement(child);\n\tchild.next = null;\n\tchild.parent = parent;\n\tif (parent.children.push(child) > 1) {\n\t\tconst sibling = parent.children[parent.children.length - 2];\n\t\tsibling.next = child;\n\t\tchild.prev = sibling;\n\t} else child.prev = null;\n}\n/**\n* Append an element after another.\n*\n* @category Manipulation\n* @param elem The element to append after.\n* @param next The element be added.\n*/\nfunction append(elem, next) {\n\tremoveElement(next);\n\tconst { parent } = elem;\n\tconst currNext = elem.next;\n\tnext.next = currNext;\n\tnext.prev = elem;\n\telem.next = next;\n\tnext.parent = parent;\n\tif (currNext) {\n\t\tcurrNext.prev = next;\n\t\tif (parent) {\n\t\t\tconst childs = parent.children;\n\t\t\tchilds.splice(childs.lastIndexOf(currNext), 0, next);\n\t\t}\n\t} else if (parent) parent.children.push(next);\n}\n/**\n* Prepend a child to an element.\n*\n* @category Manipulation\n* @param parent The element to prepend before.\n* @param child The element to be added as a child.\n*/\nfunction prependChild(parent, child) {\n\tremoveElement(child);\n\tchild.parent = parent;\n\tchild.prev = null;\n\tif (parent.children.unshift(child) !== 1) {\n\t\tconst sibling = parent.children[1];\n\t\tsibling.prev = child;\n\t\tchild.next = sibling;\n\t} else child.next = null;\n}\n/**\n* Prepend an element before another.\n*\n* @category Manipulation\n* @param elem The element to prepend before.\n* @param prev The element be added.\n*/\nfunction prepend(elem, prev) {\n\tremoveElement(prev);\n\tconst { parent } = elem;\n\tif (parent) {\n\t\tconst childs = parent.children;\n\t\tchilds.splice(childs.indexOf(elem), 0, prev);\n\t}\n\tif (elem.prev) elem.prev.next = prev;\n\tprev.parent = parent;\n\tprev.prev = elem.prev;\n\tprev.next = elem;\n\telem.prev = prev;\n}\n//#endregion\n//#region node_modules/domutils/lib/esm/querying.js\n/**\n* Search a node and its children for nodes passing a test function. If `node` is not an array, it will be wrapped in one.\n*\n* @category Querying\n* @param test Function to test nodes on.\n* @param node Node to search. Will be included in the result set if it matches.\n* @param recurse Also consider child nodes.\n* @param limit Maximum number of nodes to return.\n* @returns All nodes passing `test`.\n*/\nfunction filter(test, node, recurse = true, limit = Infinity) {\n\treturn find(test, Array.isArray(node) ? node : [node], recurse, limit);\n}\n/**\n* Search an array of nodes and their children for nodes passing a test function.\n*\n* @category Querying\n* @param test Function to test nodes on.\n* @param nodes Array of nodes to search.\n* @param recurse Also consider child nodes.\n* @param limit Maximum number of nodes to return.\n* @returns All nodes passing `test`.\n*/\nfunction find(test, nodes, recurse, limit) {\n\tconst result = [];\n\t/** Stack of the arrays we are looking at. */\n\tconst nodeStack = [nodes];\n\t/** Stack of the indices within the arrays. */\n\tconst indexStack = [0];\n\tfor (;;) {\n\t\tif (indexStack[0] >= nodeStack[0].length) {\n\t\t\tif (indexStack.length === 1) return result;\n\t\t\tnodeStack.shift();\n\t\t\tindexStack.shift();\n\t\t\tcontinue;\n\t\t}\n\t\tconst elem = nodeStack[0][indexStack[0]++];\n\t\tif (test(elem)) {\n\t\t\tresult.push(elem);\n\t\t\tif (--limit <= 0) return result;\n\t\t}\n\t\tif (recurse && hasChildren(elem) && elem.children.length > 0) {\n\t\t\tindexStack.unshift(0);\n\t\t\tnodeStack.unshift(elem.children);\n\t\t}\n\t}\n}\n/**\n* Finds the first element inside of an array that matches a test function. This is an alias for `Array.prototype.find`.\n*\n* @category Querying\n* @param test Function to test nodes on.\n* @param nodes Array of nodes to search.\n* @returns The first node in the array that passes `test`.\n* @deprecated Use `Array.prototype.find` directly.\n*/\nfunction findOneChild(test, nodes) {\n\treturn nodes.find(test);\n}\n/**\n* Finds one element in a tree that passes a test.\n*\n* @category Querying\n* @param test Function to test nodes on.\n* @param nodes Node or array of nodes to search.\n* @param recurse Also consider child nodes.\n* @returns The first node that passes `test`.\n*/\nfunction findOne$1(test, nodes, recurse = true) {\n\tlet elem = null;\n\tfor (let i = 0; i < nodes.length && !elem; i++) {\n\t\tconst node = nodes[i];\n\t\tif (!isTag$1(node)) continue;\n\t\telse if (test(node)) elem = node;\n\t\telse if (recurse && node.children.length > 0) elem = findOne$1(test, node.children, true);\n\t}\n\treturn elem;\n}\n/**\n* Checks if a tree of nodes contains at least one node passing a test.\n*\n* @category Querying\n* @param test Function to test nodes on.\n* @param nodes Array of nodes to search.\n* @returns Whether a tree of nodes contains at least one node passing the test.\n*/\nfunction existsOne$1(test, nodes) {\n\treturn nodes.some((checked) => isTag$1(checked) && (test(checked) || existsOne$1(test, checked.children)));\n}\n/**\n* Search an array of nodes and their children for elements passing a test function.\n*\n* Same as `find`, but limited to elements and with less options, leading to reduced complexity.\n*\n* @category Querying\n* @param test Function to test nodes on.\n* @param nodes Array of nodes to search.\n* @returns All nodes passing `test`.\n*/\nfunction findAll$1(test, nodes) {\n\tconst result = [];\n\tconst nodeStack = [nodes];\n\tconst indexStack = [0];\n\tfor (;;) {\n\t\tif (indexStack[0] >= nodeStack[0].length) {\n\t\t\tif (nodeStack.length === 1) return result;\n\t\t\tnodeStack.shift();\n\t\t\tindexStack.shift();\n\t\t\tcontinue;\n\t\t}\n\t\tconst elem = nodeStack[0][indexStack[0]++];\n\t\tif (!isTag$1(elem)) continue;\n\t\tif (test(elem)) result.push(elem);\n\t\tif (elem.children.length > 0) {\n\t\t\tindexStack.unshift(0);\n\t\t\tnodeStack.unshift(elem.children);\n\t\t}\n\t}\n}\n//#endregion\n//#region node_modules/domutils/lib/esm/legacy.js\n/**\n* A map of functions to check nodes against.\n*/\nconst Checks = {\n\ttag_name(name) {\n\t\tif (typeof name === \"function\") return (elem) => isTag$1(elem) && name(elem.name);\n\t\telse if (name === \"*\") return isTag$1;\n\t\treturn (elem) => isTag$1(elem) && elem.name === name;\n\t},\n\ttag_type(type) {\n\t\tif (typeof type === \"function\") return (elem) => type(elem.type);\n\t\treturn (elem) => elem.type === type;\n\t},\n\ttag_contains(data) {\n\t\tif (typeof data === \"function\") return (elem) => isText(elem) && data(elem.data);\n\t\treturn (elem) => isText(elem) && elem.data === data;\n\t}\n};\n/**\n* Returns a function to check whether a node has an attribute with a particular\n* value.\n*\n* @param attrib Attribute to check.\n* @param value Attribute value to look for.\n* @returns A function to check whether the a node has an attribute with a\n* particular value.\n*/\nfunction getAttribCheck(attrib, value) {\n\tif (typeof value === \"function\") return (elem) => isTag$1(elem) && value(elem.attribs[attrib]);\n\treturn (elem) => isTag$1(elem) && elem.attribs[attrib] === value;\n}\n/**\n* Returns a function that returns `true` if either of the input functions\n* returns `true` for a node.\n*\n* @param a First function to combine.\n* @param b Second function to combine.\n* @returns A function taking a node and returning `true` if either of the input\n* functions returns `true` for the node.\n*/\nfunction combineFuncs(a, b) {\n\treturn (elem) => a(elem) || b(elem);\n}\n/**\n* Returns a function that executes all checks in `options` and returns `true`\n* if any of them match a node.\n*\n* @param options An object describing nodes to look for.\n* @returns A function that executes all checks in `options` and returns `true`\n* if any of them match a node.\n*/\nfunction compileTest(options) {\n\tconst funcs = Object.keys(options).map((key) => {\n\t\tconst value = options[key];\n\t\treturn Object.prototype.hasOwnProperty.call(Checks, key) ? Checks[key](value) : getAttribCheck(key, value);\n\t});\n\treturn funcs.length === 0 ? null : funcs.reduce(combineFuncs);\n}\n/**\n* Checks whether a node matches the description in `options`.\n*\n* @category Legacy Query Functions\n* @param options An object describing nodes to look for.\n* @param node The element to test.\n* @returns Whether the element matches the description in `options`.\n*/\nfunction testElement(options, node) {\n\tconst test = compileTest(options);\n\treturn test ? test(node) : true;\n}\n/**\n* Returns all nodes that match `options`.\n*\n* @category Legacy Query Functions\n* @param options An object describing nodes to look for.\n* @param nodes Nodes to search through.\n* @param recurse Also consider child nodes.\n* @param limit Maximum number of nodes to return.\n* @returns All nodes that match `options`.\n*/\nfunction getElements(options, nodes, recurse, limit = Infinity) {\n\tconst test = compileTest(options);\n\treturn test ? filter(test, nodes, recurse, limit) : [];\n}\n/**\n* Returns the node with the supplied ID.\n*\n* @category Legacy Query Functions\n* @param id The unique ID attribute value to look for.\n* @param nodes Nodes to search through.\n* @param recurse Also consider child nodes.\n* @returns The node with the supplied ID.\n*/\nfunction getElementById(id, nodes, recurse = true) {\n\tif (!Array.isArray(nodes)) nodes = [nodes];\n\treturn findOne$1(getAttribCheck(\"id\", id), nodes, recurse);\n}\n/**\n* Returns all nodes with the supplied `tagName`.\n*\n* @category Legacy Query Functions\n* @param tagName Tag name to search for.\n* @param nodes Nodes to search through.\n* @param recurse Also consider child nodes.\n* @param limit Maximum number of nodes to return.\n* @returns All nodes with the supplied `tagName`.\n*/\nfunction getElementsByTagName(tagName, nodes, recurse = true, limit = Infinity) {\n\treturn filter(Checks[\"tag_name\"](tagName), nodes, recurse, limit);\n}\n/**\n* Returns all nodes with the supplied `type`.\n*\n* @category Legacy Query Functions\n* @param type Element type to look for.\n* @param nodes Nodes to search through.\n* @param recurse Also consider child nodes.\n* @param limit Maximum number of nodes to return.\n* @returns All nodes with the supplied `type`.\n*/\nfunction getElementsByTagType(type, nodes, recurse = true, limit = Infinity) {\n\treturn filter(Checks[\"tag_type\"](type), nodes, recurse, limit);\n}\n//#endregion\n//#region node_modules/domutils/lib/esm/helpers.js\n/**\n* Given an array of nodes, remove any member that is contained by another\n* member.\n*\n* @category Helpers\n* @param nodes Nodes to filter.\n* @returns Remaining nodes that aren't contained by other nodes.\n*/\nfunction removeSubsets$1(nodes) {\n\tlet idx = nodes.length;\n\twhile (--idx >= 0) {\n\t\tconst node = nodes[idx];\n\t\tif (idx > 0 && nodes.lastIndexOf(node, idx - 1) >= 0) {\n\t\t\tnodes.splice(idx, 1);\n\t\t\tcontinue;\n\t\t}\n\t\tfor (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) if (nodes.includes(ancestor)) {\n\t\t\tnodes.splice(idx, 1);\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn nodes;\n}\n/**\n* @category Helpers\n* @see {@link http://dom.spec.whatwg.org/#dom-node-comparedocumentposition}\n*/\nvar DocumentPosition;\n(function(DocumentPosition) {\n\tDocumentPosition[DocumentPosition[\"DISCONNECTED\"] = 1] = \"DISCONNECTED\";\n\tDocumentPosition[DocumentPosition[\"PRECEDING\"] = 2] = \"PRECEDING\";\n\tDocumentPosition[DocumentPosition[\"FOLLOWING\"] = 4] = \"FOLLOWING\";\n\tDocumentPosition[DocumentPosition[\"CONTAINS\"] = 8] = \"CONTAINS\";\n\tDocumentPosition[DocumentPosition[\"CONTAINED_BY\"] = 16] = \"CONTAINED_BY\";\n})(DocumentPosition || (DocumentPosition = {}));\n/**\n* Compare the position of one node against another node in any other document,\n* returning a bitmask with the values from {@link DocumentPosition}.\n*\n* Document order:\n* > There is an ordering, document order, defined on all the nodes in the\n* > document corresponding to the order in which the first character of the\n* > XML representation of each node occurs in the XML representation of the\n* > document after expansion of general entities. Thus, the document element\n* > node will be the first node. Element nodes occur before their children.\n* > Thus, document order orders element nodes in order of the occurrence of\n* > their start-tag in the XML (after expansion of entities). The attribute\n* > nodes of an element occur after the element and before its children. The\n* > relative order of attribute nodes is implementation-dependent.\n*\n* Source:\n* http://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-document-order\n*\n* @category Helpers\n* @param nodeA The first node to use in the comparison\n* @param nodeB The second node to use in the comparison\n* @returns A bitmask describing the input nodes' relative position.\n*\n* See http://dom.spec.whatwg.org/#dom-node-comparedocumentposition for\n* a description of these values.\n*/\nfunction compareDocumentPosition(nodeA, nodeB) {\n\tconst aParents = [];\n\tconst bParents = [];\n\tif (nodeA === nodeB) return 0;\n\tlet current = hasChildren(nodeA) ? nodeA : nodeA.parent;\n\twhile (current) {\n\t\taParents.unshift(current);\n\t\tcurrent = current.parent;\n\t}\n\tcurrent = hasChildren(nodeB) ? nodeB : nodeB.parent;\n\twhile (current) {\n\t\tbParents.unshift(current);\n\t\tcurrent = current.parent;\n\t}\n\tconst maxIdx = Math.min(aParents.length, bParents.length);\n\tlet idx = 0;\n\twhile (idx < maxIdx && aParents[idx] === bParents[idx]) idx++;\n\tif (idx === 0) return DocumentPosition.DISCONNECTED;\n\tconst sharedParent = aParents[idx - 1];\n\tconst siblings = sharedParent.children;\n\tconst aSibling = aParents[idx];\n\tconst bSibling = bParents[idx];\n\tif (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {\n\t\tif (sharedParent === nodeB) return DocumentPosition.FOLLOWING | DocumentPosition.CONTAINED_BY;\n\t\treturn DocumentPosition.FOLLOWING;\n\t}\n\tif (sharedParent === nodeA) return DocumentPosition.PRECEDING | DocumentPosition.CONTAINS;\n\treturn DocumentPosition.PRECEDING;\n}\n/**\n* Sort an array of nodes based on their relative position in the document,\n* removing any duplicate nodes. If the array contains nodes that do not belong\n* to the same document, sort order is unspecified.\n*\n* @category Helpers\n* @param nodes Array of DOM nodes.\n* @returns Collection of unique nodes, sorted in document order.\n*/\nfunction uniqueSort(nodes) {\n\tnodes = nodes.filter((node, i, arr) => !arr.includes(node, i + 1));\n\tnodes.sort((a, b) => {\n\t\tconst relative = compareDocumentPosition(a, b);\n\t\tif (relative & DocumentPosition.PRECEDING) return -1;\n\t\telse if (relative & DocumentPosition.FOLLOWING) return 1;\n\t\treturn 0;\n\t});\n\treturn nodes;\n}\n//#endregion\n//#region node_modules/domutils/lib/esm/feeds.js\n/**\n* Get the feed object from the root of a DOM tree.\n*\n* @category Feeds\n* @param doc - The DOM to to extract the feed from.\n* @returns The feed.\n*/\nfunction getFeed(doc) {\n\tconst feedRoot = getOneElement(isValidFeed, doc);\n\treturn !feedRoot ? null : feedRoot.name === \"feed\" ? getAtomFeed(feedRoot) : getRssFeed(feedRoot);\n}\n/**\n* Parse an Atom feed.\n*\n* @param feedRoot The root of the feed.\n* @returns The parsed feed.\n*/\nfunction getAtomFeed(feedRoot) {\n\tvar _a;\n\tconst childs = feedRoot.children;\n\tconst feed = {\n\t\ttype: \"atom\",\n\t\titems: getElementsByTagName(\"entry\", childs).map((item) => {\n\t\t\tvar _a;\n\t\t\tconst { children } = item;\n\t\t\tconst entry = { media: getMediaElements(children) };\n\t\t\taddConditionally(entry, \"id\", \"id\", children);\n\t\t\taddConditionally(entry, \"title\", \"title\", children);\n\t\t\tconst href = (_a = getOneElement(\"link\", children)) === null || _a === void 0 ? void 0 : _a.attribs[\"href\"];\n\t\t\tif (href) entry.link = href;\n\t\t\tconst description = fetch(\"summary\", children) || fetch(\"content\", children);\n\t\t\tif (description) entry.description = description;\n\t\t\tconst pubDate = fetch(\"updated\", children);\n\t\t\tif (pubDate) entry.pubDate = new Date(pubDate);\n\t\t\treturn entry;\n\t\t})\n\t};\n\taddConditionally(feed, \"id\", \"id\", childs);\n\taddConditionally(feed, \"title\", \"title\", childs);\n\tconst href = (_a = getOneElement(\"link\", childs)) === null || _a === void 0 ? void 0 : _a.attribs[\"href\"];\n\tif (href) feed.link = href;\n\taddConditionally(feed, \"description\", \"subtitle\", childs);\n\tconst updated = fetch(\"updated\", childs);\n\tif (updated) feed.updated = new Date(updated);\n\taddConditionally(feed, \"author\", \"email\", childs, true);\n\treturn feed;\n}\n/**\n* Parse a RSS feed.\n*\n* @param feedRoot The root of the feed.\n* @returns The parsed feed.\n*/\nfunction getRssFeed(feedRoot) {\n\tvar _a, _b;\n\tconst childs = (_b = (_a = getOneElement(\"channel\", feedRoot.children)) === null || _a === void 0 ? void 0 : _a.children) !== null && _b !== void 0 ? _b : [];\n\tconst feed = {\n\t\ttype: feedRoot.name.substr(0, 3),\n\t\tid: \"\",\n\t\titems: getElementsByTagName(\"item\", feedRoot.children).map((item) => {\n\t\t\tconst { children } = item;\n\t\t\tconst entry = { media: getMediaElements(children) };\n\t\t\taddConditionally(entry, \"id\", \"guid\", children);\n\t\t\taddConditionally(entry, \"title\", \"title\", children);\n\t\t\taddConditionally(entry, \"link\", \"link\", children);\n\t\t\taddConditionally(entry, \"description\", \"description\", children);\n\t\t\tconst pubDate = fetch(\"pubDate\", children) || fetch(\"dc:date\", children);\n\t\t\tif (pubDate) entry.pubDate = new Date(pubDate);\n\t\t\treturn entry;\n\t\t})\n\t};\n\taddConditionally(feed, \"title\", \"title\", childs);\n\taddConditionally(feed, \"link\", \"link\", childs);\n\taddConditionally(feed, \"description\", \"description\", childs);\n\tconst updated = fetch(\"lastBuildDate\", childs);\n\tif (updated) feed.updated = new Date(updated);\n\taddConditionally(feed, \"author\", \"managingEditor\", childs, true);\n\treturn feed;\n}\nconst MEDIA_KEYS_STRING = [\n\t\"url\",\n\t\"type\",\n\t\"lang\"\n];\nconst MEDIA_KEYS_INT = [\n\t\"fileSize\",\n\t\"bitrate\",\n\t\"framerate\",\n\t\"samplingrate\",\n\t\"channels\",\n\t\"duration\",\n\t\"height\",\n\t\"width\"\n];\n/**\n* Get all media elements of a feed item.\n*\n* @param where Nodes to search in.\n* @returns Media elements.\n*/\nfunction getMediaElements(where) {\n\treturn getElementsByTagName(\"media:content\", where).map((elem) => {\n\t\tconst { attribs } = elem;\n\t\tconst media = {\n\t\t\tmedium: attribs[\"medium\"],\n\t\t\tisDefault: !!attribs[\"isDefault\"]\n\t\t};\n\t\tfor (const attrib of MEDIA_KEYS_STRING) if (attribs[attrib]) media[attrib] = attribs[attrib];\n\t\tfor (const attrib of MEDIA_KEYS_INT) if (attribs[attrib]) media[attrib] = parseInt(attribs[attrib], 10);\n\t\tif (attribs[\"expression\"]) media.expression = attribs[\"expression\"];\n\t\treturn media;\n\t});\n}\n/**\n* Get one element by tag name.\n*\n* @param tagName Tag name to look for\n* @param node Node to search in\n* @returns The element or null\n*/\nfunction getOneElement(tagName, node) {\n\treturn getElementsByTagName(tagName, node, true, 1)[0];\n}\n/**\n* Get the text content of an element with a certain tag name.\n*\n* @param tagName Tag name to look for.\n* @param where Node to search in.\n* @param recurse Whether to recurse into child nodes.\n* @returns The text content of the element.\n*/\nfunction fetch(tagName, where, recurse = false) {\n\treturn textContent(getElementsByTagName(tagName, where, recurse, 1)).trim();\n}\n/**\n* Adds a property to an object if it has a value.\n*\n* @param obj Object to be extended\n* @param prop Property name\n* @param tagName Tag name that contains the conditionally added property\n* @param where Element to search for the property\n* @param recurse Whether to recurse into child nodes.\n*/\nfunction addConditionally(obj, prop, tagName, where, recurse = false) {\n\tconst val = fetch(tagName, where, recurse);\n\tif (val) obj[prop] = val;\n}\n/**\n* Checks if an element is a feed root node.\n*\n* @param value The name of the element to check.\n* @returns Whether an element is a feed root node.\n*/\nfunction isValidFeed(value) {\n\treturn value === \"rss\" || value === \"feed\" || value === \"rdf:RDF\";\n}\n//#endregion\n//#region node_modules/domutils/lib/esm/index.js\nvar esm_exports = /* @__PURE__ */ __exportAll({\n\tDocumentPosition: () => DocumentPosition,\n\tappend: () => append,\n\tappendChild: () => appendChild,\n\tcompareDocumentPosition: () => compareDocumentPosition,\n\texistsOne: () => existsOne$1,\n\tfilter: () => filter,\n\tfind: () => find,\n\tfindAll: () => findAll$1,\n\tfindOne: () => findOne$1,\n\tfindOneChild: () => findOneChild,\n\tgetAttributeValue: () => getAttributeValue$1,\n\tgetChildren: () => getChildren$1,\n\tgetElementById: () => getElementById,\n\tgetElements: () => getElements,\n\tgetElementsByTagName: () => getElementsByTagName,\n\tgetElementsByTagType: () => getElementsByTagType,\n\tgetFeed: () => getFeed,\n\tgetInnerHTML: () => getInnerHTML,\n\tgetName: () => getName$1,\n\tgetOuterHTML: () => getOuterHTML,\n\tgetParent: () => getParent$1,\n\tgetSiblings: () => getSiblings$1,\n\tgetText: () => getText$1,\n\thasAttrib: () => hasAttrib$1,\n\thasChildren: () => hasChildren,\n\tinnerText: () => innerText,\n\tisCDATA: () => isCDATA,\n\tisComment: () => isComment,\n\tisDocument: () => isDocument,\n\tisTag: () => isTag$1,\n\tisText: () => isText,\n\tnextElementSibling: () => nextElementSibling,\n\tprepend: () => prepend,\n\tprependChild: () => prependChild,\n\tprevElementSibling: () => prevElementSibling,\n\tremoveElement: () => removeElement,\n\tremoveSubsets: () => removeSubsets$1,\n\treplaceElement: () => replaceElement,\n\ttestElement: () => testElement,\n\ttextContent: () => textContent,\n\tuniqueSort: () => uniqueSort\n});\n//#endregion\n//#region node_modules/boolbase/index.js\nvar require_boolbase = /* @__PURE__ */ __commonJSMin(((exports, module) => {\n\tmodule.exports = {\n\t\ttrueFunc: function trueFunc() {\n\t\t\treturn true;\n\t\t},\n\t\tfalseFunc: function falseFunc() {\n\t\t\treturn false;\n\t\t}\n\t};\n}));\n//#endregion\n//#region node_modules/css-what/lib/commonjs/types.js\nvar require_types = /* @__PURE__ */ __commonJSMin(((exports) => {\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.AttributeAction = exports.IgnoreCaseMode = exports.SelectorType = void 0;\n\t(function(SelectorType) {\n\t\tSelectorType[\"Attribute\"] = \"attribute\";\n\t\tSelectorType[\"Pseudo\"] = \"pseudo\";\n\t\tSelectorType[\"PseudoElement\"] = \"pseudo-element\";\n\t\tSelectorType[\"Tag\"] = \"tag\";\n\t\tSelectorType[\"Universal\"] = \"universal\";\n\t\tSelectorType[\"Adjacent\"] = \"adjacent\";\n\t\tSelectorType[\"Child\"] = \"child\";\n\t\tSelectorType[\"Descendant\"] = \"descendant\";\n\t\tSelectorType[\"Parent\"] = \"parent\";\n\t\tSelectorType[\"Sibling\"] = \"sibling\";\n\t\tSelectorType[\"ColumnCombinator\"] = \"column-combinator\";\n\t})(exports.SelectorType || (exports.SelectorType = {}));\n\t/**\n\t* Modes for ignore case.\n\t*\n\t* This could be updated to an enum, and the object is\n\t* the current stand-in that will allow code to be updated\n\t* without big changes.\n\t*/\n\texports.IgnoreCaseMode = {\n\t\tUnknown: null,\n\t\tQuirksMode: \"quirks\",\n\t\tIgnoreCase: true,\n\t\tCaseSensitive: false\n\t};\n\t(function(AttributeAction) {\n\t\tAttributeAction[\"Any\"] = \"any\";\n\t\tAttributeAction[\"Element\"] = \"element\";\n\t\tAttributeAction[\"End\"] = \"end\";\n\t\tAttributeAction[\"Equals\"] = \"equals\";\n\t\tAttributeAction[\"Exists\"] = \"exists\";\n\t\tAttributeAction[\"Hyphen\"] = \"hyphen\";\n\t\tAttributeAction[\"Not\"] = \"not\";\n\t\tAttributeAction[\"Start\"] = \"start\";\n\t})(exports.AttributeAction || (exports.AttributeAction = {}));\n}));\n//#endregion\n//#region node_modules/css-what/lib/commonjs/parse.js\nvar require_parse = /* @__PURE__ */ __commonJSMin(((exports) => {\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.parse = exports.isTraversal = void 0;\n\tvar types_1 = require_types();\n\tvar reName = /^[^\\\\#]?(?:\\\\(?:[\\da-f]{1,6}\\s?|.)|[\\w\\-\\u00b0-\\uFFFF])+/;\n\tvar reEscape = /\\\\([\\da-f]{1,6}\\s?|(\\s)|.)/gi;\n\tvar actionTypes = /* @__PURE__ */ new Map([\n\t\t[126, types_1.AttributeAction.Element],\n\t\t[94, types_1.AttributeAction.Start],\n\t\t[36, types_1.AttributeAction.End],\n\t\t[42, types_1.AttributeAction.Any],\n\t\t[33, types_1.AttributeAction.Not],\n\t\t[124, types_1.AttributeAction.Hyphen]\n\t]);\n\tvar unpackPseudos = /* @__PURE__ */ new Set([\n\t\t\"has\",\n\t\t\"not\",\n\t\t\"matches\",\n\t\t\"is\",\n\t\t\"where\",\n\t\t\"host\",\n\t\t\"host-context\"\n\t]);\n\t/**\n\t* Checks whether a specific selector is a traversal.\n\t* This is useful eg. in swapping the order of elements that\n\t* are not traversals.\n\t*\n\t* @param selector Selector to check.\n\t*/\n\tfunction isTraversal(selector) {\n\t\tswitch (selector.type) {\n\t\t\tcase types_1.SelectorType.Adjacent:\n\t\t\tcase types_1.SelectorType.Child:\n\t\t\tcase types_1.SelectorType.Descendant:\n\t\t\tcase types_1.SelectorType.Parent:\n\t\t\tcase types_1.SelectorType.Sibling:\n\t\t\tcase types_1.SelectorType.ColumnCombinator: return true;\n\t\t\tdefault: return false;\n\t\t}\n\t}\n\texports.isTraversal = isTraversal;\n\tvar stripQuotesFromPseudos = /* @__PURE__ */ new Set([\"contains\", \"icontains\"]);\n\tfunction funescape(_, escaped, escapedWhitespace) {\n\t\tvar high = parseInt(escaped, 16) - 65536;\n\t\treturn high !== high || escapedWhitespace ? escaped : high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);\n\t}\n\tfunction unescapeCSS(str) {\n\t\treturn str.replace(reEscape, funescape);\n\t}\n\tfunction isQuote(c) {\n\t\treturn c === 39 || c === 34;\n\t}\n\tfunction isWhitespace(c) {\n\t\treturn c === 32 || c === 9 || c === 10 || c === 12 || c === 13;\n\t}\n\t/**\n\t* Parses `selector`, optionally with the passed `options`.\n\t*\n\t* @param selector Selector to parse.\n\t* @param options Options for parsing.\n\t* @returns Returns a two-dimensional array.\n\t* The first dimension represents selectors separated by commas (eg. `sub1, sub2`),\n\t* the second contains the relevant tokens for that selector.\n\t*/\n\tfunction parse(selector) {\n\t\tvar subselects = [];\n\t\tvar endIndex = parseSelector(subselects, \"\".concat(selector), 0);\n\t\tif (endIndex < selector.length) throw new Error(\"Unmatched selector: \".concat(selector.slice(endIndex)));\n\t\treturn subselects;\n\t}\n\texports.parse = parse;\n\tfunction parseSelector(subselects, selector, selectorIndex) {\n\t\tvar tokens = [];\n\t\tfunction getName(offset) {\n\t\t\tvar match = selector.slice(selectorIndex + offset).match(reName);\n\t\t\tif (!match) throw new Error(\"Expected name, found \".concat(selector.slice(selectorIndex)));\n\t\t\tvar name = match[0];\n\t\t\tselectorIndex += offset + name.length;\n\t\t\treturn unescapeCSS(name);\n\t\t}\n\t\tfunction stripWhitespace(offset) {\n\t\t\tselectorIndex += offset;\n\t\t\twhile (selectorIndex < selector.length && isWhitespace(selector.charCodeAt(selectorIndex))) selectorIndex++;\n\t\t}\n\t\tfunction readValueWithParenthesis() {\n\t\t\tselectorIndex += 1;\n\t\t\tvar start = selectorIndex;\n\t\t\tvar counter = 1;\n\t\t\tfor (; counter > 0 && selectorIndex < selector.length; selectorIndex++) if (selector.charCodeAt(selectorIndex) === 40 && !isEscaped(selectorIndex)) counter++;\n\t\t\telse if (selector.charCodeAt(selectorIndex) === 41 && !isEscaped(selectorIndex)) counter--;\n\t\t\tif (counter) throw new Error(\"Parenthesis not matched\");\n\t\t\treturn unescapeCSS(selector.slice(start, selectorIndex - 1));\n\t\t}\n\t\tfunction isEscaped(pos) {\n\t\t\tvar slashCount = 0;\n\t\t\twhile (selector.charCodeAt(--pos) === 92) slashCount++;\n\t\t\treturn (slashCount & 1) === 1;\n\t\t}\n\t\tfunction ensureNotTraversal() {\n\t\t\tif (tokens.length > 0 && isTraversal(tokens[tokens.length - 1])) throw new Error(\"Did not expect successive traversals.\");\n\t\t}\n\t\tfunction addTraversal(type) {\n\t\t\tif (tokens.length > 0 && tokens[tokens.length - 1].type === types_1.SelectorType.Descendant) {\n\t\t\t\ttokens[tokens.length - 1].type = type;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tensureNotTraversal();\n\t\t\ttokens.push({ type });\n\t\t}\n\t\tfunction addSpecialAttribute(name, action) {\n\t\t\ttokens.push({\n\t\t\t\ttype: types_1.SelectorType.Attribute,\n\t\t\t\tname,\n\t\t\t\taction,\n\t\t\t\tvalue: getName(1),\n\t\t\t\tnamespace: null,\n\t\t\t\tignoreCase: \"quirks\"\n\t\t\t});\n\t\t}\n\t\t/**\n\t\t* We have finished parsing the current part of the selector.\n\t\t*\n\t\t* Remove descendant tokens at the end if they exist,\n\t\t* and return the last index, so that parsing can be\n\t\t* picked up from here.\n\t\t*/\n\t\tfunction finalizeSubselector() {\n\t\t\tif (tokens.length && tokens[tokens.length - 1].type === types_1.SelectorType.Descendant) tokens.pop();\n\t\t\tif (tokens.length === 0) throw new Error(\"Empty sub-selector\");\n\t\t\tsubselects.push(tokens);\n\t\t}\n\t\tstripWhitespace(0);\n\t\tif (selector.length === selectorIndex) return selectorIndex;\n\t\tloop: while (selectorIndex < selector.length) {\n\t\t\tvar firstChar = selector.charCodeAt(selectorIndex);\n\t\t\tswitch (firstChar) {\n\t\t\t\tcase 32:\n\t\t\t\tcase 9:\n\t\t\t\tcase 10:\n\t\t\t\tcase 12:\n\t\t\t\tcase 13:\n\t\t\t\t\tif (tokens.length === 0 || tokens[0].type !== types_1.SelectorType.Descendant) {\n\t\t\t\t\t\tensureNotTraversal();\n\t\t\t\t\t\ttokens.push({ type: types_1.SelectorType.Descendant });\n\t\t\t\t\t}\n\t\t\t\t\tstripWhitespace(1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 62:\n\t\t\t\t\taddTraversal(types_1.SelectorType.Child);\n\t\t\t\t\tstripWhitespace(1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 60:\n\t\t\t\t\taddTraversal(types_1.SelectorType.Parent);\n\t\t\t\t\tstripWhitespace(1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 126:\n\t\t\t\t\taddTraversal(types_1.SelectorType.Sibling);\n\t\t\t\t\tstripWhitespace(1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 43:\n\t\t\t\t\taddTraversal(types_1.SelectorType.Adjacent);\n\t\t\t\t\tstripWhitespace(1);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 46:\n\t\t\t\t\taddSpecialAttribute(\"class\", types_1.AttributeAction.Element);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 35:\n\t\t\t\t\taddSpecialAttribute(\"id\", types_1.AttributeAction.Equals);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 91:\n\t\t\t\t\tstripWhitespace(1);\n\t\t\t\t\tvar name_1 = void 0;\n\t\t\t\t\tvar namespace = null;\n\t\t\t\t\tif (selector.charCodeAt(selectorIndex) === 124) name_1 = getName(1);\n\t\t\t\t\telse if (selector.startsWith(\"*|\", selectorIndex)) {\n\t\t\t\t\t\tnamespace = \"*\";\n\t\t\t\t\t\tname_1 = getName(2);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname_1 = getName(0);\n\t\t\t\t\t\tif (selector.charCodeAt(selectorIndex) === 124 && selector.charCodeAt(selectorIndex + 1) !== 61) {\n\t\t\t\t\t\t\tnamespace = name_1;\n\t\t\t\t\t\t\tname_1 = getName(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tstripWhitespace(0);\n\t\t\t\t\tvar action = types_1.AttributeAction.Exists;\n\t\t\t\t\tvar possibleAction = actionTypes.get(selector.charCodeAt(selectorIndex));\n\t\t\t\t\tif (possibleAction) {\n\t\t\t\t\t\taction = possibleAction;\n\t\t\t\t\t\tif (selector.charCodeAt(selectorIndex + 1) !== 61) throw new Error(\"Expected `=`\");\n\t\t\t\t\t\tstripWhitespace(2);\n\t\t\t\t\t} else if (selector.charCodeAt(selectorIndex) === 61) {\n\t\t\t\t\t\taction = types_1.AttributeAction.Equals;\n\t\t\t\t\t\tstripWhitespace(1);\n\t\t\t\t\t}\n\t\t\t\t\tvar value = \"\";\n\t\t\t\t\tvar ignoreCase = null;\n\t\t\t\t\tif (action !== \"exists\") {\n\t\t\t\t\t\tif (isQuote(selector.charCodeAt(selectorIndex))) {\n\t\t\t\t\t\t\tvar quote = selector.charCodeAt(selectorIndex);\n\t\t\t\t\t\t\tvar sectionEnd = selectorIndex + 1;\n\t\t\t\t\t\t\twhile (sectionEnd < selector.length && (selector.charCodeAt(sectionEnd) !== quote || isEscaped(sectionEnd))) sectionEnd += 1;\n\t\t\t\t\t\t\tif (selector.charCodeAt(sectionEnd) !== quote) throw new Error(\"Attribute value didn't end\");\n\t\t\t\t\t\t\tvalue = unescapeCSS(selector.slice(selectorIndex + 1, sectionEnd));\n\t\t\t\t\t\t\tselectorIndex = sectionEnd + 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar valueStart = selectorIndex;\n\t\t\t\t\t\t\twhile (selectorIndex < selector.length && (!isWhitespace(selector.charCodeAt(selectorIndex)) && selector.charCodeAt(selectorIndex) !== 93 || isEscaped(selectorIndex))) selectorIndex += 1;\n\t\t\t\t\t\t\tvalue = unescapeCSS(selector.slice(valueStart, selectorIndex));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstripWhitespace(0);\n\t\t\t\t\t\tvar forceIgnore = selector.charCodeAt(selectorIndex) | 32;\n\t\t\t\t\t\tif (forceIgnore === 115) {\n\t\t\t\t\t\t\tignoreCase = false;\n\t\t\t\t\t\t\tstripWhitespace(1);\n\t\t\t\t\t\t} else if (forceIgnore === 105) {\n\t\t\t\t\t\t\tignoreCase = true;\n\t\t\t\t\t\t\tstripWhitespace(1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (selector.charCodeAt(selectorIndex) !== 93) throw new Error(\"Attribute selector didn't terminate\");\n\t\t\t\t\tselectorIndex += 1;\n\t\t\t\t\tvar attributeSelector = {\n\t\t\t\t\t\ttype: types_1.SelectorType.Attribute,\n\t\t\t\t\t\tname: name_1,\n\t\t\t\t\t\taction,\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tnamespace,\n\t\t\t\t\t\tignoreCase\n\t\t\t\t\t};\n\t\t\t\t\ttokens.push(attributeSelector);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 58:\n\t\t\t\t\tif (selector.charCodeAt(selectorIndex + 1) === 58) {\n\t\t\t\t\t\ttokens.push({\n\t\t\t\t\t\t\ttype: types_1.SelectorType.PseudoElement,\n\t\t\t\t\t\t\tname: getName(2).toLowerCase(),\n\t\t\t\t\t\t\tdata: selector.charCodeAt(selectorIndex) === 40 ? readValueWithParenthesis() : null\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tvar name_2 = getName(1).toLowerCase();\n\t\t\t\t\tvar data = null;\n\t\t\t\t\tif (selector.charCodeAt(selectorIndex) === 40) if (unpackPseudos.has(name_2)) {\n\t\t\t\t\t\tif (isQuote(selector.charCodeAt(selectorIndex + 1))) throw new Error(\"Pseudo-selector \".concat(name_2, \" cannot be quoted\"));\n\t\t\t\t\t\tdata = [];\n\t\t\t\t\t\tselectorIndex = parseSelector(data, selector, selectorIndex + 1);\n\t\t\t\t\t\tif (selector.charCodeAt(selectorIndex) !== 41) throw new Error(\"Missing closing parenthesis in :\".concat(name_2, \" (\").concat(selector, \")\"));\n\t\t\t\t\t\tselectorIndex += 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdata = readValueWithParenthesis();\n\t\t\t\t\t\tif (stripQuotesFromPseudos.has(name_2)) {\n\t\t\t\t\t\t\tvar quot = data.charCodeAt(0);\n\t\t\t\t\t\t\tif (quot === data.charCodeAt(data.length - 1) && isQuote(quot)) data = data.slice(1, -1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata = unescapeCSS(data);\n\t\t\t\t\t}\n\t\t\t\t\ttokens.push({\n\t\t\t\t\t\ttype: types_1.SelectorType.Pseudo,\n\t\t\t\t\t\tname: name_2,\n\t\t\t\t\t\tdata\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\tcase 44:\n\t\t\t\t\tfinalizeSubselector();\n\t\t\t\t\ttokens = [];\n\t\t\t\t\tstripWhitespace(1);\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif (selector.startsWith(\"/*\", selectorIndex)) {\n\t\t\t\t\t\tvar endIndex = selector.indexOf(\"*/\", selectorIndex + 2);\n\t\t\t\t\t\tif (endIndex < 0) throw new Error(\"Comment was not terminated\");\n\t\t\t\t\t\tselectorIndex = endIndex + 2;\n\t\t\t\t\t\tif (tokens.length === 0) stripWhitespace(0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tvar namespace = null;\n\t\t\t\t\tvar name_3 = void 0;\n\t\t\t\t\tif (firstChar === 42) {\n\t\t\t\t\t\tselectorIndex += 1;\n\t\t\t\t\t\tname_3 = \"*\";\n\t\t\t\t\t} else if (firstChar === 124) {\n\t\t\t\t\t\tname_3 = \"\";\n\t\t\t\t\t\tif (selector.charCodeAt(selectorIndex + 1) === 124) {\n\t\t\t\t\t\t\taddTraversal(types_1.SelectorType.ColumnCombinator);\n\t\t\t\t\t\t\tstripWhitespace(2);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (reName.test(selector.slice(selectorIndex))) name_3 = getName(0);\n\t\t\t\t\telse break loop;\n\t\t\t\t\tif (selector.charCodeAt(selectorIndex) === 124 && selector.charCodeAt(selectorIndex + 1) !== 124) {\n\t\t\t\t\t\tnamespace = name_3;\n\t\t\t\t\t\tif (selector.charCodeAt(selectorIndex + 1) === 42) {\n\t\t\t\t\t\t\tname_3 = \"*\";\n\t\t\t\t\t\t\tselectorIndex += 2;\n\t\t\t\t\t\t} else name_3 = getName(1);\n\t\t\t\t\t}\n\t\t\t\t\ttokens.push(name_3 === \"*\" ? {\n\t\t\t\t\t\ttype: types_1.SelectorType.Universal,\n\t\t\t\t\t\tnamespace\n\t\t\t\t\t} : {\n\t\t\t\t\t\ttype: types_1.SelectorType.Tag,\n\t\t\t\t\t\tname: name_3,\n\t\t\t\t\t\tnamespace\n\t\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tfinalizeSubselector();\n\t\treturn selectorIndex;\n\t}\n}));\n//#endregion\n//#region node_modules/css-what/lib/commonjs/stringify.js\nvar require_stringify = /* @__PURE__ */ __commonJSMin(((exports) => {\n\tvar __spreadArray = exports && exports.__spreadArray || function(to, from, pack) {\n\t\tif (pack || arguments.length === 2) {\n\t\t\tfor (var i = 0, l = from.length, ar; i < l; i++) if (ar || !(i in from)) {\n\t\t\t\tif (!ar) ar = Array.prototype.slice.call(from, 0, i);\n\t\t\t\tar[i] = from[i];\n\t\t\t}\n\t\t}\n\t\treturn to.concat(ar || Array.prototype.slice.call(from));\n\t};\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.stringify = void 0;\n\tvar types_1 = require_types();\n\tvar attribValChars = [\"\\\\\", \"\\\"\"];\n\tvar pseudoValChars = __spreadArray(__spreadArray([], attribValChars, true), [\"(\", \")\"], false);\n\tvar charsToEscapeInAttributeValue = new Set(attribValChars.map(function(c) {\n\t\treturn c.charCodeAt(0);\n\t}));\n\tvar charsToEscapeInPseudoValue = new Set(pseudoValChars.map(function(c) {\n\t\treturn c.charCodeAt(0);\n\t}));\n\tvar charsToEscapeInName = new Set(__spreadArray(__spreadArray([], pseudoValChars, true), [\n\t\t\"~\",\n\t\t\"^\",\n\t\t\"$\",\n\t\t\"*\",\n\t\t\"+\",\n\t\t\"!\",\n\t\t\"|\",\n\t\t\":\",\n\t\t\"[\",\n\t\t\"]\",\n\t\t\" \",\n\t\t\".\"\n\t], false).map(function(c) {\n\t\treturn c.charCodeAt(0);\n\t}));\n\t/**\n\t* Turns `selector` back into a string.\n\t*\n\t* @param selector Selector to stringify.\n\t*/\n\tfunction stringify(selector) {\n\t\treturn selector.map(function(token) {\n\t\t\treturn token.map(stringifyToken).join(\"\");\n\t\t}).join(\", \");\n\t}\n\texports.stringify = stringify;\n\tfunction stringifyToken(token, index, arr) {\n\t\tswitch (token.type) {\n\t\t\tcase types_1.SelectorType.Child: return index === 0 ? \"> \" : \" > \";\n\t\t\tcase types_1.SelectorType.Parent: return index === 0 ? \"< \" : \" < \";\n\t\t\tcase types_1.SelectorType.Sibling: return index === 0 ? \"~ \" : \" ~ \";\n\t\t\tcase types_1.SelectorType.Adjacent: return index === 0 ? \"+ \" : \" + \";\n\t\t\tcase types_1.SelectorType.Descendant: return \" \";\n\t\t\tcase types_1.SelectorType.ColumnCombinator: return index === 0 ? \"|| \" : \" || \";\n\t\t\tcase types_1.SelectorType.Universal: return token.namespace === \"*\" && index + 1 < arr.length && \"name\" in arr[index + 1] ? \"\" : \"\".concat(getNamespace(token.namespace), \"*\");\n\t\t\tcase types_1.SelectorType.Tag: return getNamespacedName(token);\n\t\t\tcase types_1.SelectorType.PseudoElement: return \"::\".concat(escapeName(token.name, charsToEscapeInName)).concat(token.data === null ? \"\" : \"(\".concat(escapeName(token.data, charsToEscapeInPseudoValue), \")\"));\n\t\t\tcase types_1.SelectorType.Pseudo: return \":\".concat(escapeName(token.name, charsToEscapeInName)).concat(token.data === null ? \"\" : \"(\".concat(typeof token.data === \"string\" ? escapeName(token.data, charsToEscapeInPseudoValue) : stringify(token.data), \")\"));\n\t\t\tcase types_1.SelectorType.Attribute:\n\t\t\t\tif (token.name === \"id\" && token.action === types_1.AttributeAction.Equals && token.ignoreCase === \"quirks\" && !token.namespace) return \"#\".concat(escapeName(token.value, charsToEscapeInName));\n\t\t\t\tif (token.name === \"class\" && token.action === types_1.AttributeAction.Element && token.ignoreCase === \"quirks\" && !token.namespace) return \".\".concat(escapeName(token.value, charsToEscapeInName));\n\t\t\t\tvar name_1 = getNamespacedName(token);\n\t\t\t\tif (token.action === types_1.AttributeAction.Exists) return \"[\".concat(name_1, \"]\");\n\t\t\t\treturn \"[\".concat(name_1).concat(getActionValue(token.action), \"=\\\"\").concat(escapeName(token.value, charsToEscapeInAttributeValue), \"\\\"\").concat(token.ignoreCase === null ? \"\" : token.ignoreCase ? \" i\" : \" s\", \"]\");\n\t\t}\n\t}\n\tfunction getActionValue(action) {\n\t\tswitch (action) {\n\t\t\tcase types_1.AttributeAction.Equals: return \"\";\n\t\t\tcase types_1.AttributeAction.Element: return \"~\";\n\t\t\tcase types_1.AttributeAction.Start: return \"^\";\n\t\t\tcase types_1.AttributeAction.End: return \"$\";\n\t\t\tcase types_1.AttributeAction.Any: return \"*\";\n\t\t\tcase types_1.AttributeAction.Not: return \"!\";\n\t\t\tcase types_1.AttributeAction.Hyphen: return \"|\";\n\t\t\tcase types_1.AttributeAction.Exists: throw new Error(\"Shouldn't be here\");\n\t\t}\n\t}\n\tfunction getNamespacedName(token) {\n\t\treturn \"\".concat(getNamespace(token.namespace)).concat(escapeName(token.name, charsToEscapeInName));\n\t}\n\tfunction getNamespace(namespace) {\n\t\treturn namespace !== null ? \"\".concat(namespace === \"*\" ? \"*\" : escapeName(namespace, charsToEscapeInName), \"|\") : \"\";\n\t}\n\tfunction escapeName(str, charsToEscape) {\n\t\tvar lastIdx = 0;\n\t\tvar ret = \"\";\n\t\tfor (var i = 0; i < str.length; i++) if (charsToEscape.has(str.charCodeAt(i))) {\n\t\t\tret += \"\".concat(str.slice(lastIdx, i), \"\\\\\").concat(str.charAt(i));\n\t\t\tlastIdx = i + 1;\n\t\t}\n\t\treturn ret.length > 0 ? ret + str.slice(lastIdx) : str;\n\t}\n}));\n//#endregion\n//#region node_modules/css-what/lib/commonjs/index.js\nvar require_commonjs = /* @__PURE__ */ __commonJSMin(((exports) => {\n\tvar __createBinding = exports && exports.__createBinding || (Object.create ? (function(o, m, k, k2) {\n\t\tif (k2 === void 0) k2 = k;\n\t\tvar desc = Object.getOwnPropertyDescriptor(m, k);\n\t\tif (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) desc = {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn m[k];\n\t\t\t}\n\t\t};\n\t\tObject.defineProperty(o, k2, desc);\n\t}) : (function(o, m, k, k2) {\n\t\tif (k2 === void 0) k2 = k;\n\t\to[k2] = m[k];\n\t}));\n\tvar __exportStar = exports && exports.__exportStar || function(m, exports$1) {\n\t\tfor (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports$1, p)) __createBinding(exports$1, m, p);\n\t};\n\tObject.defineProperty(exports, \"__esModule\", { value: true });\n\texports.stringify = exports.parse = exports.isTraversal = void 0;\n\t__exportStar(require_types(), exports);\n\tvar parse_1 = require_parse();\n\tObject.defineProperty(exports, \"isTraversal\", {\n\t\tenumerable: true,\n\t\tget: function() {\n\t\t\treturn parse_1.isTraversal;\n\t\t}\n\t});\n\tObject.defineProperty(exports, \"parse\", {\n\t\tenumerable: true,\n\t\tget: function() {\n\t\t\treturn parse_1.parse;\n\t\t}\n\t});\n\tvar stringify_1 = require_stringify();\n\tObject.defineProperty(exports, \"stringify\", {\n\t\tenumerable: true,\n\t\tget: function() {\n\t\t\treturn stringify_1.stringify;\n\t\t}\n\t});\n}));\n//#endregion\n//#region node_modules/css-select/lib/esm/sort.js\nvar import_boolbase = /* @__PURE__ */ __toESM(require_boolbase(), 1);\nvar import_commonjs = require_commonjs();\nconst procedure = /* @__PURE__ */ new Map([\n\t[import_commonjs.SelectorType.Universal, 50],\n\t[import_commonjs.SelectorType.Tag, 30],\n\t[import_commonjs.SelectorType.Attribute, 1],\n\t[import_commonjs.SelectorType.Pseudo, 0]\n]);\nfunction isTraversal(token) {\n\treturn !procedure.has(token.type);\n}\nconst attributes = /* @__PURE__ */ new Map([\n\t[import_commonjs.AttributeAction.Exists, 10],\n\t[import_commonjs.AttributeAction.Equals, 8],\n\t[import_commonjs.AttributeAction.Not, 7],\n\t[import_commonjs.AttributeAction.Start, 6],\n\t[import_commonjs.AttributeAction.End, 6],\n\t[import_commonjs.AttributeAction.Any, 5]\n]);\n/**\n* Sort the parts of the passed selector,\n* as there is potential for optimization\n* (some types of selectors are faster than others)\n*\n* @param arr Selector to sort\n*/\nfunction sortByProcedure(arr) {\n\tconst procs = arr.map(getProcedure);\n\tfor (let i = 1; i < arr.length; i++) {\n\t\tconst procNew = procs[i];\n\t\tif (procNew < 0) continue;\n\t\tfor (let j = i - 1; j >= 0 && procNew < procs[j]; j--) {\n\t\t\tconst token = arr[j + 1];\n\t\t\tarr[j + 1] = arr[j];\n\t\t\tarr[j] = token;\n\t\t\tprocs[j + 1] = procs[j];\n\t\t\tprocs[j] = procNew;\n\t\t}\n\t}\n}\nfunction getProcedure(token) {\n\tvar _a, _b;\n\tlet proc = (_a = procedure.get(token.type)) !== null && _a !== void 0 ? _a : -1;\n\tif (token.type === import_commonjs.SelectorType.Attribute) {\n\t\tproc = (_b = attributes.get(token.action)) !== null && _b !== void 0 ? _b : 4;\n\t\tif (token.action === import_commonjs.AttributeAction.Equals && token.name === \"id\") proc = 9;\n\t\tif (token.ignoreCase) proc >>= 1;\n\t} else if (token.type === import_commonjs.SelectorType.Pseudo) if (!token.data) proc = 3;\n\telse if (token.name === \"has\" || token.name === \"contains\") proc = 0;\n\telse if (Array.isArray(token.data)) {\n\t\tproc = Math.min(...token.data.map((d) => Math.min(...d.map(getProcedure))));\n\t\tif (proc < 0) proc = 0;\n\t} else proc = 2;\n\treturn proc;\n}\n//#endregion\n//#region node_modules/css-select/lib/esm/attributes.js\n/**\n* All reserved characters in a regex, used for escaping.\n*\n* Taken from XRegExp, (c) 2007-2020 Steven Levithan under the MIT license\n* https://github.com/slevithan/xregexp/blob/95eeebeb8fac8754d54eafe2b4743661ac1cf028/src/xregexp.js#L794\n*/\nconst reChars = /[-[\\]{}()*+?.,\\\\^$|#\\s]/g;\nfunction escapeRegex(value) {\n\treturn value.replace(reChars, \"\\\\$&\");\n}\n/**\n* Attributes that are case-insensitive in HTML.\n*\n* @private\n* @see https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors\n*/\nconst caseInsensitiveAttributes = /* @__PURE__ */ new Set([\n\t\"accept\",\n\t\"accept-charset\",\n\t\"align\",\n\t\"alink\",\n\t\"axis\",\n\t\"bgcolor\",\n\t\"charset\",\n\t\"checked\",\n\t\"clear\",\n\t\"codetype\",\n\t\"color\",\n\t\"compact\",\n\t\"declare\",\n\t\"defer\",\n\t\"dir\",\n\t\"direction\",\n\t\"disabled\",\n\t\"enctype\",\n\t\"face\",\n\t\"frame\",\n\t\"hreflang\",\n\t\"http-equiv\",\n\t\"lang\",\n\t\"language\",\n\t\"link\",\n\t\"media\",\n\t\"method\",\n\t\"multiple\",\n\t\"nohref\",\n\t\"noresize\",\n\t\"noshade\",\n\t\"nowrap\",\n\t\"readonly\",\n\t\"rel\",\n\t\"rev\",\n\t\"rules\",\n\t\"scope\",\n\t\"scrolling\",\n\t\"selected\",\n\t\"shape\",\n\t\"target\",\n\t\"text\",\n\t\"type\",\n\t\"valign\",\n\t\"valuetype\",\n\t\"vlink\"\n]);\nfunction shouldIgnoreCase(selector, options) {\n\treturn typeof selector.ignoreCase === \"boolean\" ? selector.ignoreCase : selector.ignoreCase === \"quirks\" ? !!options.quirksMode : !options.xmlMode && caseInsensitiveAttributes.has(selector.name);\n}\n/**\n* Attribute selectors\n*/\nconst attributeRules = {\n\tequals(next, data, options) {\n\t\tconst { adapter } = options;\n\t\tconst { name } = data;\n\t\tlet { value } = data;\n\t\tif (shouldIgnoreCase(data, options)) {\n\t\t\tvalue = value.toLowerCase();\n\t\t\treturn (elem) => {\n\t\t\t\tconst attr = adapter.getAttributeValue(elem, name);\n\t\t\t\treturn attr != null && attr.length === value.length && attr.toLowerCase() === value && next(elem);\n\t\t\t};\n\t\t}\n\t\treturn (elem) => adapter.getAttributeValue(elem, name) === value && next(elem);\n\t},\n\thyphen(next, data, options) {\n\t\tconst { adapter } = options;\n\t\tconst { name } = data;\n\t\tlet { value } = data;\n\t\tconst len = value.length;\n\t\tif (shouldIgnoreCase(data, options)) {\n\t\t\tvalue = value.toLowerCase();\n\t\t\treturn function hyphenIC(elem) {\n\t\t\t\tconst attr = adapter.getAttributeValue(elem, name);\n\t\t\t\treturn attr != null && (attr.length === len || attr.charAt(len) === \"-\") && attr.substr(0, len).toLowerCase() === value && next(elem);\n\t\t\t};\n\t\t}\n\t\treturn function hyphen(elem) {\n\t\t\tconst attr = adapter.getAttributeValue(elem, name);\n\t\t\treturn attr != null && (attr.length === len || attr.charAt(len) === \"-\") && attr.substr(0, len) === value && next(elem);\n\t\t};\n\t},\n\telement(next, data, options) {\n\t\tconst { adapter } = options;\n\t\tconst { name, value } = data;\n\t\tif (/\\s/.test(value)) return import_boolbase.default.falseFunc;\n\t\tconst regex = new RegExp(`(?:^|\\\\s)${escapeRegex(value)}(?:$|\\\\s)`, shouldIgnoreCase(data, options) ? \"i\" : \"\");\n\t\treturn function element(elem) {\n\t\t\tconst attr = adapter.getAttributeValue(elem, name);\n\t\t\treturn attr != null && attr.length >= value.length && regex.test(attr) && next(elem);\n\t\t};\n\t},\n\texists(next, { name }, { adapter }) {\n\t\treturn (elem) => adapter.hasAttrib(elem, name) && next(elem);\n\t},\n\tstart(next, data, options) {\n\t\tconst { adapter } = options;\n\t\tconst { name } = data;\n\t\tlet { value } = data;\n\t\tconst len = value.length;\n\t\tif (len === 0) return import_boolbase.default.falseFunc;\n\t\tif (shouldIgnoreCase(data, options)) {\n\t\t\tvalue = value.toLowerCase();\n\t\t\treturn (elem) => {\n\t\t\t\tconst attr = adapter.getAttributeValue(elem, name);\n\t\t\t\treturn attr != null && attr.length >= len && attr.substr(0, len).toLowerCase() === value && next(elem);\n\t\t\t};\n\t\t}\n\t\treturn (elem) => {\n\t\t\tvar _a;\n\t\t\treturn !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.startsWith(value)) && next(elem);\n\t\t};\n\t},\n\tend(next, data, options) {\n\t\tconst { adapter } = options;\n\t\tconst { name } = data;\n\t\tlet { value } = data;\n\t\tconst len = -value.length;\n\t\tif (len === 0) return import_boolbase.default.falseFunc;\n\t\tif (shouldIgnoreCase(data, options)) {\n\t\t\tvalue = value.toLowerCase();\n\t\t\treturn (elem) => {\n\t\t\t\tvar _a;\n\t\t\t\treturn ((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.substr(len).toLowerCase()) === value && next(elem);\n\t\t\t};\n\t\t}\n\t\treturn (elem) => {\n\t\t\tvar _a;\n\t\t\treturn !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.endsWith(value)) && next(elem);\n\t\t};\n\t},\n\tany(next, data, options) {\n\t\tconst { adapter } = options;\n\t\tconst { name, value } = data;\n\t\tif (value === \"\") return import_boolbase.default.falseFunc;\n\t\tif (shouldIgnoreCase(data, options)) {\n\t\t\tconst regex = new RegExp(escapeRegex(value), \"i\");\n\t\t\treturn function anyIC(elem) {\n\t\t\t\tconst attr = adapter.getAttributeValue(elem, name);\n\t\t\t\treturn attr != null && attr.length >= value.length && regex.test(attr) && next(elem);\n\t\t\t};\n\t\t}\n\t\treturn (elem) => {\n\t\t\tvar _a;\n\t\t\treturn !!((_a = adapter.getAttributeValue(elem, name)) === null || _a === void 0 ? void 0 : _a.includes(value)) && next(elem);\n\t\t};\n\t},\n\tnot(next, data, options) {\n\t\tconst { adapter } = options;\n\t\tconst { name } = data;\n\t\tlet { value } = data;\n\t\tif (value === \"\") return (elem) => !!adapter.getAttributeValue(elem, name) && next(elem);\n\t\telse if (shouldIgnoreCase(data, options)) {\n\t\t\tvalue = value.toLowerCase();\n\t\t\treturn (elem) => {\n\t\t\t\tconst attr = adapter.getAttributeValue(elem, name);\n\t\t\t\treturn (attr == null || attr.length !== value.length || attr.toLowerCase() !== value) && next(elem);\n\t\t\t};\n\t\t}\n\t\treturn (elem) => adapter.getAttributeValue(elem, name) !== value && next(elem);\n\t}\n};\n//#endregion\n//#region node_modules/nth-check/lib/esm/parse.js\nconst whitespace = /* @__PURE__ */ new Set([\n\t9,\n\t10,\n\t12,\n\t13,\n\t32\n]);\nconst ZERO = \"0\".charCodeAt(0);\nconst NINE = \"9\".charCodeAt(0);\n/**\n* Parses an expression.\n*\n* @throws An `Error` if parsing fails.\n* @returns An array containing the integer step size and the integer offset of the nth rule.\n* @example nthCheck.parse(\"2n+3\"); // returns [2, 3]\n*/\nfunction parse$4(formula) {\n\tformula = formula.trim().toLowerCase();\n\tif (formula === \"even\") return [2, 0];\n\telse if (formula === \"odd\") return [2, 1];\n\tlet idx = 0;\n\tlet a = 0;\n\tlet sign = readSign();\n\tlet number = readNumber();\n\tif (idx < formula.length && formula.charAt(idx) === \"n\") {\n\t\tidx++;\n\t\ta = sign * (number !== null && number !== void 0 ? number : 1);\n\t\tskipWhitespace();\n\t\tif (idx < formula.length) {\n\t\t\tsign = readSign();\n\t\t\tskipWhitespace();\n\t\t\tnumber = readNumber();\n\t\t} else sign = number = 0;\n\t}\n\tif (number === null || idx < formula.length) throw new Error(`n-th rule couldn't be parsed ('${formula}')`);\n\treturn [a, sign * number];\n\tfunction readSign() {\n\t\tif (formula.charAt(idx) === \"-\") {\n\t\t\tidx++;\n\t\t\treturn -1;\n\t\t}\n\t\tif (formula.charAt(idx) === \"+\") idx++;\n\t\treturn 1;\n\t}\n\tfunction readNumber() {\n\t\tconst start = idx;\n\t\tlet value = 0;\n\t\twhile (idx < formula.length && formula.charCodeAt(idx) >= ZERO && formula.charCodeAt(idx) <= NINE) {\n\t\t\tvalue = value * 10 + (formula.charCodeAt(idx) - ZERO);\n\t\t\tidx++;\n\t\t}\n\t\treturn idx === start ? null : value;\n\t}\n\tfunction skipWhitespace() {\n\t\twhile (idx < formula.length && whitespace.has(formula.charCodeAt(idx))) idx++;\n\t}\n}\n//#endregion\n//#region node_modules/nth-check/lib/esm/compile.js\n/**\n* Returns a function that checks if an elements index matches the given rule\n* highly optimized to return the fastest solution.\n*\n* @param parsed A tuple [a, b], as returned by `parse`.\n* @returns A highly optimized function that returns whether an index matches the nth-check.\n* @example\n*\n* ```js\n* const check = nthCheck.compile([2, 3]);\n*\n* check(0); // `false`\n* check(1); // `false`\n* check(2); // `true`\n* check(3); // `false`\n* check(4); // `true`\n* check(5); // `false`\n* check(6); // `true`\n* ```\n*/\nfunction compile$2(parsed) {\n\tconst a = parsed[0];\n\tconst b = parsed[1] - 1;\n\tif (b < 0 && a <= 0) return import_boolbase.default.falseFunc;\n\tif (a === -1) return (index) => index <= b;\n\tif (a === 0) return (index) => index === b;\n\tif (a === 1) return b < 0 ? import_boolbase.default.trueFunc : (index) => index >= b;\n\tconst absA = Math.abs(a);\n\tconst bMod = (b % absA + absA) % absA;\n\treturn a > 1 ? (index) => index >= b && index % absA === bMod : (index) => index <= b && index % absA === bMod;\n}\n//#endregion\n//#region node_modules/nth-check/lib/esm/index.js\n/**\n* Parses and compiles a formula to a highly optimized function.\n* Combination of {@link parse} and {@link compile}.\n*\n* If the formula doesn't match any elements,\n* it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`.\n* Otherwise, a function accepting an _index_ is returned, which returns\n* whether or not the passed _index_ matches the formula.\n*\n* Note: The nth-rule starts counting at `1`, the returned function at `0`.\n*\n* @param formula The formula to compile.\n* @example\n* const check = nthCheck(\"2n+3\");\n*\n* check(0); // `false`\n* check(1); // `false`\n* check(2); // `true`\n* check(3); // `false`\n* check(4); // `true`\n* check(5); // `false`\n* check(6); // `true`\n*/\nfunction nthCheck(formula) {\n\treturn compile$2(parse$4(formula));\n}\n//#endregion\n//#region node_modules/css-select/lib/esm/pseudo-selectors/filters.js\nfunction getChildFunc(next, adapter) {\n\treturn (elem) => {\n\t\tconst parent = adapter.getParent(elem);\n\t\treturn parent != null && adapter.isTag(parent) && next(elem);\n\t};\n}\nconst filters = {\n\tcontains(next, text, { adapter }) {\n\t\treturn function contains(elem) {\n\t\t\treturn next(elem) && adapter.getText(elem).includes(text);\n\t\t};\n\t},\n\ticontains(next, text, { adapter }) {\n\t\tconst itext = text.toLowerCase();\n\t\treturn function icontains(elem) {\n\t\t\treturn next(elem) && adapter.getText(elem).toLowerCase().includes(itext);\n\t\t};\n\t},\n\t\"nth-child\"(next, rule, { adapter, equals }) {\n\t\tconst func = nthCheck(rule);\n\t\tif (func === import_boolbase.default.falseFunc) return import_boolbase.default.falseFunc;\n\t\tif (func === import_boolbase.default.trueFunc) return getChildFunc(next, adapter);\n\t\treturn function nthChild(elem) {\n\t\t\tconst siblings = adapter.getSiblings(elem);\n\t\t\tlet pos = 0;\n\t\t\tfor (let i = 0; i < siblings.length; i++) {\n\t\t\t\tif (equals(elem, siblings[i])) break;\n\t\t\t\tif (adapter.isTag(siblings[i])) pos++;\n\t\t\t}\n\t\t\treturn func(pos) && next(elem);\n\t\t};\n\t},\n\t\"nth-last-child\"(next, rule, { adapter, equals }) {\n\t\tconst func = nthCheck(rule);\n\t\tif (func === import_boolbase.default.falseFunc) return import_boolbase.default.falseFunc;\n\t\tif (func === import_boolbase.default.trueFunc) return getChildFunc(next, adapter);\n\t\treturn function nthLastChild(elem) {\n\t\t\tconst siblings = adapter.getSiblings(elem);\n\t\t\tlet pos = 0;\n\t\t\tfor (let i = siblings.length - 1; i >= 0; i--) {\n\t\t\t\tif (equals(elem, siblings[i])) break;\n\t\t\t\tif (adapter.isTag(siblings[i])) pos++;\n\t\t\t}\n\t\t\treturn func(pos) && next(elem);\n\t\t};\n\t},\n\t\"nth-of-type\"(next, rule, { adapter, equals }) {\n\t\tconst func = nthCheck(rule);\n\t\tif (func === import_boolbase.default.falseFunc) return import_boolbase.default.falseFunc;\n\t\tif (func === import_boolbase.default.trueFunc) return getChildFunc(next, adapter);\n\t\treturn function nthOfType(elem) {\n\t\t\tconst siblings = adapter.getSiblings(elem);\n\t\t\tlet pos = 0;\n\t\t\tfor (let i = 0; i < siblings.length; i++) {\n\t\t\t\tconst currentSibling = siblings[i];\n\t\t\t\tif (equals(elem, currentSibling)) break;\n\t\t\t\tif (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === adapter.getName(elem)) pos++;\n\t\t\t}\n\t\t\treturn func(pos) && next(elem);\n\t\t};\n\t},\n\t\"nth-last-of-type\"(next, rule, { adapter, equals }) {\n\t\tconst func = nthCheck(rule);\n\t\tif (func === import_boolbase.default.falseFunc) return import_boolbase.default.falseFunc;\n\t\tif (func === import_boolbase.default.trueFunc) return getChildFunc(next, adapter);\n\t\treturn function nthLastOfType(elem) {\n\t\t\tconst siblings = adapter.getSiblings(elem);\n\t\t\tlet pos = 0;\n\t\t\tfor (let i = siblings.length - 1; i >= 0; i--) {\n\t\t\t\tconst currentSibling = siblings[i];\n\t\t\t\tif (equals(elem, currentSibling)) break;\n\t\t\t\tif (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === adapter.getName(elem)) pos++;\n\t\t\t}\n\t\t\treturn func(pos) && next(elem);\n\t\t};\n\t},\n\troot(next, _rule, { adapter }) {\n\t\treturn (elem) => {\n\t\t\tconst parent = adapter.getParent(elem);\n\t\t\treturn (parent == null || !adapter.isTag(parent)) && next(elem);\n\t\t};\n\t},\n\tscope(next, rule, options, context) {\n\t\tconst { equals } = options;\n\t\tif (!context || context.length === 0) return filters[\"root\"](next, rule, options);\n\t\tif (context.length === 1) return (elem) => equals(context[0], elem) && next(elem);\n\t\treturn (elem) => context.includes(elem) && next(elem);\n\t},\n\thover: dynamicStatePseudo(\"isHovered\"),\n\tvisited: dynamicStatePseudo(\"isVisited\"),\n\tactive: dynamicStatePseudo(\"isActive\")\n};\n/**\n* Dynamic state pseudos. These depend on optional Adapter methods.\n*\n* @param name The name of the adapter method to call.\n* @returns Pseudo for the `filters` object.\n*/\nfunction dynamicStatePseudo(name) {\n\treturn function dynamicPseudo(next, _rule, { adapter }) {\n\t\tconst func = adapter[name];\n\t\tif (typeof func !== \"function\") return import_boolbase.default.falseFunc;\n\t\treturn function active(elem) {\n\t\t\treturn func(elem) && next(elem);\n\t\t};\n\t};\n}\n//#endregion\n//#region node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js\nconst pseudos = {\n\tempty(elem, { adapter }) {\n\t\treturn !adapter.getChildren(elem).some((elem) => adapter.isTag(elem) || adapter.getText(elem) !== \"\");\n\t},\n\t\"first-child\"(elem, { adapter, equals }) {\n\t\tif (adapter.prevElementSibling) return adapter.prevElementSibling(elem) == null;\n\t\tconst firstChild = adapter.getSiblings(elem).find((elem) => adapter.isTag(elem));\n\t\treturn firstChild != null && equals(elem, firstChild);\n\t},\n\t\"last-child\"(elem, { adapter, equals }) {\n\t\tconst siblings = adapter.getSiblings(elem);\n\t\tfor (let i = siblings.length - 1; i >= 0; i--) {\n\t\t\tif (equals(elem, siblings[i])) return true;\n\t\t\tif (adapter.isTag(siblings[i])) break;\n\t\t}\n\t\treturn false;\n\t},\n\t\"first-of-type\"(elem, { adapter, equals }) {\n\t\tconst siblings = adapter.getSiblings(elem);\n\t\tconst elemName = adapter.getName(elem);\n\t\tfor (let i = 0; i < siblings.length; i++) {\n\t\t\tconst currentSibling = siblings[i];\n\t\t\tif (equals(elem, currentSibling)) return true;\n\t\t\tif (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === elemName) break;\n\t\t}\n\t\treturn false;\n\t},\n\t\"last-of-type\"(elem, { adapter, equals }) {\n\t\tconst siblings = adapter.getSiblings(elem);\n\t\tconst elemName = adapter.getName(elem);\n\t\tfor (let i = siblings.length - 1; i >= 0; i--) {\n\t\t\tconst currentSibling = siblings[i];\n\t\t\tif (equals(elem, currentSibling)) return true;\n\t\t\tif (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === elemName) break;\n\t\t}\n\t\treturn false;\n\t},\n\t\"only-of-type\"(elem, { adapter, equals }) {\n\t\tconst elemName = adapter.getName(elem);\n\t\treturn adapter.getSiblings(elem).every((sibling) => equals(elem, sibling) || !adapter.isTag(sibling) || adapter.getName(sibling) !== elemName);\n\t},\n\t\"only-child\"(elem, { adapter, equals }) {\n\t\treturn adapter.getSiblings(elem).every((sibling) => equals(elem, sibling) || !adapter.isTag(sibling));\n\t}\n};\nfunction verifyPseudoArgs(func, name, subselect, argIndex) {\n\tif (subselect === null) {\n\t\tif (func.length > argIndex) throw new Error(`Pseudo-class :${name} requires an argument`);\n\t} else if (func.length === argIndex) throw new Error(`Pseudo-class :${name} doesn't have any arguments`);\n}\n//#endregion\n//#region node_modules/css-select/lib/esm/pseudo-selectors/aliases.js\n/**\n* Aliases are pseudos that are expressed as selectors.\n*/\nconst aliases = {\n\t\"any-link\": \":is(a, area, link)[href]\",\n\tlink: \":any-link:not(:visited)\",\n\tdisabled: `:is(\n :is(button, input, select, textarea, optgroup, option)[disabled],\n optgroup[disabled] > option,\n fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)\n )`,\n\tenabled: \":not(:disabled)\",\n\tchecked: \":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)\",\n\trequired: \":is(input, select, textarea)[required]\",\n\toptional: \":is(input, select, textarea):not([required])\",\n\tselected: \"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)\",\n\tcheckbox: \"[type=checkbox]\",\n\tfile: \"[type=file]\",\n\tpassword: \"[type=password]\",\n\tradio: \"[type=radio]\",\n\treset: \"[type=reset]\",\n\timage: \"[type=image]\",\n\tsubmit: \"[type=submit]\",\n\tparent: \":not(:empty)\",\n\theader: \":is(h1, h2, h3, h4, h5, h6)\",\n\tbutton: \":is(button, input[type=button])\",\n\tinput: \":is(input, textarea, select, button)\",\n\ttext: \"input:is(:not([type!='']), [type=text])\"\n};\n//#endregion\n//#region node_modules/css-select/lib/esm/pseudo-selectors/subselects.js\n/** Used as a placeholder for :has. Will be replaced with the actual element. */\nconst PLACEHOLDER_ELEMENT = {};\nfunction ensureIsTag(next, adapter) {\n\tif (next === import_boolbase.default.falseFunc) return import_boolbase.default.falseFunc;\n\treturn (elem) => adapter.isTag(elem) && next(elem);\n}\nfunction getNextSiblings(elem, adapter) {\n\tconst siblings = adapter.getSiblings(elem);\n\tif (siblings.length <= 1) return [];\n\tconst elemIndex = siblings.indexOf(elem);\n\tif (elemIndex < 0 || elemIndex === siblings.length - 1) return [];\n\treturn siblings.slice(elemIndex + 1).filter(adapter.isTag);\n}\nfunction copyOptions(options) {\n\treturn {\n\t\txmlMode: !!options.xmlMode,\n\t\tlowerCaseAttributeNames: !!options.lowerCaseAttributeNames,\n\t\tlowerCaseTags: !!options.lowerCaseTags,\n\t\tquirksMode: !!options.quirksMode,\n\t\tcacheResults: !!options.cacheResults,\n\t\tpseudos: options.pseudos,\n\t\tadapter: options.adapter,\n\t\tequals: options.equals\n\t};\n}\nconst is$1 = (next, token, options, context, compileToken) => {\n\tconst func = compileToken(token, copyOptions(options), context);\n\treturn func === import_boolbase.default.trueFunc ? next : func === import_boolbase.default.falseFunc ? import_boolbase.default.falseFunc : (elem) => func(elem) && next(elem);\n};\nconst subselects = {\n\tis: is$1,\n\t/**\n\t* `:matches` and `:where` are aliases for `:is`.\n\t*/\n\tmatches: is$1,\n\twhere: is$1,\n\tnot(next, token, options, context, compileToken) {\n\t\tconst func = compileToken(token, copyOptions(options), context);\n\t\treturn func === import_boolbase.default.falseFunc ? next : func === import_boolbase.default.trueFunc ? import_boolbase.default.falseFunc : (elem) => !func(elem) && next(elem);\n\t},\n\thas(next, subselect, options, _context, compileToken) {\n\t\tconst { adapter } = options;\n\t\tconst opts = copyOptions(options);\n\t\topts.relativeSelector = true;\n\t\tconst context = subselect.some((s) => s.some(isTraversal)) ? [PLACEHOLDER_ELEMENT] : void 0;\n\t\tconst compiled = compileToken(subselect, opts, context);\n\t\tif (compiled === import_boolbase.default.falseFunc) return import_boolbase.default.falseFunc;\n\t\tconst hasElement = ensureIsTag(compiled, adapter);\n\t\tif (context && compiled !== import_boolbase.default.trueFunc) {\n\t\t\tconst { shouldTestNextSiblings = false } = compiled;\n\t\t\treturn (elem) => {\n\t\t\t\tif (!next(elem)) return false;\n\t\t\t\tcontext[0] = elem;\n\t\t\t\tconst childs = adapter.getChildren(elem);\n\t\t\t\tconst nextElements = shouldTestNextSiblings ? [...childs, ...getNextSiblings(elem, adapter)] : childs;\n\t\t\t\treturn adapter.existsOne(hasElement, nextElements);\n\t\t\t};\n\t\t}\n\t\treturn (elem) => next(elem) && adapter.existsOne(hasElement, adapter.getChildren(elem));\n\t}\n};\n//#endregion\n//#region node_modules/css-select/lib/esm/pseudo-selectors/index.js\nfunction compilePseudoSelector(next, selector, options, context, compileToken) {\n\tvar _a;\n\tconst { name, data } = selector;\n\tif (Array.isArray(data)) {\n\t\tif (!(name in subselects)) throw new Error(`Unknown pseudo-class :${name}(${data})`);\n\t\treturn subselects[name](next, data, options, context, compileToken);\n\t}\n\tconst userPseudo = (_a = options.pseudos) === null || _a === void 0 ? void 0 : _a[name];\n\tconst stringPseudo = typeof userPseudo === \"string\" ? userPseudo : aliases[name];\n\tif (typeof stringPseudo === \"string\") {\n\t\tif (data != null) throw new Error(`Pseudo ${name} doesn't have any arguments`);\n\t\tconst alias = (0, import_commonjs.parse)(stringPseudo);\n\t\treturn subselects[\"is\"](next, alias, options, context, compileToken);\n\t}\n\tif (typeof userPseudo === \"function\") {\n\t\tverifyPseudoArgs(userPseudo, name, data, 1);\n\t\treturn (elem) => userPseudo(elem, data) && next(elem);\n\t}\n\tif (name in filters) return filters[name](next, data, options, context);\n\tif (name in pseudos) {\n\t\tconst pseudo = pseudos[name];\n\t\tverifyPseudoArgs(pseudo, name, data, 2);\n\t\treturn (elem) => pseudo(elem, options, data) && next(elem);\n\t}\n\tthrow new Error(`Unknown pseudo-class :${name}`);\n}\n//#endregion\n//#region node_modules/css-select/lib/esm/general.js\nfunction getElementParent(node, adapter) {\n\tconst parent = adapter.getParent(node);\n\tif (parent && adapter.isTag(parent)) return parent;\n\treturn null;\n}\nfunction compileGeneralSelector(next, selector, options, context, compileToken) {\n\tconst { adapter, equals } = options;\n\tswitch (selector.type) {\n\t\tcase import_commonjs.SelectorType.PseudoElement: throw new Error(\"Pseudo-elements are not supported by css-select\");\n\t\tcase import_commonjs.SelectorType.ColumnCombinator: throw new Error(\"Column combinators are not yet supported by css-select\");\n\t\tcase import_commonjs.SelectorType.Attribute:\n\t\t\tif (selector.namespace != null) throw new Error(\"Namespaced attributes are not yet supported by css-select\");\n\t\t\tif (!options.xmlMode || options.lowerCaseAttributeNames) selector.name = selector.name.toLowerCase();\n\t\t\treturn attributeRules[selector.action](next, selector, options);\n\t\tcase import_commonjs.SelectorType.Pseudo: return compilePseudoSelector(next, selector, options, context, compileToken);\n\t\tcase import_commonjs.SelectorType.Tag: {\n\t\t\tif (selector.namespace != null) throw new Error(\"Namespaced tag names are not yet supported by css-select\");\n\t\t\tlet { name } = selector;\n\t\t\tif (!options.xmlMode || options.lowerCaseTags) name = name.toLowerCase();\n\t\t\treturn function tag(elem) {\n\t\t\t\treturn adapter.getName(elem) === name && next(elem);\n\t\t\t};\n\t\t}\n\t\tcase import_commonjs.SelectorType.Descendant: {\n\t\t\tif (options.cacheResults === false || typeof WeakSet === \"undefined\") return function descendant(elem) {\n\t\t\t\tlet current = elem;\n\t\t\t\twhile (current = getElementParent(current, adapter)) if (next(current)) return true;\n\t\t\t\treturn false;\n\t\t\t};\n\t\t\tconst isFalseCache = /* @__PURE__ */ new WeakSet();\n\t\t\treturn function cachedDescendant(elem) {\n\t\t\t\tlet current = elem;\n\t\t\t\twhile (current = getElementParent(current, adapter)) if (!isFalseCache.has(current)) {\n\t\t\t\t\tif (adapter.isTag(current) && next(current)) return true;\n\t\t\t\t\tisFalseCache.add(current);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\t\tcase \"_flexibleDescendant\": return function flexibleDescendant(elem) {\n\t\t\tlet current = elem;\n\t\t\tdo\n\t\t\t\tif (next(current)) return true;\n\t\t\twhile (current = getElementParent(current, adapter));\n\t\t\treturn false;\n\t\t};\n\t\tcase import_commonjs.SelectorType.Parent: return function parent(elem) {\n\t\t\treturn adapter.getChildren(elem).some((elem) => adapter.isTag(elem) && next(elem));\n\t\t};\n\t\tcase import_commonjs.SelectorType.Child: return function child(elem) {\n\t\t\tconst parent = adapter.getParent(elem);\n\t\t\treturn parent != null && adapter.isTag(parent) && next(parent);\n\t\t};\n\t\tcase import_commonjs.SelectorType.Sibling: return function sibling(elem) {\n\t\t\tconst siblings = adapter.getSiblings(elem);\n\t\t\tfor (let i = 0; i < siblings.length; i++) {\n\t\t\t\tconst currentSibling = siblings[i];\n\t\t\t\tif (equals(elem, currentSibling)) break;\n\t\t\t\tif (adapter.isTag(currentSibling) && next(currentSibling)) return true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t\tcase import_commonjs.SelectorType.Adjacent:\n\t\t\tif (adapter.prevElementSibling) return function adjacent(elem) {\n\t\t\t\tconst previous = adapter.prevElementSibling(elem);\n\t\t\t\treturn previous != null && next(previous);\n\t\t\t};\n\t\t\treturn function adjacent(elem) {\n\t\t\t\tconst siblings = adapter.getSiblings(elem);\n\t\t\t\tlet lastElement;\n\t\t\t\tfor (let i = 0; i < siblings.length; i++) {\n\t\t\t\t\tconst currentSibling = siblings[i];\n\t\t\t\t\tif (equals(elem, currentSibling)) break;\n\t\t\t\t\tif (adapter.isTag(currentSibling)) lastElement = currentSibling;\n\t\t\t\t}\n\t\t\t\treturn !!lastElement && next(lastElement);\n\t\t\t};\n\t\tcase import_commonjs.SelectorType.Universal:\n\t\t\tif (selector.namespace != null && selector.namespace !== \"*\") throw new Error(\"Namespaced universal selectors are not yet supported by css-select\");\n\t\t\treturn next;\n\t}\n}\n//#endregion\n//#region node_modules/css-select/lib/esm/compile.js\n/**\n* Compiles a selector to an executable function.\n*\n* @param selector Selector to compile.\n* @param options Compilation options.\n* @param context Optional context for the selector.\n*/\nfunction compile$1(selector, options, context) {\n\treturn ensureIsTag(compileUnsafe(selector, options, context), options.adapter);\n}\nfunction compileUnsafe(selector, options, context) {\n\treturn compileToken(typeof selector === \"string\" ? (0, import_commonjs.parse)(selector) : selector, options, context);\n}\nfunction includesScopePseudo(t) {\n\treturn t.type === import_commonjs.SelectorType.Pseudo && (t.name === \"scope\" || Array.isArray(t.data) && t.data.some((data) => data.some(includesScopePseudo)));\n}\nconst DESCENDANT_TOKEN = { type: import_commonjs.SelectorType.Descendant };\nconst FLEXIBLE_DESCENDANT_TOKEN = { type: \"_flexibleDescendant\" };\nconst SCOPE_TOKEN = {\n\ttype: import_commonjs.SelectorType.Pseudo,\n\tname: \"scope\",\n\tdata: null\n};\nfunction absolutize(token, { adapter }, context) {\n\tconst hasContext = !!(context === null || context === void 0 ? void 0 : context.every((e) => {\n\t\tconst parent = adapter.isTag(e) && adapter.getParent(e);\n\t\treturn e === PLACEHOLDER_ELEMENT || parent && adapter.isTag(parent);\n\t}));\n\tfor (const t of token) {\n\t\tif (t.length > 0 && isTraversal(t[0]) && t[0].type !== import_commonjs.SelectorType.Descendant) {} else if (hasContext && !t.some(includesScopePseudo)) t.unshift(DESCENDANT_TOKEN);\n\t\telse continue;\n\t\tt.unshift(SCOPE_TOKEN);\n\t}\n}\nfunction compileToken(token, options, context) {\n\tvar _a;\n\ttoken.forEach(sortByProcedure);\n\tcontext = (_a = options.context) !== null && _a !== void 0 ? _a : context;\n\tconst isArrayContext = Array.isArray(context);\n\tconst finalContext = context && (Array.isArray(context) ? context : [context]);\n\tif (options.relativeSelector !== false) absolutize(token, options, finalContext);\n\telse if (token.some((t) => t.length > 0 && isTraversal(t[0]))) throw new Error(\"Relative selectors are not allowed when the `relativeSelector` option is disabled\");\n\tlet shouldTestNextSiblings = false;\n\tconst query = token.map((rules) => {\n\t\tif (rules.length >= 2) {\n\t\t\tconst [first, second] = rules;\n\t\t\tif (first.type !== import_commonjs.SelectorType.Pseudo || first.name !== \"scope\") {} else if (isArrayContext && second.type === import_commonjs.SelectorType.Descendant) rules[1] = FLEXIBLE_DESCENDANT_TOKEN;\n\t\t\telse if (second.type === import_commonjs.SelectorType.Adjacent || second.type === import_commonjs.SelectorType.Sibling) shouldTestNextSiblings = true;\n\t\t}\n\t\treturn compileRules(rules, options, finalContext);\n\t}).reduce(reduceRules, import_boolbase.default.falseFunc);\n\tquery.shouldTestNextSiblings = shouldTestNextSiblings;\n\treturn query;\n}\nfunction compileRules(rules, options, context) {\n\tvar _a;\n\treturn rules.reduce((previous, rule) => previous === import_boolbase.default.falseFunc ? import_boolbase.default.falseFunc : compileGeneralSelector(previous, rule, options, context, compileToken), (_a = options.rootFunc) !== null && _a !== void 0 ? _a : import_boolbase.default.trueFunc);\n}\nfunction reduceRules(a, b) {\n\tif (b === import_boolbase.default.falseFunc || a === import_boolbase.default.trueFunc) return a;\n\tif (a === import_boolbase.default.falseFunc || b === import_boolbase.default.trueFunc) return b;\n\treturn function combine(elem) {\n\t\treturn a(elem) || b(elem);\n\t};\n}\n//#endregion\n//#region node_modules/css-select/lib/esm/index.js\nconst defaultEquals = (a, b) => a === b;\nconst defaultOptions = {\n\tadapter: esm_exports,\n\tequals: defaultEquals\n};\nfunction convertOptionFormats(options) {\n\tvar _a, _b, _c, _d;\n\tconst opts = options !== null && options !== void 0 ? options : defaultOptions;\n\t(_a = opts.adapter) !== null && _a !== void 0 || (opts.adapter = esm_exports);\n\t(_b = opts.equals) !== null && _b !== void 0 || (opts.equals = (_d = (_c = opts.adapter) === null || _c === void 0 ? void 0 : _c.equals) !== null && _d !== void 0 ? _d : defaultEquals);\n\treturn opts;\n}\nfunction getSelectorFunc(searchFunc) {\n\treturn function select(query, elements, options) {\n\t\tconst opts = convertOptionFormats(options);\n\t\tif (typeof query !== \"function\") query = compileUnsafe(query, opts, elements);\n\t\tconst filteredElements = prepareContext(elements, opts.adapter, query.shouldTestNextSiblings);\n\t\treturn searchFunc(query, filteredElements, opts);\n\t};\n}\nfunction prepareContext(elems, adapter, shouldTestNextSiblings = false) {\n\tif (shouldTestNextSiblings) elems = appendNextSiblings(elems, adapter);\n\treturn Array.isArray(elems) ? adapter.removeSubsets(elems) : adapter.getChildren(elems);\n}\nfunction appendNextSiblings(elem, adapter) {\n\tconst elems = Array.isArray(elem) ? elem.slice(0) : [elem];\n\tconst elemsLength = elems.length;\n\tfor (let i = 0; i < elemsLength; i++) {\n\t\tconst nextSiblings = getNextSiblings(elems[i], adapter);\n\t\telems.push(...nextSiblings);\n\t}\n\treturn elems;\n}\n/**\n* @template Node The generic Node type for the DOM adapter being used.\n* @template ElementNode The Node type for elements for the DOM adapter being used.\n* @param elems Elements to query. If it is an element, its children will be queried..\n* @param query can be either a CSS selector string or a compiled query function.\n* @param [options] options for querying the document.\n* @see compile for supported selector queries.\n* @returns All matching elements.\n*\n*/\nconst selectAll = getSelectorFunc((query, elems, options) => query === import_boolbase.default.falseFunc || !elems || elems.length === 0 ? [] : options.adapter.findAll(query, elems));\n/**\n* @template Node The generic Node type for the DOM adapter being used.\n* @template ElementNode The Node type for elements for the DOM adapter being used.\n* @param elems Elements to query. If it is an element, its children will be queried..\n* @param query can be either a CSS selector string or a compiled query function.\n* @param [options] options for querying the document.\n* @see compile for supported selector queries.\n* @returns the first match, or null if there was no match.\n*/\nconst selectOne = getSelectorFunc((query, elems, options) => query === import_boolbase.default.falseFunc || !elems || elems.length === 0 ? null : options.adapter.findOne(query, elems));\n/**\n* Tests whether or not an element is matched by query.\n*\n* @template Node The generic Node type for the DOM adapter being used.\n* @template ElementNode The Node type for elements for the DOM adapter being used.\n* @param elem The element to test if it matches the query.\n* @param query can be either a CSS selector string or a compiled query function.\n* @param [options] options for querying the document.\n* @see compile for supported selector queries.\n* @returns\n*/\nfunction is(elem, query, options) {\n\tconst opts = convertOptionFormats(options);\n\treturn (typeof query === \"function\" ? query : compile$1(query, opts))(elem);\n}\n//#endregion\n//#region src/back.ts\nfunction arr_back(arr) {\n\treturn arr[arr.length - 1];\n}\n//#endregion\n//#region src/matcher.ts\nfunction isTag(node) {\n\treturn node && node.nodeType === 1;\n}\nfunction getAttributeValue(elem, name) {\n\treturn isTag(elem) ? elem.getAttribute(name) : void 0;\n}\nfunction getName(elem) {\n\treturn (elem && elem.rawTagName || \"\").toLowerCase();\n}\nfunction getChildren(node) {\n\treturn node && node.childNodes;\n}\nfunction getParent(node) {\n\treturn node ? node.parentNode : null;\n}\nfunction getText(node) {\n\treturn node.text;\n}\nfunction removeSubsets(nodes) {\n\tlet idx = nodes.length;\n\tlet node;\n\tlet ancestor;\n\tlet replace;\n\twhile (--idx > -1) {\n\t\tnode = ancestor = nodes[idx];\n\t\tnodes[idx] = null;\n\t\treplace = true;\n\t\twhile (ancestor) {\n\t\t\tif (nodes.indexOf(ancestor) > -1) {\n\t\t\t\treplace = false;\n\t\t\t\tnodes.splice(idx, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tancestor = getParent(ancestor);\n\t\t}\n\t\tif (replace) nodes[idx] = node;\n\t}\n\treturn nodes;\n}\nfunction existsOne(test, elems) {\n\treturn elems.some((elem) => {\n\t\treturn isTag(elem) ? test(elem) || existsOne(test, getChildren(elem)) : false;\n\t});\n}\nfunction getSiblings(node) {\n\tconst parent = getParent(node);\n\treturn parent ? getChildren(parent) : [];\n}\nfunction hasAttrib(elem, name) {\n\treturn getAttributeValue(elem, name) !== void 0;\n}\nfunction findOne(test, elems) {\n\tlet elem = null;\n\tfor (let i = 0, l = elems === null || elems === void 0 ? void 0 : elems.length; i < l && !elem; i++) {\n\t\tconst el = elems[i];\n\t\tif (test(el)) elem = el;\n\t\telse {\n\t\t\tconst childs = getChildren(el);\n\t\t\tif (childs && childs.length > 0) elem = findOne(test, childs);\n\t\t}\n\t}\n\treturn elem;\n}\nfunction findAll(test, nodes) {\n\tlet result = [];\n\tfor (let i = 0, j = nodes.length; i < j; i++) {\n\t\tconst node = nodes[i];\n\t\tif (!isTag(node)) continue;\n\t\tif (test(node)) result.push(node);\n\t\tconst childs = getChildren(node);\n\t\tif (childs) result = result.concat(findAll(test, childs));\n\t}\n\treturn result;\n}\nconst matcher = {\n\tisTag,\n\tgetAttributeValue,\n\tgetName,\n\tgetChildren,\n\tgetParent,\n\tgetText,\n\tremoveSubsets,\n\texistsOne,\n\tgetSiblings,\n\thasAttrib,\n\tfindOne,\n\tfindAll\n};\n//#endregion\n//#region src/void-tag.ts\nvar VoidTag = class {\n\tconstructor(addClosingSlash = false, tags) {\n\t\tthis.addClosingSlash = addClosingSlash;\n\t\tif (Array.isArray(tags)) this.voidTags = tags.reduce((set, tag) => {\n\t\t\treturn set.add(tag.toLowerCase()).add(tag.toUpperCase()).add(tag);\n\t\t}, /* @__PURE__ */ new Set());\n\t\telse this.voidTags = [\n\t\t\t\"area\",\n\t\t\t\"base\",\n\t\t\t\"br\",\n\t\t\t\"col\",\n\t\t\t\"embed\",\n\t\t\t\"hr\",\n\t\t\t\"img\",\n\t\t\t\"input\",\n\t\t\t\"link\",\n\t\t\t\"meta\",\n\t\t\t\"param\",\n\t\t\t\"source\",\n\t\t\t\"track\",\n\t\t\t\"wbr\"\n\t\t].reduce((set, tag) => {\n\t\t\treturn set.add(tag.toLowerCase()).add(tag.toUpperCase()).add(tag);\n\t\t}, /* @__PURE__ */ new Set());\n\t}\n\tformatNode(tag, attrs, innerHTML) {\n\t\tconst addClosingSlash = this.addClosingSlash;\n\t\tconst closingSpace = addClosingSlash && attrs && !attrs.endsWith(\" \") ? \" \" : \"\";\n\t\tconst closingSlash = addClosingSlash ? `${closingSpace}/` : \"\";\n\t\treturn this.isVoidElement(tag.toLowerCase()) ? `<${tag}${attrs}${closingSlash}>` : `<${tag}${attrs}>${innerHTML}</${tag}>`;\n\t}\n\tisVoidElement(tag) {\n\t\treturn this.voidTags.has(tag);\n\t}\n};\n//#endregion\n//#region src/nodes/text.ts\n/**\n* TextNode to contain a text element in DOM tree.\n* @param {string} value [description]\n*/\nvar TextNode = class TextNode extends Node {\n\tclone() {\n\t\treturn new TextNode(this._rawText, null);\n\t}\n\tconstructor(rawText, parentNode = null, range) {\n\t\tsuper(parentNode, range);\n\t\tthis.nodeType = 3;\n\t\tthis.rawTagName = \"\";\n\t\tthis._rawText = rawText;\n\t}\n\tget rawText() {\n\t\treturn this._rawText;\n\t}\n\t/**\n\t* Set rawText and invalidate trimmed caches\n\t*/\n\tset rawText(text) {\n\t\tthis._rawText = text;\n\t\tthis._trimmedRawText = void 0;\n\t\tthis._trimmedText = void 0;\n\t}\n\t/**\n\t* Returns raw text with all whitespace trimmed except single leading/trailing non-breaking space\n\t*/\n\tget trimmedRawText() {\n\t\tif (this._trimmedRawText !== void 0) return this._trimmedRawText;\n\t\tthis._trimmedRawText = trimText(this.rawText);\n\t\treturn this._trimmedRawText;\n\t}\n\t/**\n\t* Returns text with all whitespace trimmed except single leading/trailing non-breaking space\n\t*/\n\tget trimmedText() {\n\t\tif (this._trimmedText !== void 0) return this._trimmedText;\n\t\tthis._trimmedText = trimText(this.text);\n\t\treturn this._trimmedText;\n\t}\n\t/**\n\t* Get unescaped text value of current node and its children.\n\t* @return {string} text content\n\t*/\n\tget text() {\n\t\treturn decodeHTML(this.rawText);\n\t}\n\t/**\n\t* Detect if the node contains only white space.\n\t* @return {boolean}\n\t*/\n\tget isWhitespace() {\n\t\treturn /^(\\s| )*$/.test(this.rawText);\n\t}\n\ttoString() {\n\t\treturn this.rawText;\n\t}\n};\n/**\n* Trim whitespace except single leading/trailing non-breaking space\n*/\nfunction trimText(text) {\n\tlet i = 0;\n\tlet startPos;\n\tlet endPos;\n\twhile (i >= 0 && i < text.length) {\n\t\tif (/\\S/.test(text[i])) if (startPos === void 0) {\n\t\t\tstartPos = i;\n\t\t\ti = text.length;\n\t\t} else {\n\t\t\tendPos = i;\n\t\t\ti = void 0;\n\t\t}\n\t\tif (startPos === void 0) i++;\n\t\telse i--;\n\t}\n\tif (startPos === void 0) startPos = 0;\n\tif (endPos === void 0) endPos = text.length - 1;\n\tconst hasLeadingSpace = startPos > 0 && /[^\\S\\r\\n]/.test(text[startPos - 1]);\n\tconst hasTrailingSpace = endPos < text.length - 1 && /[^\\S\\r\\n]/.test(text[endPos + 1]);\n\treturn (hasLeadingSpace ? \" \" : \"\") + text.slice(startPos, endPos + 1) + (hasTrailingSpace ? \" \" : \"\");\n}\n//#endregion\n//#region src/nodes/html.ts\nfunction decode(val) {\n\treturn decodeHTML(val);\n}\nconst Htags = [\n\t\"h1\",\n\t\"h2\",\n\t\"h3\",\n\t\"h4\",\n\t\"h5\",\n\t\"h6\",\n\t\"header\",\n\t\"hgroup\"\n];\nconst Dtags = [\n\t\"details\",\n\t\"dialog\",\n\t\"dd\",\n\t\"div\",\n\t\"dt\"\n];\nconst Ftags = [\n\t\"fieldset\",\n\t\"figcaption\",\n\t\"figure\",\n\t\"footer\",\n\t\"form\"\n];\nconst tableTags = [\n\t\"table\",\n\t\"td\",\n\t\"tr\"\n];\nconst htmlTags = [\n\t\"address\",\n\t\"article\",\n\t\"aside\",\n\t\"blockquote\",\n\t\"br\",\n\t\"hr\",\n\t\"li\",\n\t\"main\",\n\t\"nav\",\n\t\"ol\",\n\t\"p\",\n\t\"pre\",\n\t\"section\",\n\t\"ul\"\n];\nconst kBlockElements = /* @__PURE__ */ new Set();\nfunction addToKBlockElement(...args) {\n\tconst addToSet = (array) => {\n\t\tfor (let index = 0; index < array.length; index++) {\n\t\t\tconst element = array[index];\n\t\t\tkBlockElements.add(element);\n\t\t\tkBlockElements.add(element.toUpperCase());\n\t\t}\n\t};\n\tfor (const arg of args) addToSet(arg);\n}\naddToKBlockElement(Htags, Dtags, Ftags, tableTags, htmlTags);\nvar DOMTokenList = class {\n\t_validate(c) {\n\t\tif (/\\s/.test(c)) throw new Error(`DOMException in DOMTokenList.add: The token '${c}' contains HTML space characters, which are not valid in tokens.`);\n\t}\n\tconstructor(valuesInit = [], afterUpdate = () => null) {\n\t\tthis._set = new Set(valuesInit);\n\t\tthis._afterUpdate = afterUpdate;\n\t}\n\tadd(c) {\n\t\tthis._validate(c);\n\t\tthis._set.add(c);\n\t\tthis._afterUpdate(this);\n\t}\n\treplace(c1, c2) {\n\t\tthis._validate(c2);\n\t\tthis._set.delete(c1);\n\t\tthis._set.add(c2);\n\t\tthis._afterUpdate(this);\n\t}\n\tremove(c) {\n\t\tthis._set.delete(c) && this._afterUpdate(this);\n\t}\n\ttoggle(c) {\n\t\tthis._validate(c);\n\t\tif (this._set.has(c)) this._set.delete(c);\n\t\telse this._set.add(c);\n\t\tthis._afterUpdate(this);\n\t}\n\tcontains(c) {\n\t\treturn this._set.has(c);\n\t}\n\tget length() {\n\t\treturn this._set.size;\n\t}\n\tvalues() {\n\t\treturn this._set.values();\n\t}\n\tget value() {\n\t\treturn Array.from(this._set.values());\n\t}\n\ttoString() {\n\t\treturn Array.from(this._set.values()).join(\" \");\n\t}\n};\n/**\n* HTMLElement, which contains a set of children.\n*\n* Note: this is a minimalist implementation, no complete tree\n* structure provided (no parentNode, nextSibling,\n* previousSibling etc).\n* @class HTMLElement\n* @extends {Node}\n*/\nvar HTMLElement = class HTMLElement extends Node {\n\t/**\n\t* Quote attribute values\n\t* @param attr attribute value\n\t* @returns {string} quoted value\n\t*/\n\tquoteAttribute(attr) {\n\t\tif (attr == null) return \"null\";\n\t\treturn `\"${attr.replace(/\"/g, \""\")}\"`;\n\t}\n\t/**\n\t* Creates an instance of HTMLElement.\n\t* @param keyAttrs\tid and class attribute\n\t* @param [rawAttrs]\tattributes in string\n\t*\n\t* @memberof HTMLElement\n\t*/\n\tconstructor(tagName, keyAttrs, rawAttrs = \"\", parentNode = null, range, voidTag = new VoidTag(), _parseOptions = {}) {\n\t\tsuper(parentNode, range);\n\t\tthis.rawAttrs = rawAttrs;\n\t\tthis.voidTag = voidTag;\n\t\tthis.nodeType = 1;\n\t\tthis.rawTagName = tagName;\n\t\tthis.rawAttrs = rawAttrs || \"\";\n\t\tthis._id = keyAttrs.id || \"\";\n\t\tthis.childNodes = [];\n\t\tthis._parseOptions = _parseOptions;\n\t\tthis.classList = new DOMTokenList(keyAttrs.class ? keyAttrs.class.split(/\\s+/) : [], (classList) => this.setAttribute(\"class\", classList.toString()));\n\t\tif (keyAttrs.id) {\n\t\t\tif (!rawAttrs) this.rawAttrs = `id=\"${keyAttrs.id}\"`;\n\t\t}\n\t\tif (keyAttrs.class) {\n\t\t\tif (!rawAttrs) {\n\t\t\t\tconst cls = `class=\"${this.classList.toString()}\"`;\n\t\t\t\tif (this.rawAttrs) this.rawAttrs += ` ${cls}`;\n\t\t\t\telse this.rawAttrs = cls;\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t* Remove Child element from childNodes array\n\t* @param {HTMLElement} node node to remove\n\t*/\n\tremoveChild(node) {\n\t\tthis.childNodes = this.childNodes.filter((child) => {\n\t\t\treturn child !== node;\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Exchanges given child with new child\n\t* @param {HTMLElement} oldNode node to exchange\n\t* @param {HTMLElement} newNode new node\n\t*/\n\texchangeChild(oldNode, newNode) {\n\t\tconst children = this.childNodes;\n\t\tthis.childNodes = children.map((child) => {\n\t\t\tif (child === oldNode) return newNode;\n\t\t\treturn child;\n\t\t});\n\t\treturn this;\n\t}\n\tget tagName() {\n\t\treturn this.rawTagName ? this.rawTagName.toUpperCase() : this.rawTagName;\n\t}\n\tset tagName(newname) {\n\t\tthis.rawTagName = newname.toLowerCase();\n\t}\n\tget localName() {\n\t\treturn this.rawTagName.toLowerCase();\n\t}\n\tget isVoidElement() {\n\t\treturn this.voidTag.isVoidElement(this.localName);\n\t}\n\tget id() {\n\t\treturn this._id;\n\t}\n\tset id(newid) {\n\t\tthis.setAttribute(\"id\", newid);\n\t}\n\t/**\n\t* Get escpaed (as-it) text value of current node and its children.\n\t* @return {string} text content\n\t*/\n\tget rawText() {\n\t\tif (/^br$/i.test(this.rawTagName)) return \"\\n\";\n\t\treturn this.childNodes.reduce((pre, cur) => {\n\t\t\treturn pre += cur.rawText;\n\t\t}, \"\");\n\t}\n\tget textContent() {\n\t\treturn decode(this.rawText);\n\t}\n\tset textContent(val) {\n\t\tconst content = [new TextNode(val, this)];\n\t\tthis.childNodes = content;\n\t}\n\t/**\n\t* Get unescaped text value of current node and its children.\n\t* @return {string} text content\n\t*/\n\tget text() {\n\t\treturn decode(this.rawText);\n\t}\n\t/**\n\t* Get structured Text (with '\\n' etc.)\n\t* @return {string} structured text\n\t*/\n\tget structuredText() {\n\t\tlet currentBlock = [];\n\t\tconst blocks = [currentBlock];\n\t\tfunction dfs(node) {\n\t\t\tif (node.nodeType === 1) if (kBlockElements.has(node.rawTagName)) {\n\t\t\t\tif (currentBlock.length > 0) blocks.push(currentBlock = []);\n\t\t\t\tnode.childNodes.forEach(dfs);\n\t\t\t\tif (currentBlock.length > 0) blocks.push(currentBlock = []);\n\t\t\t} else node.childNodes.forEach(dfs);\n\t\t\telse if (node.nodeType === 3) if (node.isWhitespace) currentBlock.prependWhitespace = true;\n\t\t\telse {\n\t\t\t\tlet text = node.trimmedText;\n\t\t\t\tif (currentBlock.prependWhitespace) {\n\t\t\t\t\ttext = ` ${text}`;\n\t\t\t\t\tcurrentBlock.prependWhitespace = false;\n\t\t\t\t}\n\t\t\t\tcurrentBlock.push(text);\n\t\t\t}\n\t\t}\n\t\tdfs(this);\n\t\treturn blocks.map((block) => {\n\t\t\treturn block.join(\"\").replace(/\\s{2,}/g, \" \");\n\t\t}).join(\"\\n\").replace(/\\s+$/, \"\");\n\t}\n\ttoString() {\n\t\tconst tag = this.rawTagName;\n\t\tif (tag) {\n\t\t\tconst attrs = this.rawAttrs ? ` ${this.rawAttrs}` : \"\";\n\t\t\treturn this.voidTag.formatNode(tag, attrs, this.innerHTML);\n\t\t}\n\t\treturn this.innerHTML;\n\t}\n\tget innerHTML() {\n\t\treturn this.childNodes.map((child) => {\n\t\t\treturn child.toString();\n\t\t}).join(\"\");\n\t}\n\tset innerHTML(content) {\n\t\tconst r = parse$1(content, this._parseOptions);\n\t\tconst nodes = r.childNodes.length ? r.childNodes : [new TextNode(content, this)];\n\t\tresetParent(nodes, this);\n\t\tresetParent(this.childNodes, null);\n\t\tthis.childNodes = nodes;\n\t}\n\tset_content(content, options = {}) {\n\t\tif (content instanceof Node) content = [content];\n\t\telse if (typeof content == \"string\") {\n\t\t\toptions = _objectSpread2(_objectSpread2({}, this._parseOptions), options);\n\t\t\tconst r = parse$1(content, options);\n\t\t\tcontent = r.childNodes.length ? r.childNodes : [new TextNode(r.innerHTML, this)];\n\t\t}\n\t\tresetParent(this.childNodes, null);\n\t\tresetParent(content, this);\n\t\tthis.childNodes = content;\n\t\treturn this;\n\t}\n\treplaceWith(...nodes) {\n\t\tconst parent = this.parentNode;\n\t\tconst content = nodes.map((node) => {\n\t\t\tif (node instanceof Node) return [node];\n\t\t\telse if (typeof node == \"string\") {\n\t\t\t\tconst r = parse$1(node, this._parseOptions);\n\t\t\t\treturn r.childNodes.length ? r.childNodes : [new TextNode(node, this)];\n\t\t\t}\n\t\t\treturn [];\n\t\t}).flat();\n\t\tconst idx = parent.childNodes.findIndex((child) => {\n\t\t\treturn child === this;\n\t\t});\n\t\tresetParent([this], null);\n\t\tparent.childNodes = [\n\t\t\t...parent.childNodes.slice(0, idx),\n\t\t\t...resetParent(content, parent),\n\t\t\t...parent.childNodes.slice(idx + 1)\n\t\t];\n\t\treturn this;\n\t}\n\tget outerHTML() {\n\t\treturn this.toString();\n\t}\n\t/**\n\t* Trim element from right (in block) after seeing pattern in a TextNode.\n\t* @param {RegExp} pattern pattern to find\n\t* @return {HTMLElement} reference to current node\n\t*/\n\ttrimRight(pattern) {\n\t\tfor (let i = 0; i < this.childNodes.length; i++) {\n\t\t\tconst childNode = this.childNodes[i];\n\t\t\tif (childNode.nodeType === 1) childNode.trimRight(pattern);\n\t\t\telse {\n\t\t\t\tconst index = childNode.rawText.search(pattern);\n\t\t\t\tif (index > -1) {\n\t\t\t\t\tchildNode.rawText = childNode.rawText.substr(0, index);\n\t\t\t\t\tthis.childNodes.length = i + 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n\t/**\n\t* Get DOM structure\n\t* @return {string} structure\n\t*/\n\tget structure() {\n\t\tconst res = [];\n\t\tlet indention = 0;\n\t\tfunction write(str) {\n\t\t\tres.push(\" \".repeat(indention) + str);\n\t\t}\n\t\tfunction dfs(node) {\n\t\t\tconst idStr = node._id ? `#${node._id}` : \"\";\n\t\t\tconst classStr = node.classList.length ? `.${node.classList.value.join(\".\")}` : \"\";\n\t\t\twrite(`${node.rawTagName}${idStr}${classStr}`);\n\t\t\tindention++;\n\t\t\tnode.childNodes.forEach((childNode) => {\n\t\t\t\tif (childNode.nodeType === 1) dfs(childNode);\n\t\t\t\telse if (childNode.nodeType === 3) {\n\t\t\t\t\tif (!childNode.isWhitespace) write(\"#text\");\n\t\t\t\t}\n\t\t\t});\n\t\t\tindention--;\n\t\t}\n\t\tdfs(this);\n\t\treturn res.join(\"\\n\");\n\t}\n\t/**\n\t* Remove whitespaces in this sub tree.\n\t* @return {HTMLElement} pointer to this\n\t*/\n\tremoveWhitespace() {\n\t\tlet o = 0;\n\t\tthis.childNodes.forEach((node) => {\n\t\t\tif (node.nodeType === 3) {\n\t\t\t\tif (node.isWhitespace) return;\n\t\t\t\tnode.rawText = node.trimmedRawText;\n\t\t\t} else if (node.nodeType === 1) node.removeWhitespace();\n\t\t\tthis.childNodes[o++] = node;\n\t\t});\n\t\tthis.childNodes.length = o;\n\t\tconst attrs = Object.keys(this.rawAttributes).map((key) => {\n\t\t\tconst val = this.quoteAttribute(this.rawAttributes[key]);\n\t\t\tif (val === \"null\" || val === \"\\\"\\\"\") return key;\n\t\t\treturn `${key}=${val}`;\n\t\t}).join(\" \");\n\t\tthis.rawAttrs = attrs;\n\t\tdelete this._rawAttrs;\n\t\treturn this;\n\t}\n\t/**\n\t* Query CSS selector to find matching nodes.\n\t* @param {string} selector Simplified CSS selector\n\t* @return {HTMLElement[]} matching elements\n\t*/\n\tquerySelectorAll(selector) {\n\t\treturn selectAll(selector, this, {\n\t\t\txmlMode: true,\n\t\t\tadapter: matcher\n\t\t});\n\t}\n\t/**\n\t* Query CSS Selector to find matching node.\n\t* @param {string} selector Simplified CSS selector\n\t* @return {(HTMLElement|null)} matching node\n\t*/\n\tquerySelector(selector) {\n\t\treturn selectOne(selector, this, {\n\t\t\txmlMode: true,\n\t\t\tadapter: matcher\n\t\t});\n\t}\n\t/**\n\t* Tests whether the node matches a given CSS selector.\n\t* @param {string} selector Simplified CSS selector\n\t* @return {boolean}\n\t*/\n\tmatches(selector) {\n\t\treturn is(this, selector, {\n\t\t\txmlMode: true,\n\t\t\tadapter: matcher\n\t\t});\n\t}\n\t/**\n\t* find elements by their tagName\n\t* @param {string} tagName the tagName of the elements to select\n\t*/\n\tgetElementsByTagName(tagName) {\n\t\tconst upperCasedTagName = tagName.toUpperCase();\n\t\tconst re = [];\n\t\tconst stack = [];\n\t\tlet currentNodeReference = this;\n\t\tlet index = 0;\n\t\twhile (index !== void 0) {\n\t\t\tlet child;\n\t\t\tdo\n\t\t\t\tchild = currentNodeReference.childNodes[index++];\n\t\t\twhile (index < currentNodeReference.childNodes.length && child === void 0);\n\t\t\tif (child === void 0) {\n\t\t\t\tcurrentNodeReference = currentNodeReference.parentNode;\n\t\t\t\tindex = stack.pop();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (child.nodeType === 1) {\n\t\t\t\tif (tagName === \"*\" || child.tagName === upperCasedTagName) re.push(child);\n\t\t\t\tif (child.childNodes.length > 0) {\n\t\t\t\t\tstack.push(index);\n\t\t\t\t\tcurrentNodeReference = child;\n\t\t\t\t\tindex = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn re;\n\t}\n\t/**\n\t* find element by it's id\n\t* @param {string} id the id of the element to select\n\t* @returns {HTMLElement | null} the element with the given id or null if not found\n\t*/\n\tgetElementById(id) {\n\t\tconst stack = [];\n\t\tlet currentNodeReference = this;\n\t\tlet index = 0;\n\t\twhile (index !== void 0) {\n\t\t\tlet child;\n\t\t\tdo\n\t\t\t\tchild = currentNodeReference.childNodes[index++];\n\t\t\twhile (index < currentNodeReference.childNodes.length && child === void 0);\n\t\t\tif (child === void 0) {\n\t\t\t\tcurrentNodeReference = currentNodeReference.parentNode;\n\t\t\t\tindex = stack.pop();\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (child.nodeType === 1) {\n\t\t\t\tif (child._id === id) return child;\n\t\t\t\tif (child.childNodes.length > 0) {\n\t\t\t\t\tstack.push(index);\n\t\t\t\t\tcurrentNodeReference = child;\n\t\t\t\t\tindex = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\t/**\n\t* traverses the Element and its parents (heading toward the document root) until it finds a node that matches the provided selector string. Will return itself or the matching ancestor. If no such element exists, it returns null.\n\t* @param selector a DOMString containing a selector list\n\t* @returns {HTMLElement | null} the element with the given id or null if not found\n\t*/\n\tclosest(selector) {\n\t\tconst mapChild = /* @__PURE__ */ new Map();\n\t\tlet el = this;\n\t\tlet old = null;\n\t\tfunction findOne(test, elems) {\n\t\t\tlet elem = null;\n\t\t\tfor (let i = 0, l = elems.length; i < l && !elem; i++) {\n\t\t\t\tconst el = elems[i];\n\t\t\t\tif (test(el)) elem = el;\n\t\t\t\telse {\n\t\t\t\t\tconst child = mapChild.get(el);\n\t\t\t\t\tif (child) elem = findOne(test, [child]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn elem;\n\t\t}\n\t\twhile (el) {\n\t\t\tmapChild.set(el, old);\n\t\t\told = el;\n\t\t\tel = el.parentNode;\n\t\t}\n\t\tel = this;\n\t\twhile (el) {\n\t\t\tconst e = selectOne(selector, el, {\n\t\t\t\txmlMode: true,\n\t\t\t\tadapter: _objectSpread2(_objectSpread2({}, matcher), {}, {\n\t\t\t\t\tgetChildren(node) {\n\t\t\t\t\t\tconst child = mapChild.get(node);\n\t\t\t\t\t\treturn child && [child];\n\t\t\t\t\t},\n\t\t\t\t\tgetSiblings(node) {\n\t\t\t\t\t\treturn [node];\n\t\t\t\t\t},\n\t\t\t\t\tfindOne,\n\t\t\t\t\tfindAll() {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t});\n\t\t\tif (e) return e;\n\t\t\tel = el.parentNode;\n\t\t}\n\t\treturn null;\n\t}\n\t/**\n\t* Append a child node to childNodes\n\t* @param {Node} node node to append\n\t* @return {Node} node appended\n\t*/\n\tappendChild(node) {\n\t\tthis.append(node);\n\t\treturn node;\n\t}\n\t/**\n\t* Get attributes\n\t* @access private\n\t* @return {Object} parsed and unescaped attributes\n\t*/\n\tget attrs() {\n\t\tif (this._attrs) return this._attrs;\n\t\tthis._attrs = {};\n\t\tconst attrs = this.rawAttributes;\n\t\tfor (const key in attrs) {\n\t\t\tconst val = attrs[key] || \"\";\n\t\t\tthis._attrs[key.toLowerCase()] = decode(val);\n\t\t}\n\t\treturn this._attrs;\n\t}\n\tget attributes() {\n\t\tconst ret_attrs = {};\n\t\tconst attrs = this.rawAttributes;\n\t\tfor (const key in attrs) ret_attrs[key] = decode(attrs[key] || \"\");\n\t\treturn ret_attrs;\n\t}\n\t/**\n\t* Get escaped (as-is) attributes\n\t* @return {Object} parsed attributes\n\t*/\n\tget rawAttributes() {\n\t\tif (this._rawAttrs) return this._rawAttrs;\n\t\tconst attrs = {};\n\t\tif (this.rawAttrs) {\n\t\t\tconst re = /([a-zA-Z()[\\]#@$.?:][a-zA-Z0-9-._:()[\\]#]*)(?:\\s*=\\s*((?:'[^']*')|(?:\"[^\"]*\")|\\S+))?/g;\n\t\t\tlet match;\n\t\t\twhile (match = re.exec(this.rawAttrs)) {\n\t\t\t\tconst key = match[1];\n\t\t\t\tlet val = match[2] || null;\n\t\t\t\tif (val && (val[0] === `'` || val[0] === `\"`)) val = val.slice(1, val.length - 1);\n\t\t\t\tattrs[key] = attrs[key] || val;\n\t\t\t}\n\t\t}\n\t\tthis._rawAttrs = attrs;\n\t\treturn attrs;\n\t}\n\tremoveAttribute(key) {\n\t\tconst attrs = this.rawAttributes;\n\t\tdelete attrs[key];\n\t\tif (this._attrs) delete this._attrs[key];\n\t\tthis.rawAttrs = Object.keys(attrs).map((name) => {\n\t\t\tconst val = this.quoteAttribute(attrs[name]);\n\t\t\tif (val === \"null\" || val === \"\\\"\\\"\") return name;\n\t\t\treturn `${name}=${val}`;\n\t\t}).join(\" \");\n\t\tif (key === \"id\") this._id = \"\";\n\t\treturn this;\n\t}\n\thasAttribute(key) {\n\t\treturn key.toLowerCase() in this.attrs;\n\t}\n\t/**\n\t* Get an attribute\n\t* @return {string | undefined} value of the attribute; or undefined if not exist\n\t*/\n\tgetAttribute(key) {\n\t\treturn this.attrs[key.toLowerCase()];\n\t}\n\t/**\n\t* Set an attribute value to the HTMLElement\n\t* @param {string} key The attribute name\n\t* @param {string} value The value to set, or null / undefined to remove an attribute\n\t*/\n\tsetAttribute(key, value) {\n\t\tif (arguments.length < 2) throw new Error(\"Failed to execute 'setAttribute' on 'Element'\");\n\t\tconst k2 = key.toLowerCase();\n\t\tconst attrs = this.rawAttributes;\n\t\tfor (const k in attrs) if (k.toLowerCase() === k2) {\n\t\t\tkey = k;\n\t\t\tbreak;\n\t\t}\n\t\tattrs[key] = String(value);\n\t\tif (this._attrs) this._attrs[k2] = decode(attrs[key]);\n\t\tthis.rawAttrs = Object.keys(attrs).map((name) => {\n\t\t\tconst val = this.quoteAttribute(attrs[name]);\n\t\t\tif (val === \"null\" || val === \"\\\"\\\"\") return name;\n\t\t\treturn `${name}=${val}`;\n\t\t}).join(\" \");\n\t\tif (key === \"id\") this._id = value;\n\t\treturn this;\n\t}\n\t/**\n\t* Replace all the attributes of the HTMLElement by the provided attributes\n\t* @param {Attributes} attributes the new attribute set\n\t*/\n\tsetAttributes(attributes) {\n\t\tif (this._attrs) delete this._attrs;\n\t\tif (this._rawAttrs) delete this._rawAttrs;\n\t\tthis.rawAttrs = Object.keys(attributes).map((name) => {\n\t\t\tconst val = attributes[name];\n\t\t\tif (val === \"null\" || val === \"\\\"\\\"\") return name;\n\t\t\treturn `${name}=${this.quoteAttribute(String(val))}`;\n\t\t}).join(\" \");\n\t\tif (\"id\" in attributes) this._id = attributes[\"id\"];\n\t\treturn this;\n\t}\n\tinsertAdjacentHTML(where, html) {\n\t\tif (arguments.length < 2) throw new Error(\"2 arguments required\");\n\t\tconst p = parse$1(html, this._parseOptions);\n\t\tif (where === \"afterend\") this.after(...p.childNodes);\n\t\telse if (where === \"afterbegin\") this.prepend(...p.childNodes);\n\t\telse if (where === \"beforeend\") this.append(...p.childNodes);\n\t\telse if (where === \"beforebegin\") this.before(...p.childNodes);\n\t\telse throw new Error(`The value provided ('${where}') is not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'`);\n\t\treturn this;\n\t}\n\t/** Prepend nodes or strings to this node's children. */\n\tprepend(...insertable) {\n\t\tconst nodes = resolveInsertable(insertable);\n\t\tresetParent(nodes, this);\n\t\tthis.childNodes.unshift(...nodes);\n\t}\n\t/** Append nodes or strings to this node's children. */\n\tappend(...insertable) {\n\t\tconst nodes = resolveInsertable(insertable);\n\t\tresetParent(nodes, this);\n\t\tthis.childNodes.push(...nodes);\n\t}\n\t/** Insert nodes or strings before this node. */\n\tbefore(...insertable) {\n\t\tconst nodes = resolveInsertable(insertable);\n\t\tconst siblings = this.parentNode.childNodes;\n\t\tresetParent(nodes, this.parentNode);\n\t\tsiblings.splice(siblings.indexOf(this), 0, ...nodes);\n\t}\n\t/** Insert nodes or strings after this node. */\n\tafter(...insertable) {\n\t\tconst nodes = resolveInsertable(insertable);\n\t\tconst siblings = this.parentNode.childNodes;\n\t\tresetParent(nodes, this.parentNode);\n\t\tsiblings.splice(siblings.indexOf(this) + 1, 0, ...nodes);\n\t}\n\tget nextSibling() {\n\t\tif (this.parentNode) {\n\t\t\tconst children = this.parentNode.childNodes;\n\t\t\tlet i = 0;\n\t\t\twhile (i < children.length) {\n\t\t\t\tconst child = children[i++];\n\t\t\t\tif (this === child) return children[i] || null;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n\tget nextElementSibling() {\n\t\tif (this.parentNode) {\n\t\t\tconst children = this.parentNode.childNodes;\n\t\t\tlet i = 0;\n\t\t\tlet find = false;\n\t\t\twhile (i < children.length) {\n\t\t\t\tconst child = children[i++];\n\t\t\t\tif (find) {\n\t\t\t\t\tif (child instanceof HTMLElement) return child || null;\n\t\t\t\t} else if (this === child) find = true;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n\tget previousSibling() {\n\t\tif (this.parentNode) {\n\t\t\tconst children = this.parentNode.childNodes;\n\t\t\tlet i = children.length;\n\t\t\twhile (i > 0) {\n\t\t\t\tconst child = children[--i];\n\t\t\t\tif (this === child) return children[i - 1] || null;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n\tget previousElementSibling() {\n\t\tif (this.parentNode) {\n\t\t\tconst children = this.parentNode.childNodes;\n\t\t\tlet i = children.length;\n\t\t\tlet find = false;\n\t\t\twhile (i > 0) {\n\t\t\t\tconst child = children[--i];\n\t\t\t\tif (find) {\n\t\t\t\t\tif (child instanceof HTMLElement) return child || null;\n\t\t\t\t} else if (this === child) find = true;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t}\n\t/** Get all childNodes of type {@link HTMLElement}. */\n\tget children() {\n\t\tconst children = [];\n\t\tfor (const childNode of this.childNodes) if (childNode instanceof HTMLElement) children.push(childNode);\n\t\treturn children;\n\t}\n\t/**\n\t* Get the first child node.\n\t* @return The first child or undefined if none exists.\n\t*/\n\tget firstChild() {\n\t\treturn this.childNodes[0];\n\t}\n\t/**\n\t* Get the first child node of type {@link HTMLElement}.\n\t* @return The first child element or undefined if none exists.\n\t*/\n\tget firstElementChild() {\n\t\treturn this.children[0];\n\t}\n\t/**\n\t* Get the last child node.\n\t* @return The last child or undefined if none exists.\n\t*/\n\tget lastChild() {\n\t\treturn arr_back(this.childNodes);\n\t}\n\t/**\n\t* Get the last child node of type {@link HTMLElement}.\n\t* @return The last child element or undefined if none exists.\n\t*/\n\tget lastElementChild() {\n\t\treturn this.children[this.children.length - 1];\n\t}\n\tget childElementCount() {\n\t\treturn this.children.length;\n\t}\n\tget classNames() {\n\t\treturn this.classList.toString();\n\t}\n\t/** Clone this Node */\n\tclone() {\n\t\treturn parse$1(this.toString(), this._parseOptions).firstChild;\n\t}\n};\nconst kMarkupPattern = /<!--[\\s\\S]*?-->|<(\\/?)([a-zA-Z][-.:0-9_a-zA-Z@\\xB7\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u03A1\\u03A3-\\u03D9\\u03DB-\\u03EF\\u03F7-\\u03FF\\u0400-\\u04FF\\u0500-\\u052F\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E00-\\u1E9B\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2126\\u212A-\\u212B\\u2132\\u214E\\u2160-\\u2188\\u2C60-\\u2C7F\\uA722-\\uA787\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA7FF\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64-\\uAB65\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\x37F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*)((?:\\s+[^>]*?(?:(?:'[^']*')|(?:\"[^\"]*\"))?)*)\\s*(\\/?)>/gu;\nconst kMarkupPatternWithCDATA = /<!--[\\s\\S]*?-->|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>|<(\\/?)([a-zA-Z][-.:0-9_a-zA-Z@\\xB7\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u03A1\\u03A3-\\u03D9\\u03DB-\\u03EF\\u03F7-\\u03FF\\u0400-\\u04FF\\u0500-\\u052F\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E00-\\u1E9B\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2126\\u212A-\\u212B\\u2132\\u214E\\u2160-\\u2188\\u2C60-\\u2C7F\\uA722-\\uA787\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0-\\uA7B7\\uA7F7-\\uA7FF\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64-\\uAB65\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\x37F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]*)((?:\\s+[^>]*?(?:(?:'[^']*')|(?:\"[^\"]*\"))?)*)\\s*(\\/?)>/gu;\nconst kAttributePattern = /(?:^|\\s)(id|class)\\s*=\\s*((?:'[^']*')|(?:\"[^\"]*\")|\\S+)/gi;\nconst kElementsClosedByOpening = {\n\tli: {\n\t\tli: true,\n\t\tLI: true\n\t},\n\tLI: {\n\t\tli: true,\n\t\tLI: true\n\t},\n\tp: {\n\t\tp: true,\n\t\tdiv: true,\n\t\tP: true,\n\t\tDIV: true\n\t},\n\tP: {\n\t\tp: true,\n\t\tdiv: true,\n\t\tP: true,\n\t\tDIV: true\n\t},\n\tb: {\n\t\tdiv: true,\n\t\tDIV: true\n\t},\n\tB: {\n\t\tdiv: true,\n\t\tDIV: true\n\t},\n\ttd: {\n\t\ttd: true,\n\t\tth: true,\n\t\tTD: true,\n\t\tTH: true\n\t},\n\tTD: {\n\t\ttd: true,\n\t\tth: true,\n\t\tTD: true,\n\t\tTH: true\n\t},\n\tth: {\n\t\ttd: true,\n\t\tth: true,\n\t\tTD: true,\n\t\tTH: true\n\t},\n\tTH: {\n\t\ttd: true,\n\t\tth: true,\n\t\tTD: true,\n\t\tTH: true\n\t},\n\th1: {\n\t\th1: true,\n\t\tH1: true\n\t},\n\tH1: {\n\t\th1: true,\n\t\tH1: true\n\t},\n\th2: {\n\t\th2: true,\n\t\tH2: true\n\t},\n\tH2: {\n\t\th2: true,\n\t\tH2: true\n\t},\n\th3: {\n\t\th3: true,\n\t\tH3: true\n\t},\n\tH3: {\n\t\th3: true,\n\t\tH3: true\n\t},\n\th4: {\n\t\th4: true,\n\t\tH4: true\n\t},\n\tH4: {\n\t\th4: true,\n\t\tH4: true\n\t},\n\th5: {\n\t\th5: true,\n\t\tH5: true\n\t},\n\tH5: {\n\t\th5: true,\n\t\tH5: true\n\t},\n\th6: {\n\t\th6: true,\n\t\tH6: true\n\t},\n\tH6: {\n\t\th6: true,\n\t\tH6: true\n\t}\n};\nconst kElementsClosedByClosing = {\n\tli: {\n\t\tul: true,\n\t\tol: true,\n\t\tUL: true,\n\t\tOL: true\n\t},\n\tLI: {\n\t\tul: true,\n\t\tol: true,\n\t\tUL: true,\n\t\tOL: true\n\t},\n\ta: {\n\t\tdiv: true,\n\t\tDIV: true\n\t},\n\tA: {\n\t\tdiv: true,\n\t\tDIV: true\n\t},\n\tb: {\n\t\tdiv: true,\n\t\tDIV: true\n\t},\n\tB: {\n\t\tdiv: true,\n\t\tDIV: true\n\t},\n\ti: {\n\t\tdiv: true,\n\t\tDIV: true\n\t},\n\tI: {\n\t\tdiv: true,\n\t\tDIV: true\n\t},\n\tp: {\n\t\tdiv: true,\n\t\tDIV: true\n\t},\n\tP: {\n\t\tdiv: true,\n\t\tDIV: true\n\t},\n\ttd: {\n\t\ttr: true,\n\t\ttable: true,\n\t\tTR: true,\n\t\tTABLE: true\n\t},\n\tTD: {\n\t\ttr: true,\n\t\ttable: true,\n\t\tTR: true,\n\t\tTABLE: true\n\t},\n\tth: {\n\t\ttr: true,\n\t\ttable: true,\n\t\tTR: true,\n\t\tTABLE: true\n\t},\n\tTH: {\n\t\ttr: true,\n\t\ttable: true,\n\t\tTR: true,\n\t\tTABLE: true\n\t}\n};\nconst kElementsClosedByClosingExcept = { p: {\n\ta: true,\n\taudio: true,\n\tdel: true,\n\tins: true,\n\tmap: true,\n\tnoscript: true,\n\tvideo: true\n} };\nconst frameflag = \"documentfragmentcontainer\";\n/**\n* Parses HTML and returns a root element\n* Parse a chuck of HTML source.\n* @param {string} data html\n* @return {HTMLElement} root element\n*/\nfunction base_parse(data, options = {}) {\n\tvar _options$voidTag, _options$voidTag2;\n\tconst voidTag = new VoidTag(options === null || options === void 0 || (_options$voidTag = options.voidTag) === null || _options$voidTag === void 0 ? void 0 : _options$voidTag.closingSlash, options === null || options === void 0 || (_options$voidTag2 = options.voidTag) === null || _options$voidTag2 === void 0 ? void 0 : _options$voidTag2.tags);\n\tconst hasCDATA = data.includes(\"<![CDATA[\");\n\tconst markupPattern = hasCDATA ? kMarkupPatternWithCDATA : kMarkupPattern;\n\tconst elements = options.blockTextElements || {\n\t\tscript: true,\n\t\tnoscript: true,\n\t\tstyle: true,\n\t\tpre: true\n\t};\n\tconst element_names = Object.keys(elements);\n\tconst kBlockTextElements = element_names.map((it) => new RegExp(`^${it}$`, \"i\"));\n\tconst kIgnoreElements = element_names.filter((it) => Boolean(elements[it])).map((it) => new RegExp(`^${it}$`, \"i\"));\n\tfunction element_should_be_ignore(tag) {\n\t\treturn kIgnoreElements.some((it) => it.test(tag));\n\t}\n\tfunction is_block_text_element(tag) {\n\t\treturn kBlockTextElements.some((it) => it.test(tag));\n\t}\n\tconst createRange = (startPos, endPos) => [startPos - frameFlagOffset, endPos - frameFlagOffset];\n\tconst root = new HTMLElement(null, {}, \"\", null, [0, data.length], voidTag, options);\n\tlet currentParent = root;\n\tconst stack = [root];\n\tlet lastTextPos = -1;\n\tlet noNestedTagIndex = void 0;\n\tlet match;\n\tdata = `<${frameflag}>${data}</${frameflag}>`;\n\tconst { lowerCaseTagName, fixNestedATags } = options;\n\tconst dataEndPos = data.length - 27;\n\tconst frameFlagOffset = 27;\n\tmarkupPattern.lastIndex = 0;\n\twhile (match = markupPattern.exec(data)) {\n\t\tlet { 0: matchText, 1: leadingSlash, 2: tagName, 3: attributes, 4: closingSlash } = match;\n\t\tconst matchLength = matchText.length;\n\t\tconst tagStartPos = markupPattern.lastIndex - matchLength;\n\t\tconst tagEndPos = markupPattern.lastIndex;\n\t\tif (lastTextPos > -1) {\n\t\t\tif (lastTextPos + matchLength < tagEndPos) {\n\t\t\t\tconst text = data.substring(lastTextPos, tagStartPos);\n\t\t\t\tcurrentParent.appendChild(new TextNode(text, currentParent, createRange(lastTextPos, tagStartPos)));\n\t\t\t}\n\t\t}\n\t\tlastTextPos = markupPattern.lastIndex;\n\t\tif (hasCDATA && matchText.startsWith(\"<![CDATA[\")) {\n\t\t\tcurrentParent.appendChild(new TextNode(matchText, currentParent, createRange(tagStartPos, tagEndPos)));\n\t\t\tcontinue;\n\t\t}\n\t\tif (tagName === frameflag) continue;\n\t\tif (matchText[1] === \"!\") {\n\t\t\tif (options.comment) {\n\t\t\t\tconst text = data.substring(tagStartPos + 4, tagEndPos - 3);\n\t\t\t\tcurrentParent.appendChild(new CommentNode(text, currentParent, createRange(tagStartPos, tagEndPos)));\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (lowerCaseTagName) tagName = tagName.toLowerCase();\n\t\tif (!leadingSlash) {\n\t\t\tconst attrs = {};\n\t\t\tfor (let attMatch; attMatch = kAttributePattern.exec(attributes);) {\n\t\t\t\tconst { 1: key, 2: val } = attMatch;\n\t\t\t\tconst isQuoted = val[0] === `'` || val[0] === `\"`;\n\t\t\t\tattrs[key.toLowerCase()] = isQuoted ? val.slice(1, val.length - 1) : val;\n\t\t\t}\n\t\t\tconst parentTagName = currentParent.rawTagName;\n\t\t\tif (!closingSlash && !options.preserveTagNesting && kElementsClosedByOpening[parentTagName]) {\n\t\t\t\tif (kElementsClosedByOpening[parentTagName][tagName]) {\n\t\t\t\t\tstack.pop();\n\t\t\t\t\tcurrentParent = arr_back(stack);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (fixNestedATags && (tagName === \"a\" || tagName === \"A\")) {\n\t\t\t\tif (noNestedTagIndex !== void 0) {\n\t\t\t\t\tstack.splice(noNestedTagIndex);\n\t\t\t\t\tcurrentParent = arr_back(stack);\n\t\t\t\t}\n\t\t\t\tnoNestedTagIndex = stack.length;\n\t\t\t}\n\t\t\tconst tagEndPos = markupPattern.lastIndex;\n\t\t\tconst tagStartPos = tagEndPos - matchLength;\n\t\t\tcurrentParent = currentParent.appendChild(new HTMLElement(tagName, attrs, attributes.slice(1), null, createRange(tagStartPos, tagEndPos), voidTag, options));\n\t\t\tstack.push(currentParent);\n\t\t\tif (is_block_text_element(tagName)) {\n\t\t\t\tconst closeMarkup = `</${tagName}>`;\n\t\t\t\tconst closeIndex = lowerCaseTagName ? data.toLocaleLowerCase().indexOf(closeMarkup, markupPattern.lastIndex) : data.indexOf(closeMarkup, markupPattern.lastIndex);\n\t\t\t\tconst textEndPos = closeIndex === -1 ? dataEndPos : closeIndex;\n\t\t\t\tif (element_should_be_ignore(tagName)) {\n\t\t\t\t\tconst text = data.substring(tagEndPos, textEndPos);\n\t\t\t\t\tif (text.length > 0 && /\\S/.test(text)) currentParent.appendChild(new TextNode(text, currentParent, createRange(tagEndPos, textEndPos)));\n\t\t\t\t}\n\t\t\t\tif (closeIndex === -1) lastTextPos = markupPattern.lastIndex = data.length + 1;\n\t\t\t\telse {\n\t\t\t\t\tlastTextPos = markupPattern.lastIndex = closeIndex + closeMarkup.length;\n\t\t\t\t\tleadingSlash = \"/\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (leadingSlash || closingSlash || voidTag.isVoidElement(tagName)) while (true) {\n\t\t\tif (noNestedTagIndex != null && (tagName === \"a\" || tagName === \"A\")) noNestedTagIndex = void 0;\n\t\t\tif (currentParent.rawTagName === tagName) {\n\t\t\t\tcurrentParent.range[1] = createRange(-1, Math.max(lastTextPos, tagEndPos))[1];\n\t\t\t\tstack.pop();\n\t\t\t\tcurrentParent = arr_back(stack);\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\tconst parentTagName = currentParent.tagName;\n\t\t\t\tif (kElementsClosedByClosing[parentTagName]) {\n\t\t\t\t\tif (kElementsClosedByClosing[parentTagName][tagName]) {\n\t\t\t\t\t\tstack.pop();\n\t\t\t\t\t\tcurrentParent = arr_back(stack);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst openTag = currentParent.rawTagName ? currentParent.rawTagName.toLowerCase() : \"\";\n\t\t\t\tif (kElementsClosedByClosingExcept[openTag]) {\n\t\t\t\t\tconst closingTag = tagName.toLowerCase();\n\t\t\t\t\tif (stack.length > 1) {\n\t\t\t\t\t\tconst possibleContainer = stack[stack.length - 2];\n\t\t\t\t\t\tif (possibleContainer && possibleContainer.rawTagName && possibleContainer.rawTagName.toLowerCase() === closingTag && !kElementsClosedByClosingExcept[openTag][closingTag]) {\n\t\t\t\t\t\t\tcurrentParent.range[1] = createRange(-1, Math.max(lastTextPos, tagEndPos))[1];\n\t\t\t\t\t\t\tstack.pop();\n\t\t\t\t\t\t\tcurrentParent = arr_back(stack);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (options.closeAllByClosing === true) {\n\t\t\t\t\tlet i;\n\t\t\t\t\tfor (i = stack.length - 2; i >= 0; i--) if (stack[i].rawTagName === tagName) break;\n\t\t\t\t\tif (i >= 0) {\n\t\t\t\t\t\twhile (stack.length > i) {\n\t\t\t\t\t\t\tcurrentParent.range[1] = createRange(-1, Math.max(lastTextPos, tagEndPos))[1];\n\t\t\t\t\t\t\tstack.pop();\n\t\t\t\t\t\t\tcurrentParent = arr_back(stack);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn stack;\n}\n/**\n* Parses HTML and returns a root element\n* Parse a chuck of HTML source.\n*/\nfunction parse$1(data, options = {}) {\n\tconst stack = base_parse(data, options);\n\tconst [root] = stack;\n\twhile (stack.length > 1) {\n\t\tconst last = stack.pop();\n\t\tconst oneBefore = arr_back(stack);\n\t\tif (last.parentNode && last.parentNode.parentNode) {\n\t\t\tif (last.parentNode === oneBefore && last.tagName === oneBefore.tagName) {\n\t\t\t\tif (options.parseNoneClosedTags !== true) {\n\t\t\t\t\toneBefore.removeChild(last);\n\t\t\t\t\tlast.childNodes.forEach((child) => {\n\t\t\t\t\t\toneBefore.parentNode.appendChild(child);\n\t\t\t\t\t});\n\t\t\t\t\tstack.pop();\n\t\t\t\t}\n\t\t\t} else if (options.parseNoneClosedTags !== true) {\n\t\t\t\toneBefore.removeChild(last);\n\t\t\t\tlast.childNodes.forEach((child) => {\n\t\t\t\t\toneBefore.appendChild(child);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\treturn root;\n}\n/**\n* Resolves a list of {@link NodeInsertable} to a list of nodes,\n* and removes nodes from any potential parent.\n*/\nfunction resolveInsertable(insertable) {\n\treturn insertable.map((val) => {\n\t\tif (typeof val === \"string\") return new TextNode(val);\n\t\tval.remove();\n\t\treturn val;\n\t});\n}\nfunction resetParent(nodes, parent) {\n\treturn nodes.map((node) => {\n\t\tnode.parentNode = parent;\n\t\treturn node;\n\t});\n}\n//#endregion\n//#region src/valid.ts\n/**\n* Parses HTML and returns a root element\n* Parse a chuck of HTML source.\n*/\nfunction valid(data, options = {}) {\n\tconst stack = base_parse(data, options);\n\treturn Boolean(stack.length === 1);\n}\n//#endregion\n//#region src/index.ts\nfunction parse(data, options = {}) {\n\treturn parse$1(data, options);\n}\nparse.parse = parse$1;\nparse.HTMLElement = HTMLElement;\nparse.CommentNode = CommentNode;\nparse.valid = valid;\nparse.Node = Node;\nparse.TextNode = TextNode;\nparse.NodeType = NodeType;\n//#endregion\nexport { CommentNode, HTMLElement, Node, NodeType, TextNode, parse as default, parse, valid };\n","// src/distribute.ts\nfunction distributeAndNormalize({\n topLeftCornerRadius,\n topRightCornerRadius,\n bottomRightCornerRadius,\n bottomLeftCornerRadius,\n width,\n height\n}) {\n const roundingAndSmoothingBudgetMap = {\n topLeft: -1,\n topRight: -1,\n bottomLeft: -1,\n bottomRight: -1\n };\n const cornerRadiusMap = {\n topLeft: topLeftCornerRadius,\n topRight: topRightCornerRadius,\n bottomLeft: bottomLeftCornerRadius,\n bottomRight: bottomRightCornerRadius\n };\n Object.entries(cornerRadiusMap).sort(([, radius1], [, radius2]) => {\n return radius2 - radius1;\n }).forEach(([cornerName, radius]) => {\n const corner = cornerName;\n const adjacents = adjacentsByCorner[corner];\n const budget = Math.min(\n ...adjacents.map((adjacent) => {\n const adjacentCornerRadius = cornerRadiusMap[adjacent.corner];\n if (radius === 0 && adjacentCornerRadius === 0) {\n return 0;\n }\n const adjacentCornerBudget = roundingAndSmoothingBudgetMap[adjacent.corner];\n const sideLength = adjacent.side === \"top\" || adjacent.side === \"bottom\" ? width : height;\n if (adjacentCornerBudget >= 0) {\n return sideLength - roundingAndSmoothingBudgetMap[adjacent.corner];\n } else {\n return radius / (radius + adjacentCornerRadius) * sideLength;\n }\n })\n );\n roundingAndSmoothingBudgetMap[corner] = budget;\n cornerRadiusMap[corner] = Math.min(radius, budget);\n });\n return {\n topLeft: {\n radius: cornerRadiusMap.topLeft,\n roundingAndSmoothingBudget: roundingAndSmoothingBudgetMap.topLeft\n },\n topRight: {\n radius: cornerRadiusMap.topRight,\n roundingAndSmoothingBudget: roundingAndSmoothingBudgetMap.topRight\n },\n bottomLeft: {\n radius: cornerRadiusMap.bottomLeft,\n roundingAndSmoothingBudget: roundingAndSmoothingBudgetMap.bottomLeft\n },\n bottomRight: {\n radius: cornerRadiusMap.bottomRight,\n roundingAndSmoothingBudget: roundingAndSmoothingBudgetMap.bottomRight\n }\n };\n}\nvar adjacentsByCorner = {\n topLeft: [\n {\n corner: \"topRight\",\n side: \"top\"\n },\n {\n corner: \"bottomLeft\",\n side: \"left\"\n }\n ],\n topRight: [\n {\n corner: \"topLeft\",\n side: \"top\"\n },\n {\n corner: \"bottomRight\",\n side: \"right\"\n }\n ],\n bottomLeft: [\n {\n corner: \"bottomRight\",\n side: \"bottom\"\n },\n {\n corner: \"topLeft\",\n side: \"left\"\n }\n ],\n bottomRight: [\n {\n corner: \"bottomLeft\",\n side: \"bottom\"\n },\n {\n corner: \"topRight\",\n side: \"right\"\n }\n ]\n};\n\n// src/draw.ts\nfunction getPathParamsForCorner({\n cornerRadius,\n cornerSmoothing,\n preserveSmoothing,\n roundingAndSmoothingBudget\n}) {\n let p = (1 + cornerSmoothing) * cornerRadius;\n if (!preserveSmoothing) {\n const maxCornerSmoothing = roundingAndSmoothingBudget / cornerRadius - 1;\n cornerSmoothing = Math.min(cornerSmoothing, maxCornerSmoothing);\n p = Math.min(p, roundingAndSmoothingBudget);\n }\n const arcMeasure = 90 * (1 - cornerSmoothing);\n const arcSectionLength = Math.sin(toRadians(arcMeasure / 2)) * cornerRadius * Math.sqrt(2);\n const angleAlpha = (90 - arcMeasure) / 2;\n const p3ToP4Distance = cornerRadius * Math.tan(toRadians(angleAlpha / 2));\n const angleBeta = 45 * cornerSmoothing;\n const c = p3ToP4Distance * Math.cos(toRadians(angleBeta));\n const d = c * Math.tan(toRadians(angleBeta));\n let b = (p - arcSectionLength - c - d) / 3;\n let a = 2 * b;\n if (preserveSmoothing && p > roundingAndSmoothingBudget) {\n const p1ToP3MaxDistance = roundingAndSmoothingBudget - d - arcSectionLength - c;\n const minA = p1ToP3MaxDistance / 6;\n const maxB = p1ToP3MaxDistance - minA;\n b = Math.min(b, maxB);\n a = p1ToP3MaxDistance - b;\n p = Math.min(p, roundingAndSmoothingBudget);\n }\n return {\n a,\n b,\n c,\n d,\n p,\n arcSectionLength,\n cornerRadius\n };\n}\nfunction getSVGPathFromPathParams({\n width,\n height,\n topLeftPathParams,\n topRightPathParams,\n bottomLeftPathParams,\n bottomRightPathParams\n}) {\n return `\n M ${width - topRightPathParams.p} 0\n ${drawTopRightPath(topRightPathParams)}\n L ${width} ${height - bottomRightPathParams.p}\n ${drawBottomRightPath(bottomRightPathParams)}\n L ${bottomLeftPathParams.p} ${height}\n ${drawBottomLeftPath(bottomLeftPathParams)}\n L 0 ${topLeftPathParams.p}\n ${drawTopLeftPath(topLeftPathParams)}\n Z\n `.replace(/[\\t\\s\\n]+/g, \" \").trim();\n}\nfunction drawTopRightPath({\n cornerRadius,\n a,\n b,\n c,\n d,\n p,\n arcSectionLength\n}) {\n if (cornerRadius) {\n return rounded`\n c ${a} 0 ${a + b} 0 ${a + b + c} ${d}\n a ${cornerRadius} ${cornerRadius} 0 0 1 ${arcSectionLength} ${arcSectionLength}\n c ${d} ${c}\n ${d} ${b + c}\n ${d} ${a + b + c}`;\n } else {\n return rounded`l ${p} 0`;\n }\n}\nfunction drawBottomRightPath({\n cornerRadius,\n a,\n b,\n c,\n d,\n p,\n arcSectionLength\n}) {\n if (cornerRadius) {\n return rounded`\n c 0 ${a}\n 0 ${a + b}\n ${-d} ${a + b + c}\n a ${cornerRadius} ${cornerRadius} 0 0 1 -${arcSectionLength} ${arcSectionLength}\n c ${-c} ${d}\n ${-(b + c)} ${d}\n ${-(a + b + c)} ${d}`;\n } else {\n return rounded`l 0 ${p}`;\n }\n}\nfunction drawBottomLeftPath({\n cornerRadius,\n a,\n b,\n c,\n d,\n p,\n arcSectionLength\n}) {\n if (cornerRadius) {\n return rounded`\n c ${-a} 0\n ${-(a + b)} 0\n ${-(a + b + c)} ${-d}\n a ${cornerRadius} ${cornerRadius} 0 0 1 -${arcSectionLength} -${arcSectionLength}\n c ${-d} ${-c}\n ${-d} ${-(b + c)}\n ${-d} ${-(a + b + c)}`;\n } else {\n return rounded`l ${-p} 0`;\n }\n}\nfunction drawTopLeftPath({\n cornerRadius,\n a,\n b,\n c,\n d,\n p,\n arcSectionLength\n}) {\n if (cornerRadius) {\n return rounded`\n c 0 ${-a}\n 0 ${-(a + b)}\n ${d} ${-(a + b + c)}\n a ${cornerRadius} ${cornerRadius} 0 0 1 ${arcSectionLength} -${arcSectionLength}\n c ${c} ${-d}\n ${b + c} ${-d}\n ${a + b + c} ${-d}`;\n } else {\n return rounded`l 0 ${-p}`;\n }\n}\nfunction toRadians(degrees) {\n return degrees * Math.PI / 180;\n}\nfunction rounded(strings, ...values) {\n return strings.reduce((acc, str, i) => {\n const value = values[i];\n if (typeof value === \"number\") {\n return acc + str + value.toFixed(4);\n } else {\n return acc + str + (value ?? \"\");\n }\n }, \"\");\n}\n\n// src/index.ts\nfunction getSvgPath({\n cornerRadius = 0,\n topLeftCornerRadius,\n topRightCornerRadius,\n bottomRightCornerRadius,\n bottomLeftCornerRadius,\n cornerSmoothing,\n width,\n height,\n preserveSmoothing = false\n}) {\n topLeftCornerRadius = topLeftCornerRadius ?? cornerRadius;\n topRightCornerRadius = topRightCornerRadius ?? cornerRadius;\n bottomLeftCornerRadius = bottomLeftCornerRadius ?? cornerRadius;\n bottomRightCornerRadius = bottomRightCornerRadius ?? cornerRadius;\n if (topLeftCornerRadius === topRightCornerRadius && topRightCornerRadius === bottomRightCornerRadius && bottomRightCornerRadius === bottomLeftCornerRadius && bottomLeftCornerRadius === topLeftCornerRadius) {\n const roundingAndSmoothingBudget = Math.min(width, height) / 2;\n const cornerRadius2 = Math.min(\n topLeftCornerRadius,\n roundingAndSmoothingBudget\n );\n const pathParams = getPathParamsForCorner({\n cornerRadius: cornerRadius2,\n cornerSmoothing,\n preserveSmoothing,\n roundingAndSmoothingBudget\n });\n return getSVGPathFromPathParams({\n width,\n height,\n topLeftPathParams: pathParams,\n topRightPathParams: pathParams,\n bottomLeftPathParams: pathParams,\n bottomRightPathParams: pathParams\n });\n }\n const { topLeft, topRight, bottomLeft, bottomRight } = distributeAndNormalize(\n {\n topLeftCornerRadius,\n topRightCornerRadius,\n bottomRightCornerRadius,\n bottomLeftCornerRadius,\n width,\n height\n }\n );\n return getSVGPathFromPathParams({\n width,\n height,\n topLeftPathParams: getPathParamsForCorner({\n cornerSmoothing,\n preserveSmoothing,\n cornerRadius: topLeft.radius,\n roundingAndSmoothingBudget: topLeft.roundingAndSmoothingBudget\n }),\n topRightPathParams: getPathParamsForCorner({\n cornerSmoothing,\n preserveSmoothing,\n cornerRadius: topRight.radius,\n roundingAndSmoothingBudget: topRight.roundingAndSmoothingBudget\n }),\n bottomRightPathParams: getPathParamsForCorner({\n cornerSmoothing,\n preserveSmoothing,\n cornerRadius: bottomRight.radius,\n roundingAndSmoothingBudget: bottomRight.roundingAndSmoothingBudget\n }),\n bottomLeftPathParams: getPathParamsForCorner({\n cornerSmoothing,\n preserveSmoothing,\n cornerRadius: bottomLeft.radius,\n roundingAndSmoothingBudget: bottomLeft.roundingAndSmoothingBudget\n })\n });\n}\nexport {\n getSvgPath\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\n\nlet ChunkStream = (module.exports = function () {\n Stream.call(this);\n\n this._buffers = [];\n this._buffered = 0;\n\n this._reads = [];\n this._paused = false;\n\n this._encoding = \"utf8\";\n this.writable = true;\n});\nutil.inherits(ChunkStream, Stream);\n\nChunkStream.prototype.read = function (length, callback) {\n this._reads.push({\n length: Math.abs(length), // if length < 0 then at most this length\n allowLess: length < 0,\n func: callback,\n });\n\n process.nextTick(\n function () {\n this._process();\n\n // its paused and there is not enought data then ask for more\n if (this._paused && this._reads && this._reads.length > 0) {\n this._paused = false;\n\n this.emit(\"drain\");\n }\n }.bind(this)\n );\n};\n\nChunkStream.prototype.write = function (data, encoding) {\n if (!this.writable) {\n this.emit(\"error\", new Error(\"Stream not writable\"));\n return false;\n }\n\n let dataBuffer;\n if (Buffer.isBuffer(data)) {\n dataBuffer = data;\n } else {\n dataBuffer = Buffer.from(data, encoding || this._encoding);\n }\n\n this._buffers.push(dataBuffer);\n this._buffered += dataBuffer.length;\n\n this._process();\n\n // ok if there are no more read requests\n if (this._reads && this._reads.length === 0) {\n this._paused = true;\n }\n\n return this.writable && !this._paused;\n};\n\nChunkStream.prototype.end = function (data, encoding) {\n if (data) {\n this.write(data, encoding);\n }\n\n this.writable = false;\n\n // already destroyed\n if (!this._buffers) {\n return;\n }\n\n // enqueue or handle end\n if (this._buffers.length === 0) {\n this._end();\n } else {\n this._buffers.push(null);\n this._process();\n }\n};\n\nChunkStream.prototype.destroySoon = ChunkStream.prototype.end;\n\nChunkStream.prototype._end = function () {\n if (this._reads.length > 0) {\n this.emit(\"error\", new Error(\"Unexpected end of input\"));\n }\n\n this.destroy();\n};\n\nChunkStream.prototype.destroy = function () {\n if (!this._buffers) {\n return;\n }\n\n this.writable = false;\n this._reads = null;\n this._buffers = null;\n\n this.emit(\"close\");\n};\n\nChunkStream.prototype._processReadAllowingLess = function (read) {\n // ok there is any data so that we can satisfy this request\n this._reads.shift(); // == read\n\n // first we need to peek into first buffer\n let smallerBuf = this._buffers[0];\n\n // ok there is more data than we need\n if (smallerBuf.length > read.length) {\n this._buffered -= read.length;\n this._buffers[0] = smallerBuf.slice(read.length);\n\n read.func.call(this, smallerBuf.slice(0, read.length));\n } else {\n // ok this is less than maximum length so use it all\n this._buffered -= smallerBuf.length;\n this._buffers.shift(); // == smallerBuf\n\n read.func.call(this, smallerBuf);\n }\n};\n\nChunkStream.prototype._processRead = function (read) {\n this._reads.shift(); // == read\n\n let pos = 0;\n let count = 0;\n let data = Buffer.alloc(read.length);\n\n // create buffer for all data\n while (pos < read.length) {\n let buf = this._buffers[count++];\n let len = Math.min(buf.length, read.length - pos);\n\n buf.copy(data, pos, 0, len);\n pos += len;\n\n // last buffer wasn't used all so just slice it and leave\n if (len !== buf.length) {\n this._buffers[--count] = buf.slice(len);\n }\n }\n\n // remove all used buffers\n if (count > 0) {\n this._buffers.splice(0, count);\n }\n\n this._buffered -= read.length;\n\n read.func.call(this, data);\n};\n\nChunkStream.prototype._process = function () {\n try {\n // as long as there is any data and read requests\n while (this._buffered > 0 && this._reads && this._reads.length > 0) {\n let read = this._reads[0];\n\n // read any data (but no more than length)\n if (read.allowLess) {\n this._processReadAllowingLess(read);\n } else if (this._buffered >= read.length) {\n // ok we can meet some expectations\n\n this._processRead(read);\n } else {\n // not enought data to satisfy first request in queue\n // so we need to wait for more\n break;\n }\n }\n\n if (this._buffers && !this.writable) {\n this._end();\n }\n } catch (ex) {\n this.emit(\"error\", ex);\n }\n};\n","\"use strict\";\n\n// Adam 7\n// 0 1 2 3 4 5 6 7\n// 0 x 6 4 6 x 6 4 6\n// 1 7 7 7 7 7 7 7 7\n// 2 5 6 5 6 5 6 5 6\n// 3 7 7 7 7 7 7 7 7\n// 4 3 6 4 6 3 6 4 6\n// 5 7 7 7 7 7 7 7 7\n// 6 5 6 5 6 5 6 5 6\n// 7 7 7 7 7 7 7 7 7\n\nlet imagePasses = [\n {\n // pass 1 - 1px\n x: [0],\n y: [0],\n },\n {\n // pass 2 - 1px\n x: [4],\n y: [0],\n },\n {\n // pass 3 - 2px\n x: [0, 4],\n y: [4],\n },\n {\n // pass 4 - 4px\n x: [2, 6],\n y: [0, 4],\n },\n {\n // pass 5 - 8px\n x: [0, 2, 4, 6],\n y: [2, 6],\n },\n {\n // pass 6 - 16px\n x: [1, 3, 5, 7],\n y: [0, 2, 4, 6],\n },\n {\n // pass 7 - 32px\n x: [0, 1, 2, 3, 4, 5, 6, 7],\n y: [1, 3, 5, 7],\n },\n];\n\nexports.getImagePasses = function (width, height) {\n let images = [];\n let xLeftOver = width % 8;\n let yLeftOver = height % 8;\n let xRepeats = (width - xLeftOver) / 8;\n let yRepeats = (height - yLeftOver) / 8;\n for (let i = 0; i < imagePasses.length; i++) {\n let pass = imagePasses[i];\n let passWidth = xRepeats * pass.x.length;\n let passHeight = yRepeats * pass.y.length;\n for (let j = 0; j < pass.x.length; j++) {\n if (pass.x[j] < xLeftOver) {\n passWidth++;\n } else {\n break;\n }\n }\n for (let j = 0; j < pass.y.length; j++) {\n if (pass.y[j] < yLeftOver) {\n passHeight++;\n } else {\n break;\n }\n }\n if (passWidth > 0 && passHeight > 0) {\n images.push({ width: passWidth, height: passHeight, index: i });\n }\n }\n return images;\n};\n\nexports.getInterlaceIterator = function (width) {\n return function (x, y, pass) {\n let outerXLeftOver = x % imagePasses[pass].x.length;\n let outerX =\n ((x - outerXLeftOver) / imagePasses[pass].x.length) * 8 +\n imagePasses[pass].x[outerXLeftOver];\n let outerYLeftOver = y % imagePasses[pass].y.length;\n let outerY =\n ((y - outerYLeftOver) / imagePasses[pass].y.length) * 8 +\n imagePasses[pass].y[outerYLeftOver];\n return outerX * 4 + outerY * width * 4;\n };\n};\n","\"use strict\";\n\nmodule.exports = function paethPredictor(left, above, upLeft) {\n let paeth = left + above - upLeft;\n let pLeft = Math.abs(paeth - left);\n let pAbove = Math.abs(paeth - above);\n let pUpLeft = Math.abs(paeth - upLeft);\n\n if (pLeft <= pAbove && pLeft <= pUpLeft) {\n return left;\n }\n if (pAbove <= pUpLeft) {\n return above;\n }\n return upLeft;\n};\n","\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction getByteWidth(width, bpp, depth) {\n let byteWidth = width * bpp;\n if (depth !== 8) {\n byteWidth = Math.ceil(byteWidth / (8 / depth));\n }\n return byteWidth;\n}\n\nlet Filter = (module.exports = function (bitmapInfo, dependencies) {\n let width = bitmapInfo.width;\n let height = bitmapInfo.height;\n let interlace = bitmapInfo.interlace;\n let bpp = bitmapInfo.bpp;\n let depth = bitmapInfo.depth;\n\n this.read = dependencies.read;\n this.write = dependencies.write;\n this.complete = dependencies.complete;\n\n this._imageIndex = 0;\n this._images = [];\n if (interlace) {\n let passes = interlaceUtils.getImagePasses(width, height);\n for (let i = 0; i < passes.length; i++) {\n this._images.push({\n byteWidth: getByteWidth(passes[i].width, bpp, depth),\n height: passes[i].height,\n lineIndex: 0,\n });\n }\n } else {\n this._images.push({\n byteWidth: getByteWidth(width, bpp, depth),\n height: height,\n lineIndex: 0,\n });\n }\n\n // when filtering the line we look at the pixel to the left\n // the spec also says it is done on a byte level regardless of the number of pixels\n // so if the depth is byte compatible (8 or 16) we subtract the bpp in order to compare back\n // a pixel rather than just a different byte part. However if we are sub byte, we ignore.\n if (depth === 8) {\n this._xComparison = bpp;\n } else if (depth === 16) {\n this._xComparison = bpp * 2;\n } else {\n this._xComparison = 1;\n }\n});\n\nFilter.prototype.start = function () {\n this.read(\n this._images[this._imageIndex].byteWidth + 1,\n this._reverseFilterLine.bind(this)\n );\n};\n\nFilter.prototype._unFilterType1 = function (\n rawData,\n unfilteredLine,\n byteWidth\n) {\n let xComparison = this._xComparison;\n let xBiggerThan = xComparison - 1;\n\n for (let x = 0; x < byteWidth; x++) {\n let rawByte = rawData[1 + x];\n let f1Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n unfilteredLine[x] = rawByte + f1Left;\n }\n};\n\nFilter.prototype._unFilterType2 = function (\n rawData,\n unfilteredLine,\n byteWidth\n) {\n let lastLine = this._lastLine;\n\n for (let x = 0; x < byteWidth; x++) {\n let rawByte = rawData[1 + x];\n let f2Up = lastLine ? lastLine[x] : 0;\n unfilteredLine[x] = rawByte + f2Up;\n }\n};\n\nFilter.prototype._unFilterType3 = function (\n rawData,\n unfilteredLine,\n byteWidth\n) {\n let xComparison = this._xComparison;\n let xBiggerThan = xComparison - 1;\n let lastLine = this._lastLine;\n\n for (let x = 0; x < byteWidth; x++) {\n let rawByte = rawData[1 + x];\n let f3Up = lastLine ? lastLine[x] : 0;\n let f3Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n let f3Add = Math.floor((f3Left + f3Up) / 2);\n unfilteredLine[x] = rawByte + f3Add;\n }\n};\n\nFilter.prototype._unFilterType4 = function (\n rawData,\n unfilteredLine,\n byteWidth\n) {\n let xComparison = this._xComparison;\n let xBiggerThan = xComparison - 1;\n let lastLine = this._lastLine;\n\n for (let x = 0; x < byteWidth; x++) {\n let rawByte = rawData[1 + x];\n let f4Up = lastLine ? lastLine[x] : 0;\n let f4Left = x > xBiggerThan ? unfilteredLine[x - xComparison] : 0;\n let f4UpLeft = x > xBiggerThan && lastLine ? lastLine[x - xComparison] : 0;\n let f4Add = paethPredictor(f4Left, f4Up, f4UpLeft);\n unfilteredLine[x] = rawByte + f4Add;\n }\n};\n\nFilter.prototype._reverseFilterLine = function (rawData) {\n let filter = rawData[0];\n let unfilteredLine;\n let currentImage = this._images[this._imageIndex];\n let byteWidth = currentImage.byteWidth;\n\n if (filter === 0) {\n unfilteredLine = rawData.slice(1, byteWidth + 1);\n } else {\n unfilteredLine = Buffer.alloc(byteWidth);\n\n switch (filter) {\n case 1:\n this._unFilterType1(rawData, unfilteredLine, byteWidth);\n break;\n case 2:\n this._unFilterType2(rawData, unfilteredLine, byteWidth);\n break;\n case 3:\n this._unFilterType3(rawData, unfilteredLine, byteWidth);\n break;\n case 4:\n this._unFilterType4(rawData, unfilteredLine, byteWidth);\n break;\n default:\n throw new Error(\"Unrecognised filter type - \" + filter);\n }\n }\n\n this.write(unfilteredLine);\n\n currentImage.lineIndex++;\n if (currentImage.lineIndex >= currentImage.height) {\n this._lastLine = null;\n this._imageIndex++;\n currentImage = this._images[this._imageIndex];\n } else {\n this._lastLine = unfilteredLine;\n }\n\n if (currentImage) {\n // read, using the byte width that may be from the new current image\n this.read(currentImage.byteWidth + 1, this._reverseFilterLine.bind(this));\n } else {\n this._lastLine = null;\n this.complete();\n }\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet ChunkStream = require(\"./chunkstream\");\nlet Filter = require(\"./filter-parse\");\n\nlet FilterAsync = (module.exports = function (bitmapInfo) {\n ChunkStream.call(this);\n\n let buffers = [];\n let that = this;\n this._filter = new Filter(bitmapInfo, {\n read: this.read.bind(this),\n write: function (buffer) {\n buffers.push(buffer);\n },\n complete: function () {\n that.emit(\"complete\", Buffer.concat(buffers));\n },\n });\n\n this._filter.start();\n});\nutil.inherits(FilterAsync, ChunkStream);\n","\"use strict\";\n\nmodule.exports = {\n PNG_SIGNATURE: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a],\n\n TYPE_IHDR: 0x49484452,\n TYPE_IEND: 0x49454e44,\n TYPE_IDAT: 0x49444154,\n TYPE_PLTE: 0x504c5445,\n TYPE_tRNS: 0x74524e53, // eslint-disable-line camelcase\n TYPE_gAMA: 0x67414d41, // eslint-disable-line camelcase\n\n // color-type bits\n COLORTYPE_GRAYSCALE: 0,\n COLORTYPE_PALETTE: 1,\n COLORTYPE_COLOR: 2,\n COLORTYPE_ALPHA: 4, // e.g. grayscale and alpha\n\n // color-type combinations\n COLORTYPE_PALETTE_COLOR: 3,\n COLORTYPE_COLOR_ALPHA: 6,\n\n COLORTYPE_TO_BPP_MAP: {\n 0: 1,\n 2: 3,\n 3: 1,\n 4: 2,\n 6: 4,\n },\n\n GAMMA_DIVISION: 100000,\n};\n","\"use strict\";\n\nlet crcTable = [];\n\n(function () {\n for (let i = 0; i < 256; i++) {\n let currentCrc = i;\n for (let j = 0; j < 8; j++) {\n if (currentCrc & 1) {\n currentCrc = 0xedb88320 ^ (currentCrc >>> 1);\n } else {\n currentCrc = currentCrc >>> 1;\n }\n }\n crcTable[i] = currentCrc;\n }\n})();\n\nlet CrcCalculator = (module.exports = function () {\n this._crc = -1;\n});\n\nCrcCalculator.prototype.write = function (data) {\n for (let i = 0; i < data.length; i++) {\n this._crc = crcTable[(this._crc ^ data[i]) & 0xff] ^ (this._crc >>> 8);\n }\n return true;\n};\n\nCrcCalculator.prototype.crc32 = function () {\n return this._crc ^ -1;\n};\n\nCrcCalculator.crc32 = function (buf) {\n let crc = -1;\n for (let i = 0; i < buf.length; i++) {\n crc = crcTable[(crc ^ buf[i]) & 0xff] ^ (crc >>> 8);\n }\n return crc ^ -1;\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcCalculator = require(\"./crc\");\n\nlet Parser = (module.exports = function (options, dependencies) {\n this._options = options;\n options.checkCRC = options.checkCRC !== false;\n\n this._hasIHDR = false;\n this._hasIEND = false;\n this._emittedHeadersFinished = false;\n\n // input flags/metadata\n this._palette = [];\n this._colorType = 0;\n\n this._chunks = {};\n this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);\n this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);\n this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);\n this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);\n this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);\n this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);\n\n this.read = dependencies.read;\n this.error = dependencies.error;\n this.metadata = dependencies.metadata;\n this.gamma = dependencies.gamma;\n this.transColor = dependencies.transColor;\n this.palette = dependencies.palette;\n this.parsed = dependencies.parsed;\n this.inflateData = dependencies.inflateData;\n this.finished = dependencies.finished;\n this.simpleTransparency = dependencies.simpleTransparency;\n this.headersFinished = dependencies.headersFinished || function () {};\n});\n\nParser.prototype.start = function () {\n this.read(constants.PNG_SIGNATURE.length, this._parseSignature.bind(this));\n};\n\nParser.prototype._parseSignature = function (data) {\n let signature = constants.PNG_SIGNATURE;\n\n for (let i = 0; i < signature.length; i++) {\n if (data[i] !== signature[i]) {\n this.error(new Error(\"Invalid file signature\"));\n return;\n }\n }\n this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._parseChunkBegin = function (data) {\n // chunk content length\n let length = data.readUInt32BE(0);\n\n // chunk type\n let type = data.readUInt32BE(4);\n let name = \"\";\n for (let i = 4; i < 8; i++) {\n name += String.fromCharCode(data[i]);\n }\n\n //console.log('chunk ', name, length);\n\n // chunk flags\n let ancillary = Boolean(data[4] & 0x20); // or critical\n // priv = Boolean(data[5] & 0x20), // or public\n // safeToCopy = Boolean(data[7] & 0x20); // or unsafe\n\n if (!this._hasIHDR && type !== constants.TYPE_IHDR) {\n this.error(new Error(\"Expected IHDR on beggining\"));\n return;\n }\n\n this._crc = new CrcCalculator();\n this._crc.write(Buffer.from(name));\n\n if (this._chunks[type]) {\n return this._chunks[type](length);\n }\n\n if (!ancillary) {\n this.error(new Error(\"Unsupported critical chunk type \" + name));\n return;\n }\n\n this.read(length + 4, this._skipChunk.bind(this));\n};\n\nParser.prototype._skipChunk = function (/*data*/) {\n this.read(8, this._parseChunkBegin.bind(this));\n};\n\nParser.prototype._handleChunkEnd = function () {\n this.read(4, this._parseChunkEnd.bind(this));\n};\n\nParser.prototype._parseChunkEnd = function (data) {\n let fileCrc = data.readInt32BE(0);\n let calcCrc = this._crc.crc32();\n\n // check CRC\n if (this._options.checkCRC && calcCrc !== fileCrc) {\n this.error(new Error(\"Crc error - \" + fileCrc + \" - \" + calcCrc));\n return;\n }\n\n if (!this._hasIEND) {\n this.read(8, this._parseChunkBegin.bind(this));\n }\n};\n\nParser.prototype._handleIHDR = function (length) {\n this.read(length, this._parseIHDR.bind(this));\n};\nParser.prototype._parseIHDR = function (data) {\n this._crc.write(data);\n\n let width = data.readUInt32BE(0);\n let height = data.readUInt32BE(4);\n let depth = data[8];\n let colorType = data[9]; // bits: 1 palette, 2 color, 4 alpha\n let compr = data[10];\n let filter = data[11];\n let interlace = data[12];\n\n // console.log(' width', width, 'height', height,\n // 'depth', depth, 'colorType', colorType,\n // 'compr', compr, 'filter', filter, 'interlace', interlace\n // );\n\n if (\n depth !== 8 &&\n depth !== 4 &&\n depth !== 2 &&\n depth !== 1 &&\n depth !== 16\n ) {\n this.error(new Error(\"Unsupported bit depth \" + depth));\n return;\n }\n if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {\n this.error(new Error(\"Unsupported color type\"));\n return;\n }\n if (compr !== 0) {\n this.error(new Error(\"Unsupported compression method\"));\n return;\n }\n if (filter !== 0) {\n this.error(new Error(\"Unsupported filter method\"));\n return;\n }\n if (interlace !== 0 && interlace !== 1) {\n this.error(new Error(\"Unsupported interlace method\"));\n return;\n }\n\n this._colorType = colorType;\n\n let bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];\n\n this._hasIHDR = true;\n\n this.metadata({\n width: width,\n height: height,\n depth: depth,\n interlace: Boolean(interlace),\n palette: Boolean(colorType & constants.COLORTYPE_PALETTE),\n color: Boolean(colorType & constants.COLORTYPE_COLOR),\n alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),\n bpp: bpp,\n colorType: colorType,\n });\n\n this._handleChunkEnd();\n};\n\nParser.prototype._handlePLTE = function (length) {\n this.read(length, this._parsePLTE.bind(this));\n};\nParser.prototype._parsePLTE = function (data) {\n this._crc.write(data);\n\n let entries = Math.floor(data.length / 3);\n // console.log('Palette:', entries);\n\n for (let i = 0; i < entries; i++) {\n this._palette.push([data[i * 3], data[i * 3 + 1], data[i * 3 + 2], 0xff]);\n }\n\n this.palette(this._palette);\n\n this._handleChunkEnd();\n};\n\nParser.prototype._handleTRNS = function (length) {\n this.simpleTransparency();\n this.read(length, this._parseTRNS.bind(this));\n};\nParser.prototype._parseTRNS = function (data) {\n this._crc.write(data);\n\n // palette\n if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {\n if (this._palette.length === 0) {\n this.error(new Error(\"Transparency chunk must be after palette\"));\n return;\n }\n if (data.length > this._palette.length) {\n this.error(new Error(\"More transparent colors than palette size\"));\n return;\n }\n for (let i = 0; i < data.length; i++) {\n this._palette[i][3] = data[i];\n }\n this.palette(this._palette);\n }\n\n // for colorType 0 (grayscale) and 2 (rgb)\n // there might be one gray/color defined as transparent\n if (this._colorType === constants.COLORTYPE_GRAYSCALE) {\n // grey, 2 bytes\n this.transColor([data.readUInt16BE(0)]);\n }\n if (this._colorType === constants.COLORTYPE_COLOR) {\n this.transColor([\n data.readUInt16BE(0),\n data.readUInt16BE(2),\n data.readUInt16BE(4),\n ]);\n }\n\n this._handleChunkEnd();\n};\n\nParser.prototype._handleGAMA = function (length) {\n this.read(length, this._parseGAMA.bind(this));\n};\nParser.prototype._parseGAMA = function (data) {\n this._crc.write(data);\n this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);\n\n this._handleChunkEnd();\n};\n\nParser.prototype._handleIDAT = function (length) {\n if (!this._emittedHeadersFinished) {\n this._emittedHeadersFinished = true;\n this.headersFinished();\n }\n this.read(-length, this._parseIDAT.bind(this, length));\n};\nParser.prototype._parseIDAT = function (length, data) {\n this._crc.write(data);\n\n if (\n this._colorType === constants.COLORTYPE_PALETTE_COLOR &&\n this._palette.length === 0\n ) {\n throw new Error(\"Expected palette not found\");\n }\n\n this.inflateData(data);\n let leftOverLength = length - data.length;\n\n if (leftOverLength > 0) {\n this._handleIDAT(leftOverLength);\n } else {\n this._handleChunkEnd();\n }\n};\n\nParser.prototype._handleIEND = function (length) {\n this.read(length, this._parseIEND.bind(this));\n};\nParser.prototype._parseIEND = function (data) {\n this._crc.write(data);\n\n this._hasIEND = true;\n this._handleChunkEnd();\n\n if (this.finished) {\n this.finished();\n }\n};\n","\"use strict\";\n\nlet interlaceUtils = require(\"./interlace\");\n\nlet pixelBppMapper = [\n // 0 - dummy entry\n function () {},\n\n // 1 - L\n // 0: 0, 1: 0, 2: 0, 3: 0xff\n function (pxData, data, pxPos, rawPos) {\n if (rawPos === data.length) {\n throw new Error(\"Ran out of data\");\n }\n\n let pixel = data[rawPos];\n pxData[pxPos] = pixel;\n pxData[pxPos + 1] = pixel;\n pxData[pxPos + 2] = pixel;\n pxData[pxPos + 3] = 0xff;\n },\n\n // 2 - LA\n // 0: 0, 1: 0, 2: 0, 3: 1\n function (pxData, data, pxPos, rawPos) {\n if (rawPos + 1 >= data.length) {\n throw new Error(\"Ran out of data\");\n }\n\n let pixel = data[rawPos];\n pxData[pxPos] = pixel;\n pxData[pxPos + 1] = pixel;\n pxData[pxPos + 2] = pixel;\n pxData[pxPos + 3] = data[rawPos + 1];\n },\n\n // 3 - RGB\n // 0: 0, 1: 1, 2: 2, 3: 0xff\n function (pxData, data, pxPos, rawPos) {\n if (rawPos + 2 >= data.length) {\n throw new Error(\"Ran out of data\");\n }\n\n pxData[pxPos] = data[rawPos];\n pxData[pxPos + 1] = data[rawPos + 1];\n pxData[pxPos + 2] = data[rawPos + 2];\n pxData[pxPos + 3] = 0xff;\n },\n\n // 4 - RGBA\n // 0: 0, 1: 1, 2: 2, 3: 3\n function (pxData, data, pxPos, rawPos) {\n if (rawPos + 3 >= data.length) {\n throw new Error(\"Ran out of data\");\n }\n\n pxData[pxPos] = data[rawPos];\n pxData[pxPos + 1] = data[rawPos + 1];\n pxData[pxPos + 2] = data[rawPos + 2];\n pxData[pxPos + 3] = data[rawPos + 3];\n },\n];\n\nlet pixelBppCustomMapper = [\n // 0 - dummy entry\n function () {},\n\n // 1 - L\n // 0: 0, 1: 0, 2: 0, 3: 0xff\n function (pxData, pixelData, pxPos, maxBit) {\n let pixel = pixelData[0];\n pxData[pxPos] = pixel;\n pxData[pxPos + 1] = pixel;\n pxData[pxPos + 2] = pixel;\n pxData[pxPos + 3] = maxBit;\n },\n\n // 2 - LA\n // 0: 0, 1: 0, 2: 0, 3: 1\n function (pxData, pixelData, pxPos) {\n let pixel = pixelData[0];\n pxData[pxPos] = pixel;\n pxData[pxPos + 1] = pixel;\n pxData[pxPos + 2] = pixel;\n pxData[pxPos + 3] = pixelData[1];\n },\n\n // 3 - RGB\n // 0: 0, 1: 1, 2: 2, 3: 0xff\n function (pxData, pixelData, pxPos, maxBit) {\n pxData[pxPos] = pixelData[0];\n pxData[pxPos + 1] = pixelData[1];\n pxData[pxPos + 2] = pixelData[2];\n pxData[pxPos + 3] = maxBit;\n },\n\n // 4 - RGBA\n // 0: 0, 1: 1, 2: 2, 3: 3\n function (pxData, pixelData, pxPos) {\n pxData[pxPos] = pixelData[0];\n pxData[pxPos + 1] = pixelData[1];\n pxData[pxPos + 2] = pixelData[2];\n pxData[pxPos + 3] = pixelData[3];\n },\n];\n\nfunction bitRetriever(data, depth) {\n let leftOver = [];\n let i = 0;\n\n function split() {\n if (i === data.length) {\n throw new Error(\"Ran out of data\");\n }\n let byte = data[i];\n i++;\n let byte8, byte7, byte6, byte5, byte4, byte3, byte2, byte1;\n switch (depth) {\n default:\n throw new Error(\"unrecognised depth\");\n case 16:\n byte2 = data[i];\n i++;\n leftOver.push((byte << 8) + byte2);\n break;\n case 4:\n byte2 = byte & 0x0f;\n byte1 = byte >> 4;\n leftOver.push(byte1, byte2);\n break;\n case 2:\n byte4 = byte & 3;\n byte3 = (byte >> 2) & 3;\n byte2 = (byte >> 4) & 3;\n byte1 = (byte >> 6) & 3;\n leftOver.push(byte1, byte2, byte3, byte4);\n break;\n case 1:\n byte8 = byte & 1;\n byte7 = (byte >> 1) & 1;\n byte6 = (byte >> 2) & 1;\n byte5 = (byte >> 3) & 1;\n byte4 = (byte >> 4) & 1;\n byte3 = (byte >> 5) & 1;\n byte2 = (byte >> 6) & 1;\n byte1 = (byte >> 7) & 1;\n leftOver.push(byte1, byte2, byte3, byte4, byte5, byte6, byte7, byte8);\n break;\n }\n }\n\n return {\n get: function (count) {\n while (leftOver.length < count) {\n split();\n }\n let returner = leftOver.slice(0, count);\n leftOver = leftOver.slice(count);\n return returner;\n },\n resetAfterLine: function () {\n leftOver.length = 0;\n },\n end: function () {\n if (i !== data.length) {\n throw new Error(\"extra data found\");\n }\n },\n };\n}\n\nfunction mapImage8Bit(image, pxData, getPxPos, bpp, data, rawPos) {\n // eslint-disable-line max-params\n let imageWidth = image.width;\n let imageHeight = image.height;\n let imagePass = image.index;\n for (let y = 0; y < imageHeight; y++) {\n for (let x = 0; x < imageWidth; x++) {\n let pxPos = getPxPos(x, y, imagePass);\n pixelBppMapper[bpp](pxData, data, pxPos, rawPos);\n rawPos += bpp; //eslint-disable-line no-param-reassign\n }\n }\n return rawPos;\n}\n\nfunction mapImageCustomBit(image, pxData, getPxPos, bpp, bits, maxBit) {\n // eslint-disable-line max-params\n let imageWidth = image.width;\n let imageHeight = image.height;\n let imagePass = image.index;\n for (let y = 0; y < imageHeight; y++) {\n for (let x = 0; x < imageWidth; x++) {\n let pixelData = bits.get(bpp);\n let pxPos = getPxPos(x, y, imagePass);\n pixelBppCustomMapper[bpp](pxData, pixelData, pxPos, maxBit);\n }\n bits.resetAfterLine();\n }\n}\n\nexports.dataToBitMap = function (data, bitmapInfo) {\n let width = bitmapInfo.width;\n let height = bitmapInfo.height;\n let depth = bitmapInfo.depth;\n let bpp = bitmapInfo.bpp;\n let interlace = bitmapInfo.interlace;\n let bits;\n\n if (depth !== 8) {\n bits = bitRetriever(data, depth);\n }\n let pxData;\n if (depth <= 8) {\n pxData = Buffer.alloc(width * height * 4);\n } else {\n pxData = new Uint16Array(width * height * 4);\n }\n let maxBit = Math.pow(2, depth) - 1;\n let rawPos = 0;\n let images;\n let getPxPos;\n\n if (interlace) {\n images = interlaceUtils.getImagePasses(width, height);\n getPxPos = interlaceUtils.getInterlaceIterator(width, height);\n } else {\n let nonInterlacedPxPos = 0;\n getPxPos = function () {\n let returner = nonInterlacedPxPos;\n nonInterlacedPxPos += 4;\n return returner;\n };\n images = [{ width: width, height: height }];\n }\n\n for (let imageIndex = 0; imageIndex < images.length; imageIndex++) {\n if (depth === 8) {\n rawPos = mapImage8Bit(\n images[imageIndex],\n pxData,\n getPxPos,\n bpp,\n data,\n rawPos\n );\n } else {\n mapImageCustomBit(\n images[imageIndex],\n pxData,\n getPxPos,\n bpp,\n bits,\n maxBit\n );\n }\n }\n if (depth === 8) {\n if (rawPos !== data.length) {\n throw new Error(\"extra data found\");\n }\n } else {\n bits.end();\n }\n\n return pxData;\n};\n","\"use strict\";\n\nfunction dePalette(indata, outdata, width, height, palette) {\n let pxPos = 0;\n // use values from palette\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let color = palette[indata[pxPos]];\n\n if (!color) {\n throw new Error(\"index \" + indata[pxPos] + \" not in palette\");\n }\n\n for (let i = 0; i < 4; i++) {\n outdata[pxPos + i] = color[i];\n }\n pxPos += 4;\n }\n }\n}\n\nfunction replaceTransparentColor(indata, outdata, width, height, transColor) {\n let pxPos = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let makeTrans = false;\n\n if (transColor.length === 1) {\n if (transColor[0] === indata[pxPos]) {\n makeTrans = true;\n }\n } else if (\n transColor[0] === indata[pxPos] &&\n transColor[1] === indata[pxPos + 1] &&\n transColor[2] === indata[pxPos + 2]\n ) {\n makeTrans = true;\n }\n if (makeTrans) {\n for (let i = 0; i < 4; i++) {\n outdata[pxPos + i] = 0;\n }\n }\n pxPos += 4;\n }\n }\n}\n\nfunction scaleDepth(indata, outdata, width, height, depth) {\n let maxOutSample = 255;\n let maxInSample = Math.pow(2, depth) - 1;\n let pxPos = 0;\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n for (let i = 0; i < 4; i++) {\n outdata[pxPos + i] = Math.floor(\n (indata[pxPos + i] * maxOutSample) / maxInSample + 0.5\n );\n }\n pxPos += 4;\n }\n }\n}\n\nmodule.exports = function (indata, imageData, skipRescale = false) {\n let depth = imageData.depth;\n let width = imageData.width;\n let height = imageData.height;\n let colorType = imageData.colorType;\n let transColor = imageData.transColor;\n let palette = imageData.palette;\n\n let outdata = indata; // only different for 16 bits\n\n if (colorType === 3) {\n // paletted\n dePalette(indata, outdata, width, height, palette);\n } else {\n if (transColor) {\n replaceTransparentColor(indata, outdata, width, height, transColor);\n }\n // if it needs scaling\n if (depth !== 8 && !skipRescale) {\n // if we need to change the buffer size\n if (depth === 16) {\n outdata = Buffer.alloc(width * height * 4);\n }\n scaleDepth(indata, outdata, width, height, depth);\n }\n }\n return outdata;\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet zlib = require(\"zlib\");\nlet ChunkStream = require(\"./chunkstream\");\nlet FilterAsync = require(\"./filter-parse-async\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nlet ParserAsync = (module.exports = function (options) {\n ChunkStream.call(this);\n\n this._parser = new Parser(options, {\n read: this.read.bind(this),\n error: this._handleError.bind(this),\n metadata: this._handleMetaData.bind(this),\n gamma: this.emit.bind(this, \"gamma\"),\n palette: this._handlePalette.bind(this),\n transColor: this._handleTransColor.bind(this),\n finished: this._finished.bind(this),\n inflateData: this._inflateData.bind(this),\n simpleTransparency: this._simpleTransparency.bind(this),\n headersFinished: this._headersFinished.bind(this),\n });\n this._options = options;\n this.writable = true;\n\n this._parser.start();\n});\nutil.inherits(ParserAsync, ChunkStream);\n\nParserAsync.prototype._handleError = function (err) {\n this.emit(\"error\", err);\n\n this.writable = false;\n\n this.destroy();\n\n if (this._inflate && this._inflate.destroy) {\n this._inflate.destroy();\n }\n\n if (this._filter) {\n this._filter.destroy();\n // For backward compatibility with Node 7 and below.\n // Suppress errors due to _inflate calling write() even after\n // it's destroy()'ed.\n this._filter.on(\"error\", function () {});\n }\n\n this.errord = true;\n};\n\nParserAsync.prototype._inflateData = function (data) {\n if (!this._inflate) {\n if (this._bitmapInfo.interlace) {\n this._inflate = zlib.createInflate();\n\n this._inflate.on(\"error\", this.emit.bind(this, \"error\"));\n this._filter.on(\"complete\", this._complete.bind(this));\n\n this._inflate.pipe(this._filter);\n } else {\n let rowSize =\n ((this._bitmapInfo.width *\n this._bitmapInfo.bpp *\n this._bitmapInfo.depth +\n 7) >>\n 3) +\n 1;\n let imageSize = rowSize * this._bitmapInfo.height;\n let chunkSize = Math.max(imageSize, zlib.Z_MIN_CHUNK);\n\n this._inflate = zlib.createInflate({ chunkSize: chunkSize });\n let leftToInflate = imageSize;\n\n let emitError = this.emit.bind(this, \"error\");\n this._inflate.on(\"error\", function (err) {\n if (!leftToInflate) {\n return;\n }\n\n emitError(err);\n });\n this._filter.on(\"complete\", this._complete.bind(this));\n\n let filterWrite = this._filter.write.bind(this._filter);\n this._inflate.on(\"data\", function (chunk) {\n if (!leftToInflate) {\n return;\n }\n\n if (chunk.length > leftToInflate) {\n chunk = chunk.slice(0, leftToInflate);\n }\n\n leftToInflate -= chunk.length;\n\n filterWrite(chunk);\n });\n\n this._inflate.on(\"end\", this._filter.end.bind(this._filter));\n }\n }\n this._inflate.write(data);\n};\n\nParserAsync.prototype._handleMetaData = function (metaData) {\n this._metaData = metaData;\n this._bitmapInfo = Object.create(metaData);\n\n this._filter = new FilterAsync(this._bitmapInfo);\n};\n\nParserAsync.prototype._handleTransColor = function (transColor) {\n this._bitmapInfo.transColor = transColor;\n};\n\nParserAsync.prototype._handlePalette = function (palette) {\n this._bitmapInfo.palette = palette;\n};\n\nParserAsync.prototype._simpleTransparency = function () {\n this._metaData.alpha = true;\n};\n\nParserAsync.prototype._headersFinished = function () {\n // Up until this point, we don't know if we have a tRNS chunk (alpha)\n // so we can't emit metadata any earlier\n this.emit(\"metadata\", this._metaData);\n};\n\nParserAsync.prototype._finished = function () {\n if (this.errord) {\n return;\n }\n\n if (!this._inflate) {\n this.emit(\"error\", \"No Inflate block\");\n } else {\n // no more data to inflate\n this._inflate.end();\n }\n};\n\nParserAsync.prototype._complete = function (filteredData) {\n if (this.errord) {\n return;\n }\n\n let normalisedBitmapData;\n\n try {\n let bitmapData = bitmapper.dataToBitMap(filteredData, this._bitmapInfo);\n\n normalisedBitmapData = formatNormaliser(\n bitmapData,\n this._bitmapInfo,\n this._options.skipRescale\n );\n bitmapData = null;\n } catch (ex) {\n this._handleError(ex);\n return;\n }\n\n this.emit(\"parsed\", normalisedBitmapData);\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\n\nmodule.exports = function (dataIn, width, height, options) {\n let outHasAlpha =\n [constants.COLORTYPE_COLOR_ALPHA, constants.COLORTYPE_ALPHA].indexOf(\n options.colorType\n ) !== -1;\n if (options.colorType === options.inputColorType) {\n let bigEndian = (function () {\n let buffer = new ArrayBuffer(2);\n new DataView(buffer).setInt16(0, 256, true /* littleEndian */);\n // Int16Array uses the platform's endianness.\n return new Int16Array(buffer)[0] !== 256;\n })();\n // If no need to convert to grayscale and alpha is present/absent in both, take a fast route\n if (options.bitDepth === 8 || (options.bitDepth === 16 && bigEndian)) {\n return dataIn;\n }\n }\n\n // map to a UInt16 array if data is 16bit, fix endianness below\n let data = options.bitDepth !== 16 ? dataIn : new Uint16Array(dataIn.buffer);\n\n let maxValue = 255;\n let inBpp = constants.COLORTYPE_TO_BPP_MAP[options.inputColorType];\n if (inBpp === 4 && !options.inputHasAlpha) {\n inBpp = 3;\n }\n let outBpp = constants.COLORTYPE_TO_BPP_MAP[options.colorType];\n if (options.bitDepth === 16) {\n maxValue = 65535;\n outBpp *= 2;\n }\n let outData = Buffer.alloc(width * height * outBpp);\n\n let inIndex = 0;\n let outIndex = 0;\n\n let bgColor = options.bgColor || {};\n if (bgColor.red === undefined) {\n bgColor.red = maxValue;\n }\n if (bgColor.green === undefined) {\n bgColor.green = maxValue;\n }\n if (bgColor.blue === undefined) {\n bgColor.blue = maxValue;\n }\n\n function getRGBA() {\n let red;\n let green;\n let blue;\n let alpha = maxValue;\n switch (options.inputColorType) {\n case constants.COLORTYPE_COLOR_ALPHA:\n alpha = data[inIndex + 3];\n red = data[inIndex];\n green = data[inIndex + 1];\n blue = data[inIndex + 2];\n break;\n case constants.COLORTYPE_COLOR:\n red = data[inIndex];\n green = data[inIndex + 1];\n blue = data[inIndex + 2];\n break;\n case constants.COLORTYPE_ALPHA:\n alpha = data[inIndex + 1];\n red = data[inIndex];\n green = red;\n blue = red;\n break;\n case constants.COLORTYPE_GRAYSCALE:\n red = data[inIndex];\n green = red;\n blue = red;\n break;\n default:\n throw new Error(\n \"input color type:\" +\n options.inputColorType +\n \" is not supported at present\"\n );\n }\n\n if (options.inputHasAlpha) {\n if (!outHasAlpha) {\n alpha /= maxValue;\n red = Math.min(\n Math.max(Math.round((1 - alpha) * bgColor.red + alpha * red), 0),\n maxValue\n );\n green = Math.min(\n Math.max(Math.round((1 - alpha) * bgColor.green + alpha * green), 0),\n maxValue\n );\n blue = Math.min(\n Math.max(Math.round((1 - alpha) * bgColor.blue + alpha * blue), 0),\n maxValue\n );\n }\n }\n return { red: red, green: green, blue: blue, alpha: alpha };\n }\n\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n let rgba = getRGBA(data, inIndex);\n\n switch (options.colorType) {\n case constants.COLORTYPE_COLOR_ALPHA:\n case constants.COLORTYPE_COLOR:\n if (options.bitDepth === 8) {\n outData[outIndex] = rgba.red;\n outData[outIndex + 1] = rgba.green;\n outData[outIndex + 2] = rgba.blue;\n if (outHasAlpha) {\n outData[outIndex + 3] = rgba.alpha;\n }\n } else {\n outData.writeUInt16BE(rgba.red, outIndex);\n outData.writeUInt16BE(rgba.green, outIndex + 2);\n outData.writeUInt16BE(rgba.blue, outIndex + 4);\n if (outHasAlpha) {\n outData.writeUInt16BE(rgba.alpha, outIndex + 6);\n }\n }\n break;\n case constants.COLORTYPE_ALPHA:\n case constants.COLORTYPE_GRAYSCALE: {\n // Convert to grayscale and alpha\n let grayscale = (rgba.red + rgba.green + rgba.blue) / 3;\n if (options.bitDepth === 8) {\n outData[outIndex] = grayscale;\n if (outHasAlpha) {\n outData[outIndex + 1] = rgba.alpha;\n }\n } else {\n outData.writeUInt16BE(grayscale, outIndex);\n if (outHasAlpha) {\n outData.writeUInt16BE(rgba.alpha, outIndex + 2);\n }\n }\n break;\n }\n default:\n throw new Error(\"unrecognised color Type \" + options.colorType);\n }\n\n inIndex += inBpp;\n outIndex += outBpp;\n }\n }\n\n return outData;\n};\n","\"use strict\";\n\nlet paethPredictor = require(\"./paeth-predictor\");\n\nfunction filterNone(pxData, pxPos, byteWidth, rawData, rawPos) {\n for (let x = 0; x < byteWidth; x++) {\n rawData[rawPos + x] = pxData[pxPos + x];\n }\n}\n\nfunction filterSumNone(pxData, pxPos, byteWidth) {\n let sum = 0;\n let length = pxPos + byteWidth;\n\n for (let i = pxPos; i < length; i++) {\n sum += Math.abs(pxData[i]);\n }\n return sum;\n}\n\nfunction filterSub(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let val = pxData[pxPos + x] - left;\n\n rawData[rawPos + x] = val;\n }\n}\n\nfunction filterSumSub(pxData, pxPos, byteWidth, bpp) {\n let sum = 0;\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let val = pxData[pxPos + x] - left;\n\n sum += Math.abs(val);\n }\n\n return sum;\n}\n\nfunction filterUp(pxData, pxPos, byteWidth, rawData, rawPos) {\n for (let x = 0; x < byteWidth; x++) {\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let val = pxData[pxPos + x] - up;\n\n rawData[rawPos + x] = val;\n }\n}\n\nfunction filterSumUp(pxData, pxPos, byteWidth) {\n let sum = 0;\n let length = pxPos + byteWidth;\n for (let x = pxPos; x < length; x++) {\n let up = pxPos > 0 ? pxData[x - byteWidth] : 0;\n let val = pxData[x] - up;\n\n sum += Math.abs(val);\n }\n\n return sum;\n}\n\nfunction filterAvg(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n rawData[rawPos + x] = val;\n }\n}\n\nfunction filterSumAvg(pxData, pxPos, byteWidth, bpp) {\n let sum = 0;\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let val = pxData[pxPos + x] - ((left + up) >> 1);\n\n sum += Math.abs(val);\n }\n\n return sum;\n}\n\nfunction filterPaeth(pxData, pxPos, byteWidth, rawData, rawPos, bpp) {\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let upleft =\n pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n rawData[rawPos + x] = val;\n }\n}\n\nfunction filterSumPaeth(pxData, pxPos, byteWidth, bpp) {\n let sum = 0;\n for (let x = 0; x < byteWidth; x++) {\n let left = x >= bpp ? pxData[pxPos + x - bpp] : 0;\n let up = pxPos > 0 ? pxData[pxPos + x - byteWidth] : 0;\n let upleft =\n pxPos > 0 && x >= bpp ? pxData[pxPos + x - (byteWidth + bpp)] : 0;\n let val = pxData[pxPos + x] - paethPredictor(left, up, upleft);\n\n sum += Math.abs(val);\n }\n\n return sum;\n}\n\nlet filters = {\n 0: filterNone,\n 1: filterSub,\n 2: filterUp,\n 3: filterAvg,\n 4: filterPaeth,\n};\n\nlet filterSums = {\n 0: filterSumNone,\n 1: filterSumSub,\n 2: filterSumUp,\n 3: filterSumAvg,\n 4: filterSumPaeth,\n};\n\nmodule.exports = function (pxData, width, height, options, bpp) {\n let filterTypes;\n if (!(\"filterType\" in options) || options.filterType === -1) {\n filterTypes = [0, 1, 2, 3, 4];\n } else if (typeof options.filterType === \"number\") {\n filterTypes = [options.filterType];\n } else {\n throw new Error(\"unrecognised filter types\");\n }\n\n if (options.bitDepth === 16) {\n bpp *= 2;\n }\n let byteWidth = width * bpp;\n let rawPos = 0;\n let pxPos = 0;\n let rawData = Buffer.alloc((byteWidth + 1) * height);\n\n let sel = filterTypes[0];\n\n for (let y = 0; y < height; y++) {\n if (filterTypes.length > 1) {\n // find best filter for this line (with lowest sum of values)\n let min = Infinity;\n\n for (let i = 0; i < filterTypes.length; i++) {\n let sum = filterSums[filterTypes[i]](pxData, pxPos, byteWidth, bpp);\n if (sum < min) {\n sel = filterTypes[i];\n min = sum;\n }\n }\n }\n\n rawData[rawPos] = sel;\n rawPos++;\n filters[sel](pxData, pxPos, byteWidth, rawData, rawPos, bpp);\n rawPos += byteWidth;\n pxPos += byteWidth;\n }\n return rawData;\n};\n","\"use strict\";\n\nlet constants = require(\"./constants\");\nlet CrcStream = require(\"./crc\");\nlet bitPacker = require(\"./bitpacker\");\nlet filter = require(\"./filter-pack\");\nlet zlib = require(\"zlib\");\n\nlet Packer = (module.exports = function (options) {\n this._options = options;\n\n options.deflateChunkSize = options.deflateChunkSize || 32 * 1024;\n options.deflateLevel =\n options.deflateLevel != null ? options.deflateLevel : 9;\n options.deflateStrategy =\n options.deflateStrategy != null ? options.deflateStrategy : 3;\n options.inputHasAlpha =\n options.inputHasAlpha != null ? options.inputHasAlpha : true;\n options.deflateFactory = options.deflateFactory || zlib.createDeflate;\n options.bitDepth = options.bitDepth || 8;\n // This is outputColorType\n options.colorType =\n typeof options.colorType === \"number\"\n ? options.colorType\n : constants.COLORTYPE_COLOR_ALPHA;\n options.inputColorType =\n typeof options.inputColorType === \"number\"\n ? options.inputColorType\n : constants.COLORTYPE_COLOR_ALPHA;\n\n if (\n [\n constants.COLORTYPE_GRAYSCALE,\n constants.COLORTYPE_COLOR,\n constants.COLORTYPE_COLOR_ALPHA,\n constants.COLORTYPE_ALPHA,\n ].indexOf(options.colorType) === -1\n ) {\n throw new Error(\n \"option color type:\" + options.colorType + \" is not supported at present\"\n );\n }\n if (\n [\n constants.COLORTYPE_GRAYSCALE,\n constants.COLORTYPE_COLOR,\n constants.COLORTYPE_COLOR_ALPHA,\n constants.COLORTYPE_ALPHA,\n ].indexOf(options.inputColorType) === -1\n ) {\n throw new Error(\n \"option input color type:\" +\n options.inputColorType +\n \" is not supported at present\"\n );\n }\n if (options.bitDepth !== 8 && options.bitDepth !== 16) {\n throw new Error(\n \"option bit depth:\" + options.bitDepth + \" is not supported at present\"\n );\n }\n});\n\nPacker.prototype.getDeflateOptions = function () {\n return {\n chunkSize: this._options.deflateChunkSize,\n level: this._options.deflateLevel,\n strategy: this._options.deflateStrategy,\n };\n};\n\nPacker.prototype.createDeflate = function () {\n return this._options.deflateFactory(this.getDeflateOptions());\n};\n\nPacker.prototype.filterData = function (data, width, height) {\n // convert to correct format for filtering (e.g. right bpp and bit depth)\n let packedData = bitPacker(data, width, height, this._options);\n\n // filter pixel data\n let bpp = constants.COLORTYPE_TO_BPP_MAP[this._options.colorType];\n let filteredData = filter(packedData, width, height, this._options, bpp);\n return filteredData;\n};\n\nPacker.prototype._packChunk = function (type, data) {\n let len = data ? data.length : 0;\n let buf = Buffer.alloc(len + 12);\n\n buf.writeUInt32BE(len, 0);\n buf.writeUInt32BE(type, 4);\n\n if (data) {\n data.copy(buf, 8);\n }\n\n buf.writeInt32BE(\n CrcStream.crc32(buf.slice(4, buf.length - 4)),\n buf.length - 4\n );\n return buf;\n};\n\nPacker.prototype.packGAMA = function (gamma) {\n let buf = Buffer.alloc(4);\n buf.writeUInt32BE(Math.floor(gamma * constants.GAMMA_DIVISION), 0);\n return this._packChunk(constants.TYPE_gAMA, buf);\n};\n\nPacker.prototype.packIHDR = function (width, height) {\n let buf = Buffer.alloc(13);\n buf.writeUInt32BE(width, 0);\n buf.writeUInt32BE(height, 4);\n buf[8] = this._options.bitDepth; // Bit depth\n buf[9] = this._options.colorType; // colorType\n buf[10] = 0; // compression\n buf[11] = 0; // filter\n buf[12] = 0; // interlace\n\n return this._packChunk(constants.TYPE_IHDR, buf);\n};\n\nPacker.prototype.packIDAT = function (data) {\n return this._packChunk(constants.TYPE_IDAT, data);\n};\n\nPacker.prototype.packIEND = function () {\n return this._packChunk(constants.TYPE_IEND, null);\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nlet PackerAsync = (module.exports = function (opt) {\n Stream.call(this);\n\n let options = opt || {};\n\n this._packer = new Packer(options);\n this._deflate = this._packer.createDeflate();\n\n this.readable = true;\n});\nutil.inherits(PackerAsync, Stream);\n\nPackerAsync.prototype.pack = function (data, width, height, gamma) {\n // Signature\n this.emit(\"data\", Buffer.from(constants.PNG_SIGNATURE));\n this.emit(\"data\", this._packer.packIHDR(width, height));\n\n if (gamma) {\n this.emit(\"data\", this._packer.packGAMA(gamma));\n }\n\n let filteredData = this._packer.filterData(data, width, height);\n\n // compress it\n this._deflate.on(\"error\", this.emit.bind(this, \"error\"));\n\n this._deflate.on(\n \"data\",\n function (compressedData) {\n this.emit(\"data\", this._packer.packIDAT(compressedData));\n }.bind(this)\n );\n\n this._deflate.on(\n \"end\",\n function () {\n this.emit(\"data\", this._packer.packIEND());\n this.emit(\"end\");\n }.bind(this)\n );\n\n this._deflate.end(filteredData);\n};\n","\"use strict\";\n\nlet assert = require(\"assert\").ok;\nlet zlib = require(\"zlib\");\nlet util = require(\"util\");\n\nlet kMaxLength = require(\"buffer\").kMaxLength;\n\nfunction Inflate(opts) {\n if (!(this instanceof Inflate)) {\n return new Inflate(opts);\n }\n\n if (opts && opts.chunkSize < zlib.Z_MIN_CHUNK) {\n opts.chunkSize = zlib.Z_MIN_CHUNK;\n }\n\n zlib.Inflate.call(this, opts);\n\n // Node 8 --> 9 compatibility check\n this._offset = this._offset === undefined ? this._outOffset : this._offset;\n this._buffer = this._buffer || this._outBuffer;\n\n if (opts && opts.maxLength != null) {\n this._maxLength = opts.maxLength;\n }\n}\n\nfunction createInflate(opts) {\n return new Inflate(opts);\n}\n\nfunction _close(engine, callback) {\n if (callback) {\n process.nextTick(callback);\n }\n\n // Caller may invoke .close after a zlib error (which will null _handle).\n if (!engine._handle) {\n return;\n }\n\n engine._handle.close();\n engine._handle = null;\n}\n\nInflate.prototype._processChunk = function (chunk, flushFlag, asyncCb) {\n if (typeof asyncCb === \"function\") {\n return zlib.Inflate._processChunk.call(this, chunk, flushFlag, asyncCb);\n }\n\n let self = this;\n\n let availInBefore = chunk && chunk.length;\n let availOutBefore = this._chunkSize - this._offset;\n let leftToInflate = this._maxLength;\n let inOff = 0;\n\n let buffers = [];\n let nread = 0;\n\n let error;\n this.on(\"error\", function (err) {\n error = err;\n });\n\n function handleChunk(availInAfter, availOutAfter) {\n if (self._hadError) {\n return;\n }\n\n let have = availOutBefore - availOutAfter;\n assert(have >= 0, \"have should not go down\");\n\n if (have > 0) {\n let out = self._buffer.slice(self._offset, self._offset + have);\n self._offset += have;\n\n if (out.length > leftToInflate) {\n out = out.slice(0, leftToInflate);\n }\n\n buffers.push(out);\n nread += out.length;\n leftToInflate -= out.length;\n\n if (leftToInflate === 0) {\n return false;\n }\n }\n\n if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n availOutBefore = self._chunkSize;\n self._offset = 0;\n self._buffer = Buffer.allocUnsafe(self._chunkSize);\n }\n\n if (availOutAfter === 0) {\n inOff += availInBefore - availInAfter;\n availInBefore = availInAfter;\n\n return true;\n }\n\n return false;\n }\n\n assert(this._handle, \"zlib binding closed\");\n let res;\n do {\n res = this._handle.writeSync(\n flushFlag,\n chunk, // in\n inOff, // in_off\n availInBefore, // in_len\n this._buffer, // out\n this._offset, //out_off\n availOutBefore\n ); // out_len\n // Node 8 --> 9 compatibility check\n res = res || this._writeState;\n } while (!this._hadError && handleChunk(res[0], res[1]));\n\n if (this._hadError) {\n throw error;\n }\n\n if (nread >= kMaxLength) {\n _close(this);\n throw new RangeError(\n \"Cannot create final Buffer. It would be larger than 0x\" +\n kMaxLength.toString(16) +\n \" bytes\"\n );\n }\n\n let buf = Buffer.concat(buffers, nread);\n _close(this);\n\n return buf;\n};\n\nutil.inherits(Inflate, zlib.Inflate);\n\nfunction zlibBufferSync(engine, buffer) {\n if (typeof buffer === \"string\") {\n buffer = Buffer.from(buffer);\n }\n if (!(buffer instanceof Buffer)) {\n throw new TypeError(\"Not a string or buffer\");\n }\n\n let flushFlag = engine._finishFlushFlag;\n if (flushFlag == null) {\n flushFlag = zlib.Z_FINISH;\n }\n\n return engine._processChunk(buffer, flushFlag);\n}\n\nfunction inflateSync(buffer, opts) {\n return zlibBufferSync(new Inflate(opts), buffer);\n}\n\nmodule.exports = exports = inflateSync;\nexports.Inflate = Inflate;\nexports.createInflate = createInflate;\nexports.inflateSync = inflateSync;\n","\"use strict\";\n\nlet SyncReader = (module.exports = function (buffer) {\n this._buffer = buffer;\n this._reads = [];\n});\n\nSyncReader.prototype.read = function (length, callback) {\n this._reads.push({\n length: Math.abs(length), // if length < 0 then at most this length\n allowLess: length < 0,\n func: callback,\n });\n};\n\nSyncReader.prototype.process = function () {\n // as long as there is any data and read requests\n while (this._reads.length > 0 && this._buffer.length) {\n let read = this._reads[0];\n\n if (\n this._buffer.length &&\n (this._buffer.length >= read.length || read.allowLess)\n ) {\n // ok there is any data so that we can satisfy this request\n this._reads.shift(); // == read\n\n let buf = this._buffer;\n\n this._buffer = buf.slice(read.length);\n\n read.func.call(this, buf.slice(0, read.length));\n } else {\n break;\n }\n }\n\n if (this._reads.length > 0) {\n throw new Error(\"There are some read requests waitng on finished stream\");\n }\n\n if (this._buffer.length > 0) {\n throw new Error(\"unrecognised content at end of stream\");\n }\n};\n","\"use strict\";\n\nlet SyncReader = require(\"./sync-reader\");\nlet Filter = require(\"./filter-parse\");\n\nexports.process = function (inBuffer, bitmapInfo) {\n let outBuffers = [];\n let reader = new SyncReader(inBuffer);\n let filter = new Filter(bitmapInfo, {\n read: reader.read.bind(reader),\n write: function (bufferPart) {\n outBuffers.push(bufferPart);\n },\n complete: function () {},\n });\n\n filter.start();\n reader.process();\n\n return Buffer.concat(outBuffers);\n};\n","\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nlet inflateSync = require(\"./sync-inflate\");\nif (!zlib.deflateSync) {\n hasSyncZlib = false;\n}\nlet SyncReader = require(\"./sync-reader\");\nlet FilterSync = require(\"./filter-parse-sync\");\nlet Parser = require(\"./parser\");\nlet bitmapper = require(\"./bitmapper\");\nlet formatNormaliser = require(\"./format-normaliser\");\n\nmodule.exports = function (buffer, options) {\n if (!hasSyncZlib) {\n throw new Error(\n \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n );\n }\n\n let err;\n function handleError(_err_) {\n err = _err_;\n }\n\n let metaData;\n function handleMetaData(_metaData_) {\n metaData = _metaData_;\n }\n\n function handleTransColor(transColor) {\n metaData.transColor = transColor;\n }\n\n function handlePalette(palette) {\n metaData.palette = palette;\n }\n\n function handleSimpleTransparency() {\n metaData.alpha = true;\n }\n\n let gamma;\n function handleGamma(_gamma_) {\n gamma = _gamma_;\n }\n\n let inflateDataList = [];\n function handleInflateData(inflatedData) {\n inflateDataList.push(inflatedData);\n }\n\n let reader = new SyncReader(buffer);\n\n let parser = new Parser(options, {\n read: reader.read.bind(reader),\n error: handleError,\n metadata: handleMetaData,\n gamma: handleGamma,\n palette: handlePalette,\n transColor: handleTransColor,\n inflateData: handleInflateData,\n simpleTransparency: handleSimpleTransparency,\n });\n\n parser.start();\n reader.process();\n\n if (err) {\n throw err;\n }\n\n //join together the inflate datas\n let inflateData = Buffer.concat(inflateDataList);\n inflateDataList.length = 0;\n\n let inflatedData;\n if (metaData.interlace) {\n inflatedData = zlib.inflateSync(inflateData);\n } else {\n let rowSize =\n ((metaData.width * metaData.bpp * metaData.depth + 7) >> 3) + 1;\n let imageSize = rowSize * metaData.height;\n inflatedData = inflateSync(inflateData, {\n chunkSize: imageSize,\n maxLength: imageSize,\n });\n }\n inflateData = null;\n\n if (!inflatedData || !inflatedData.length) {\n throw new Error(\"bad png - invalid inflate data response\");\n }\n\n let unfilteredData = FilterSync.process(inflatedData, metaData);\n inflateData = null;\n\n let bitmapData = bitmapper.dataToBitMap(unfilteredData, metaData);\n unfilteredData = null;\n\n let normalisedBitmapData = formatNormaliser(\n bitmapData,\n metaData,\n options.skipRescale\n );\n\n metaData.data = normalisedBitmapData;\n metaData.gamma = gamma || 0;\n\n return metaData;\n};\n","\"use strict\";\n\nlet hasSyncZlib = true;\nlet zlib = require(\"zlib\");\nif (!zlib.deflateSync) {\n hasSyncZlib = false;\n}\nlet constants = require(\"./constants\");\nlet Packer = require(\"./packer\");\n\nmodule.exports = function (metaData, opt) {\n if (!hasSyncZlib) {\n throw new Error(\n \"To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0\"\n );\n }\n\n let options = opt || {};\n\n let packer = new Packer(options);\n\n let chunks = [];\n\n // Signature\n chunks.push(Buffer.from(constants.PNG_SIGNATURE));\n\n // Header\n chunks.push(packer.packIHDR(metaData.width, metaData.height));\n\n if (metaData.gamma) {\n chunks.push(packer.packGAMA(metaData.gamma));\n }\n\n let filteredData = packer.filterData(\n metaData.data,\n metaData.width,\n metaData.height\n );\n\n // compress it\n let compressedData = zlib.deflateSync(\n filteredData,\n packer.getDeflateOptions()\n );\n filteredData = null;\n\n if (!compressedData || !compressedData.length) {\n throw new Error(\"bad png - invalid compressed data response\");\n }\n chunks.push(packer.packIDAT(compressedData));\n\n // End\n chunks.push(packer.packIEND());\n\n return Buffer.concat(chunks);\n};\n","\"use strict\";\n\nlet parse = require(\"./parser-sync\");\nlet pack = require(\"./packer-sync\");\n\nexports.read = function (buffer, options) {\n return parse(buffer, options || {});\n};\n\nexports.write = function (png, options) {\n return pack(png, options);\n};\n","\"use strict\";\n\nlet util = require(\"util\");\nlet Stream = require(\"stream\");\nlet Parser = require(\"./parser-async\");\nlet Packer = require(\"./packer-async\");\nlet PNGSync = require(\"./png-sync\");\n\nlet PNG = (exports.PNG = function (options) {\n Stream.call(this);\n\n options = options || {}; // eslint-disable-line no-param-reassign\n\n // coerce pixel dimensions to integers (also coerces undefined -> 0):\n this.width = options.width | 0;\n this.height = options.height | 0;\n\n this.data =\n this.width > 0 && this.height > 0\n ? Buffer.alloc(4 * this.width * this.height)\n : null;\n\n if (options.fill && this.data) {\n this.data.fill(0);\n }\n\n this.gamma = 0;\n this.readable = this.writable = true;\n\n this._parser = new Parser(options);\n\n this._parser.on(\"error\", this.emit.bind(this, \"error\"));\n this._parser.on(\"close\", this._handleClose.bind(this));\n this._parser.on(\"metadata\", this._metadata.bind(this));\n this._parser.on(\"gamma\", this._gamma.bind(this));\n this._parser.on(\n \"parsed\",\n function (data) {\n this.data = data;\n this.emit(\"parsed\", data);\n }.bind(this)\n );\n\n this._packer = new Packer(options);\n this._packer.on(\"data\", this.emit.bind(this, \"data\"));\n this._packer.on(\"end\", this.emit.bind(this, \"end\"));\n this._parser.on(\"close\", this._handleClose.bind(this));\n this._packer.on(\"error\", this.emit.bind(this, \"error\"));\n});\nutil.inherits(PNG, Stream);\n\nPNG.sync = PNGSync;\n\nPNG.prototype.pack = function () {\n if (!this.data || !this.data.length) {\n this.emit(\"error\", \"No data provided\");\n return this;\n }\n\n process.nextTick(\n function () {\n this._packer.pack(this.data, this.width, this.height, this.gamma);\n }.bind(this)\n );\n\n return this;\n};\n\nPNG.prototype.parse = function (data, callback) {\n if (callback) {\n let onParsed, onError;\n\n onParsed = function (parsedData) {\n this.removeListener(\"error\", onError);\n\n this.data = parsedData;\n callback(null, this);\n }.bind(this);\n\n onError = function (err) {\n this.removeListener(\"parsed\", onParsed);\n\n callback(err, null);\n }.bind(this);\n\n this.once(\"parsed\", onParsed);\n this.once(\"error\", onError);\n }\n\n this.end(data);\n return this;\n};\n\nPNG.prototype.write = function (data) {\n this._parser.write(data);\n return true;\n};\n\nPNG.prototype.end = function (data) {\n this._parser.end(data);\n};\n\nPNG.prototype._metadata = function (metadata) {\n this.width = metadata.width;\n this.height = metadata.height;\n\n this.emit(\"metadata\", metadata);\n};\n\nPNG.prototype._gamma = function (gamma) {\n this.gamma = gamma;\n};\n\nPNG.prototype._handleClose = function () {\n if (!this._parser.writable && !this._packer.readable) {\n this.emit(\"close\");\n }\n};\n\nPNG.bitblt = function (src, dst, srcX, srcY, width, height, deltaX, deltaY) {\n // eslint-disable-line max-params\n // coerce pixel dimensions to integers (also coerces undefined -> 0):\n /* eslint-disable no-param-reassign */\n srcX |= 0;\n srcY |= 0;\n width |= 0;\n height |= 0;\n deltaX |= 0;\n deltaY |= 0;\n /* eslint-enable no-param-reassign */\n\n if (\n srcX > src.width ||\n srcY > src.height ||\n srcX + width > src.width ||\n srcY + height > src.height\n ) {\n throw new Error(\"bitblt reading outside image\");\n }\n\n if (\n deltaX > dst.width ||\n deltaY > dst.height ||\n deltaX + width > dst.width ||\n deltaY + height > dst.height\n ) {\n throw new Error(\"bitblt writing outside image\");\n }\n\n for (let y = 0; y < height; y++) {\n src.data.copy(\n dst.data,\n ((deltaY + y) * dst.width + deltaX) << 2,\n ((srcY + y) * src.width + srcX) << 2,\n ((srcY + y) * src.width + srcX + width) << 2\n );\n }\n};\n\nPNG.prototype.bitblt = function (\n dst,\n srcX,\n srcY,\n width,\n height,\n deltaX,\n deltaY\n) {\n // eslint-disable-line max-params\n\n PNG.bitblt(this, dst, srcX, srcY, width, height, deltaX, deltaY);\n return this;\n};\n\nPNG.adjustGamma = function (src) {\n if (src.gamma) {\n for (let y = 0; y < src.height; y++) {\n for (let x = 0; x < src.width; x++) {\n let idx = (src.width * y + x) << 2;\n\n for (let i = 0; i < 3; i++) {\n let sample = src.data[idx + i] / 255;\n sample = Math.pow(sample, 1 / 2.2 / src.gamma);\n src.data[idx + i] = Math.round(sample * 255);\n }\n }\n }\n src.gamma = 0;\n }\n};\n\nPNG.prototype.adjustGamma = function () {\n PNG.adjustGamma(this);\n};\n","import { PNG } from 'pngjs';\nconst PNG_MAGIC = [137, 80, 78, 71, 13, 10, 26, 10];\nconst PNG_MAGIC_SIZE = 8;\nconst IHDR = 0x49484452;\nconst SRGB = 0x73524742;\nconst IDAT = 0x49444154;\nconst IEND = 0x49454e44;\nconst CRC32_TABLE = [];\n\n/**\n * Hash data with CRC32.\n *\n * @param data Data to be hashed.\n * @returns Data hash.\n */\nexport function crc32(data) {\n if (!CRC32_TABLE.length) {\n for (let i = 256; i--;) {\n let c = i;\n for (let j = 0; j < 8; j++) {\n // eslint-disable-next-line no-bitwise\n c = c & 1 ? 0xedb88320 ^ c >>> 1 : c >>> 1;\n }\n CRC32_TABLE[i] = c;\n }\n }\n let r = -1;\n const l = data.length;\n for (let i = 0; i < l;) {\n // eslint-disable-next-line no-bitwise\n r = CRC32_TABLE[(r ^ data[i++]) & 0xff] ^ r >>> 8;\n }\n // eslint-disable-next-line no-bitwise\n return r ^ -1;\n}\n\n/**\n * Concatenate multiple Uint8Array together.\n *\n * @param arrays Uint8Array arrays.\n * @returns Uint8Array array.\n */\nexport function concatUint8Arrays(arrays) {\n let l = 0;\n for (const a of arrays) {\n l += a.length;\n }\n const r = new Uint8Array(l);\n let i = 0;\n for (const a of arrays) {\n r.set(a, i);\n i += a.length;\n }\n return r;\n}\n\n/**\n * Decode PNG data to RGBA image.\n *\n * @param data PNG data.\n * @returns Image data.\n */\nexport async function decodePngToRgba(data) {\n const png = new PNG();\n await new Promise((resolve, reject) => {\n png.parse(Buffer.from(data.buffer, data.byteOffset, data.byteLength), err => {\n if (err) {\n reject(err);\n return;\n }\n resolve(png);\n });\n });\n const {\n width,\n height,\n data: d\n } = png;\n return {\n width,\n height,\n data: new Uint8Array(d.buffer, d.byteOffset, d.byteLength)\n };\n}\n\n/**\n * Encode RGBA image to PNG data.\n *\n * @param imageData Image data.\n * @param srgb SRGB mode.\n * @returns PNG data.\n */\nexport async function encodeRgbaToPng(imageData, srgb = null) {\n const {\n width,\n height,\n data\n } = imageData;\n const png = new PNG({\n width,\n height,\n deflateLevel: 9,\n deflateStrategy: 1,\n deflateChunkSize: 32 * 1024\n });\n png.data = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n const packed = [];\n await new Promise((resolve, reject) => {\n png.on('data', d => {\n packed.push(d);\n });\n png.on('error', reject);\n png.on('end', resolve);\n png.pack();\n });\n return pngRepack(concatUint8Arrays(packed), srgb);\n}\n\n/**\n * Read PNG file tags.\n *\n * @param data PNG data.\n * @yields PNG tags.\n */\nexport function* pngReader(data) {\n let i = 0;\n for (; i < PNG_MAGIC_SIZE; i++) {\n if (data[i] !== PNG_MAGIC[i]) {\n throw new Error('Invalid PNG header signature');\n }\n }\n const dv = new DataView(data.buffer, data.byteOffset, data.byteLength);\n while (i < data.length) {\n const size = dv.getUint32(i, false);\n i += 4;\n const tag = dv.getUint32(i, false);\n i += 4;\n const d = data.subarray(i, i + size);\n i += size;\n const crc = dv.getUint32(i, false);\n yield [tag, d, crc];\n i += 4;\n }\n}\n\n/**\n * Encode PNG from tags.\n *\n * @param tags PNG tags and data.\n * @returns PNG data.\n */\nexport function pngEncode(tags) {\n let total = PNG_MAGIC_SIZE;\n for (const [, data] of tags) {\n total += 12 + data.length;\n }\n const r = new Uint8Array(total);\n const d = new DataView(r.buffer, r.byteOffset, r.byteLength);\n r.set(PNG_MAGIC);\n let i = PNG_MAGIC_SIZE;\n for (const [tag, data] of tags) {\n const l = data.length;\n d.setUint32(i, l, false);\n i += 4;\n const f = i;\n d.setUint32(i, tag, false);\n i += 4;\n r.set(data, i);\n i += l;\n d.setUint32(i, crc32(r.subarray(f, i)), false);\n i += 4;\n }\n return r;\n}\n\n/**\n * Repack PNG tag data with a single IDAT.\n *\n * @param data PNG data.\n * @param srgb Set an SRGB value.\n * @returns PNG data.\n */\nexport function pngRepack(data, srgb = null) {\n let ihdr = null;\n let iend = null;\n const idats = [];\n for (const [tag, d] of pngReader(data)) {\n switch (tag) {\n case IDAT:\n {\n idats.push(d);\n break;\n }\n case IHDR:\n {\n ihdr = d;\n break;\n }\n case IEND:\n {\n iend = d;\n break;\n }\n default:\n {\n // Discard others.\n }\n }\n }\n if (!ihdr || !iend) {\n throw new Error('Invalid PNG');\n }\n const pieces = [[IHDR, ihdr]];\n if (srgb !== null) {\n pieces.push([SRGB, new Uint8Array([srgb])]);\n }\n pieces.push([IDAT, concatUint8Arrays(idats)], [IEND, iend]);\n return pngEncode(pieces);\n}\n\n/**\n * Read PNG IHDR data.\n *\n * @param data PNG data.\n * @returns PNG IHDR.\n */\nexport function pngIhdr(data) {\n for (const [tag, td] of pngReader(data)) {\n if (tag === IHDR) {\n const d = new DataView(td.buffer, td.byteOffset, td.byteLength);\n return {\n width: d.getUint32(0, false),\n height: d.getUint32(4, false),\n bitDepth: d.getUint8(8),\n colorType: d.getUint8(9),\n compressionMethod: d.getUint8(10),\n filterMethod: d.getUint8(11),\n interlacemethod: d.getUint8(12)\n };\n }\n }\n throw new Error('Missing PNG IHDR tag');\n}\n\n/**\n * Encode data using PackBits ICNS compression.\n *\n * @param data Data to be compressed.\n * @returns Compressed data.\n */\nexport function packBitsIcns(data) {\n const chunks = [];\n const l = data.length;\n for (let i = 0; i < l;) {\n const b = data[i];\n if (i + 2 >= l) {\n // Not enough left for anything but literal data.\n chunks.push(new Uint8Array([l - i - 1]), data.subarray(i, l));\n break;\n }\n if (b === data[i + 1] && b === data[i + 2]) {\n // 3+ bytes repeat RLE.\n i += 2;\n let c = 3;\n for (; ++i < l && b === data[i] && c < 130; c++);\n chunks.push(new Uint8Array([c + 125, b]));\n } else {\n // Literal until next 3 bytes repeat.\n let e = i + 2;\n let c = 3;\n for (let r = 1, p = data[e]; ++e < l && c < 128; c++) {\n const b = data[e];\n if (p !== b) {\n p = b;\n r = 1;\n } else if (++r > 2) {\n e -= 2;\n c -= 2;\n break;\n }\n }\n chunks.push(new Uint8Array([c - 1]), data.subarray(i, e));\n i = e;\n }\n }\n return concatUint8Arrays(chunks);\n}\n//# sourceMappingURL=util.mjs.map","import { decodePngToRgba, encodeRgbaToPng } from \"./util.mjs\";\n\n/**\n * Icon object.\n */\nexport class Icon {\n /**\n * Icon constructor.\n */\n constructor() {}\n\n /**\n * Decode PNG data to RGBA image.\n *\n * @param data PNG data.\n * @returns Image data.\n */\n async _decodePngToRgba(data) {\n return decodePngToRgba(data);\n }\n\n /**\n * Encode RGBA image to PNG data.\n *\n * @param imageData Image data.\n * @param srgb SRGB mode.\n * @returns PNG data.\n */\n async _encodeRgbaToPng(imageData, srgb = null) {\n return encodeRgbaToPng(imageData, srgb);\n }\n\n /**\n * Encode icon.\n *\n * @returns Encoded icon.\n */\n}\n//# sourceMappingURL=icon.mjs.map","import { Icon } from \"../icon.mjs\";\nimport { concatUint8Arrays, packBitsIcns } from \"../util.mjs\";\nconst typePng = ['icp4', 'icp5', 'icp6', 'ic07', 'ic08', 'ic09', 'ic10', 'ic11', 'ic12', 'ic13', 'ic14'];\nconst typeArgb = ['ic04', 'ic05'];\nconst typeIcon24Bit = ['is32', 'il32', 'ih32', 'it32'];\nconst typeMask8Bit = ['s8mk', 'l8mk', 'h8mk', 't8mk'];\n\n/**\n * Icon entry.\n */\n\n/**\n * IconIcns object.\n */\nexport class IconIcns extends Icon {\n /**\n * Option to include TOC tag (table of contents) in encode.\n */\n toc = false;\n\n /**\n * List of icon entries.\n */\n entries = [];\n\n /**\n * Types that are ARGB.\n */\n _typeArgb = new Set(typeArgb);\n\n /**\n * Types that are PNG.\n */\n _typePng = new Set(typePng);\n\n /**\n * Types that are icon 24-bit.\n */\n _typeIcon24Bit = new Set(typeIcon24Bit);\n\n /**\n * Types that are mask 8-bit.\n */\n _typeMask8Bit = new Set(typeMask8Bit);\n\n /**\n * IconIcns constructor.\n */\n constructor() {\n super();\n }\n\n /**\n * Add an icon from PNG data.\n *\n * @param data PNG data.\n * @param types Types to encode as.\n * @param raw Use raw PNG data without re-encoding for the PNG types.\n */\n async addFromPng(data, types, raw = false) {\n if (!raw) {\n await this.addFromRgba(await this._decodePngToRgba(data), types);\n return;\n }\n let rgba = null;\n for (const type of types) {\n if (this._typePng.has(type)) {\n this.entries.push({\n type,\n data: new Uint8Array(data)\n });\n continue;\n }\n // eslint-disable-next-line no-await-in-loop\n rgba ||= await this._decodePngToRgba(data);\n // eslint-disable-next-line no-await-in-loop\n await this.addFromRgba(rgba, [type]);\n }\n }\n\n /**\n * Add an icon from RGBA image data.\n *\n * @param imageData RGBA image data.\n * @param types Types to encode as.\n */\n async addFromRgba(imageData, types) {\n for (const type of types) {\n // eslint-disable-next-line no-await-in-loop\n await this._addFromRgbaType(imageData, type);\n }\n }\n\n /**\n * Add raw data chunk.\n *\n * @param data Chunk data.\n * @param type Chunk tag.\n */\n addRaw(data, type) {\n this.entries.push({\n type,\n data: new Uint8Array(data)\n });\n }\n\n /**\n * Add dark mode icns.\n *\n * @param data Full encoded icns data.\n */\n addDarkIcns(data) {\n const {\n length\n } = data;\n if (length < 8 || data[0] !== 105 || data[1] !== 99 || data[2] !== 110 || data[3] !== 115 || new DataView(data.buffer, data.byteOffset, data.byteLength).getUint32(4) !== length) {\n throw new Error('Invalid icns header data');\n }\n const body = new Uint8Array(length - 8);\n body.set(data.subarray(8));\n this.entries.push({\n type: '\\xFD\\xD9\\x2F\\xA8',\n data: body\n });\n }\n\n /**\n * Encode icon.\n *\n * @returns Encoded icon.\n */\n encode() {\n const {\n toc\n } = this;\n const headName = new Uint8Array([105, 99, 110, 115]);\n const headSize = new Uint8Array(4);\n let sized = 8;\n let tocSized = 8;\n const tocs = toc ? [new Uint8Array([84, 79, 67, 32]), new Uint8Array(4)] : null;\n const imgs = [];\n for (const {\n type,\n data\n } of this.entries) {\n const imgName = new Uint8Array(4);\n for (let i = 0; i < 4; i++) {\n // eslint-disable-next-line unicorn/prefer-code-point\n imgName[i] = type.charCodeAt(i) || 0;\n }\n const imgSize = new Uint8Array(4);\n const imgSized = data.length + 8;\n new DataView(imgSize.buffer, imgSize.byteOffset, imgSize.byteLength).setUint32(0, imgSized, false);\n if (tocs) {\n tocs.push(imgName, imgSize);\n tocSized += 8;\n sized += 8;\n }\n imgs.push(imgName, imgSize, data);\n sized += imgSized;\n }\n if (tocs) {\n const [, tocSize] = tocs;\n new DataView(tocSize.buffer, tocSize.byteOffset, tocSize.byteLength).setUint32(0, tocSized, false);\n sized += 8;\n }\n new DataView(headSize.buffer, headSize.byteOffset, headSize.byteLength).setUint32(0, sized, false);\n return concatUint8Arrays([headName, headSize, ...(tocs || []), ...imgs]);\n }\n\n /**\n * Add an icon from RGBA image data, individual type.\n *\n * @param imageData RGBA image data.\n * @param type Type to encode as.\n */\n async _addFromRgbaType(imageData, type) {\n if (this._typePng.has(type)) {\n this.entries.push({\n type,\n data: await this._encodeRgbaToTypePng(imageData, type)\n });\n return;\n }\n if (this._typeArgb.has(type)) {\n this.entries.push({\n type,\n data: this._encodeRgbaToTypeArgb(imageData, type)\n });\n return;\n }\n if (this._typeIcon24Bit.has(type)) {\n this.entries.push({\n type,\n data: this._encodeRgbaToTypeIcon24Bit(imageData, type)\n });\n return;\n }\n if (this._typeMask8Bit.has(type)) {\n this.entries.push({\n type,\n data: this._encodeRgbaToTypeMask8Bit(imageData, type)\n });\n return;\n }\n throw new Error(`Unknown type: ${type}`);\n }\n\n /**\n * Encode RGBA image data to PNG.\n *\n * @param imageData RGBA image data.\n * @param _type Icon type.\n * @returns Encoded data.\n */\n async _encodeRgbaToTypePng(imageData, _type) {\n return this._encodeRgbaToPng(imageData, 0);\n }\n\n /**\n * Encode RGBA image data to ARGB.\n *\n * @param imageData RGBA image data.\n * @param _type Icon type.\n * @returns Encoded data.\n */\n _encodeRgbaToTypeArgb(imageData, _type) {\n // The compressed data always has an ARGB header.\n return this._encodeRgbaToPackBits(imageData, true, new Uint8Array([65, 82, 71, 66]));\n }\n\n /**\n * Encode RGBA image data to icon 24-bit.\n *\n * @param imageData RGBA image data.\n * @param type Icon type.\n * @returns Encoded data.\n */\n _encodeRgbaToTypeIcon24Bit(imageData, type) {\n // The 'it32' type has 4 null byte header.\n return this._encodeRgbaToPackBits(imageData, false, type === 'it32' ? new Uint8Array(4) : null);\n }\n\n /**\n * Encode RGBA image data to mask 8-bit.\n *\n * @param imageData RGBA image data.\n * @param _type Icon type.\n * @returns Encoded data.\n */\n _encodeRgbaToTypeMask8Bit(imageData, _type) {\n return this._encodeRgbaChannel(imageData, 3);\n }\n\n /**\n * Encode RGBA image data to packbits.\n *\n * @param imageData RGBA image data.\n * @param alpha Incldue the alpha channel.\n * @param header Header to prepend to the output.\n * @returns Encoded data.\n */\n _encodeRgbaToPackBits(imageData, alpha, header = null) {\n const pieces = header ? [header] : [];\n if (alpha) {\n // A:\n pieces.push(this._encodePackBitsIcns(this._encodeRgbaChannel(imageData, 3)));\n }\n // RGB:\n pieces.push(this._encodePackBitsIcns(this._encodeRgbaChannel(imageData, 0)), this._encodePackBitsIcns(this._encodeRgbaChannel(imageData, 1)), this._encodePackBitsIcns(this._encodeRgbaChannel(imageData, 2)));\n return concatUint8Arrays(pieces);\n }\n\n /**\n * Encode channel from RGBA image data.\n *\n * @param imageData RGBA image data.\n * @param index Channel index (R=0, B=1, G=2, A=3).\n * @returns Encoded data.\n */\n _encodeRgbaChannel(imageData, index) {\n const {\n data\n } = imageData;\n const size = data.length;\n const encoded = new Uint8Array(size / 4);\n for (let i = index, j = 0; i < size; i += 4) {\n encoded[j++] = data[i];\n }\n return encoded;\n }\n\n /**\n * Encode data using PackBits ICNS compression.\n *\n * @param data Data to be compressed.\n * @returns Compressed data.\n */\n _encodePackBitsIcns(data) {\n return packBitsIcns(data);\n }\n}\n//# sourceMappingURL=icns.mjs.map","import { Icon } from \"../icon.mjs\";\nimport { concatUint8Arrays, pngIhdr } from \"../util.mjs\";\n\n/**\n * Icon entry.\n */\n\n/**\n * IconIco object.\n */\nexport class IconIco extends Icon {\n /**\n * List of icon entries.\n */\n entries = [];\n\n /**\n * IconIco constructor.\n */\n constructor() {\n super();\n }\n\n /**\n * Add an icon from PNG data.\n *\n * @param data PNG data.\n * @param png Encode entry as PNG.\n * @param raw Use raw PNG data without re-encoding, if using PNG format.\n */\n async addFromPng(data, png = null, raw = false) {\n if (raw && png !== false) {\n const ihdr = pngIhdr(data);\n const isPng = png || !this.sizeRequiresLegacyBitmap(ihdr.width, ihdr.height);\n if (isPng) {\n this.entries.push({\n width: ihdr.width,\n height: ihdr.height,\n data: new Uint8Array(data)\n });\n return;\n }\n }\n await this.addFromRgba(await this._decodePngToRgba(data), png);\n }\n\n /**\n * Add an icon from RGBA image data.\n *\n * @param imageData RGBA image data.\n * @param png Encode entry as PNG.\n */\n async addFromRgba(imageData, png = null) {\n // Use PNG if forced or automatic and size large enough.\n const isPng = png || png === null && !this.sizeRequiresLegacyBitmap(imageData.width, imageData.height);\n this.entries.push({\n width: imageData.width,\n height: imageData.height,\n data: isPng ? await this._encodeRgbaToPng(imageData, 0) : this._encodeRgbaToBmp(imageData)\n });\n }\n\n /**\n * Encode icon.\n *\n * @returns Encoded icon.\n */\n encode() {\n const {\n entries\n } = this;\n const dir = this._encodeIcoDir(entries.length);\n const dirs = [];\n const imgs = [];\n let offset = dir.length + entries.length * 16;\n for (const entry of entries) {\n const {\n data\n } = entry;\n const dataSize = data.length;\n const ent = this._encodeIcoDirEntry(entry, offset);\n dirs.push(ent);\n imgs.push(data);\n offset += dataSize;\n }\n return concatUint8Arrays([dir, ...dirs, ...imgs]);\n }\n\n /**\n * Check if height requires legacy bitmap for compatiblity.\n *\n * @param width Image width.\n * @param height Image height.\n * @returns Returns true if requires legacy bitmap.\n */\n sizeRequiresLegacyBitmap(width, height) {\n return width < 64 || height < 64;\n }\n\n /**\n * Encode icon directory header.\n *\n * @param count Entry count.\n * @returns Encoded header.\n */\n _encodeIcoDir(count) {\n // Structure: ICONDIR.\n const r = new Uint8Array(6);\n const encoded = new DataView(r.buffer, r.byteOffset, r.byteLength);\n encoded.setUint16(0, 0, true);\n encoded.setUint16(2, 1, true);\n encoded.setUint16(4, count, true);\n return r;\n }\n\n /**\n * Encode icon directory entry.\n *\n * @param entry Icon entry.\n * @param offset File offset.\n * @returns Encoded entry.\n */\n _encodeIcoDirEntry(entry, offset) {\n // Structure: ICONDIRENTRY.\n const {\n width,\n height,\n data\n } = entry;\n const r = new Uint8Array(16);\n const encoded = new DataView(r.buffer, r.byteOffset, r.byteLength);\n encoded.setUint8(0, width >= 256 ? 0 : width);\n encoded.setUint8(1, height >= 256 ? 0 : height);\n encoded.setUint8(2, 0);\n encoded.setUint8(3, 0);\n encoded.setUint16(4, 1, true);\n encoded.setUint16(6, 32, true);\n encoded.setUint32(8, data.length, true);\n encoded.setUint32(12, offset, true);\n return r;\n }\n\n /**\n * Encode RGBA image to BMP data.\n *\n * @param imageData Image data.\n * @returns BMP data.\n */\n _encodeRgbaToBmp(imageData) {\n const {\n width,\n height,\n data\n } = imageData;\n const dataSize = data.length;\n\n // Calculate the piece sizes.\n const headerSize = 40;\n const maskSize = (width + (width % 32 ? 32 - width % 32 : 0)) * height / 8;\n const bodySize = dataSize + maskSize;\n\n // Calculate the piece offsets.\n const imgOffset = headerSize;\n const maskOff = imgOffset + dataSize;\n const r = new Uint8Array(headerSize + bodySize);\n const encoded = new DataView(r.buffer, r.byteOffset, r.byteLength);\n\n // Structure: BITMAPINFOHEADER.\n // Height is doubled for alpha channel.\n encoded.setUint32(0, 40, true);\n encoded.setInt32(4, width, true);\n encoded.setInt32(8, height * 2, true);\n encoded.setUint16(12, 1, true);\n encoded.setUint16(14, 32, true);\n encoded.setUint32(16, 0, true);\n encoded.setUint32(20, bodySize, true);\n encoded.setInt32(24, 3780, true);\n encoded.setInt32(28, 3780, true);\n encoded.setUint32(32, 0, true);\n encoded.setUint32(36, 0, true);\n\n // Write image and mask, reverse the row order.\n const cols = width * 4;\n const rows = height * cols;\n const end = rows - cols;\n let maskI = 0;\n for (let row = 0; row < rows; row += cols) {\n let bits = 0;\n let bitc = 0;\n for (let col = 0; col < cols; col += 4) {\n // Write RGBA as BGRA.\n let pos = row + col;\n const r = data[pos++];\n const g = data[pos++];\n const b = data[pos++];\n const a = data[pos];\n pos = end - row + col;\n encoded.setUint8(imgOffset + pos++, b);\n encoded.setUint8(imgOffset + pos++, g);\n encoded.setUint8(imgOffset + pos++, r);\n encoded.setUint8(imgOffset + pos, a);\n\n // Write mask bits after image data.\n // eslint-disable-next-line no-bitwise\n bits = bits << 1 | (data[pos] === 0 ? 1 : 0);\n if (++bitc === 8) {\n encoded.setUint8(maskOff + maskI++, bits);\n bits = 0;\n bitc = 0;\n }\n }\n\n // Align mask row to 4 bytes.\n while (maskI % 4) {\n // eslint-disable-next-line no-bitwise\n bits <<= 1;\n if (++bitc === 8) {\n encoded.setUint8(maskOff + maskI++, bits);\n bits = 0;\n bitc = 0;\n }\n }\n }\n return r;\n }\n}\n//# sourceMappingURL=ico.mjs.map","/**\n * Platform encoders. PNG payloads carry explicit 72 DPI density: the WASM PNG\n * encoder emits no `pHYs` chunk (spike-verified), so density is injected with\n * a minimal chunk surgery (insert/replace after IHDR, CRC32 over type+data).\n * ICNS keeps the ten-tag explicit representation set; ICO and Linux PNGs keep\n * their ladders. All encoders consume PNG bytes so the density law applies to\n * every emitted pixel payload.\n */\nimport { IconIcns, IconIco } from \"@shockpkg/icon-encoder\";\n\nimport { encodeImagePng, type ImageDataLike } from \"./raster\";\n\n/** Pixels per metre for 72 DPI (72 × 39.3701 ≈ 2834.65, the Apple value). */\nconst PIXELS_PER_METRE_72DPI = 2835;\n\nexport const ICNS_REPRESENTATIONS = [\n { tag: \"ic12\", size: 64 },\n { tag: \"ic07\", size: 128 },\n { tag: \"ic13\", size: 256 },\n { tag: \"ic08\", size: 256 },\n { tag: \"ic04\", size: 16 },\n { tag: \"ic14\", size: 512 },\n { tag: \"ic09\", size: 512 },\n { tag: \"ic05\", size: 32 },\n { tag: \"ic10\", size: 1024 },\n { tag: \"ic11\", size: 32 },\n] as const;\n\nexport const ICO_SIZES = [16, 24, 32, 48, 64, 128, 256] as const;\nexport const LINUX_SIZES = [16, 32, 48, 64, 128, 256, 512] as const;\n\n/* ---------------------------------- CRC32 ---------------------------------- */\n\nconst CRC_TABLE: readonly number[] = (() => {\n const table = new Array<number>(256);\n for (let n = 0; n < 256; n += 1) {\n let c = n;\n for (let k = 0; k < 8; k += 1) {\n c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n }\n table[n] = c >>> 0;\n }\n return table;\n})();\n\nconst crc32 = (bytes: Uint8Array): number => {\n let crc = 0xffffffff;\n for (let i = 0; i < bytes.length; i += 1) {\n crc = CRC_TABLE[(crc ^ bytes[i]!) & 0xff]! ^ (crc >>> 8);\n }\n return (crc ^ 0xffffffff) >>> 0;\n};\n\n/* ------------------------------ PNG chunk surgery --------------------------- */\n\nconst chunkLength = (view: DataView, offset: number): number =>\n view.getUint32(offset);\n\nconst chunkType = (bytes: Uint8Array, offset: number): string =>\n String.fromCharCode(\n bytes[offset]!,\n bytes[offset + 1]!,\n bytes[offset + 2]!,\n bytes[offset + 3]!,\n );\n\nconst PHYS_DATA = (() => {\n const data = new Uint8Array(9);\n const view = new DataView(data.buffer);\n view.setUint32(0, PIXELS_PER_METRE_72DPI);\n view.setUint32(4, PIXELS_PER_METRE_72DPI);\n data[8] = 1; // unit: metre\n return data;\n})();\n\n/**\n * Ensure a PNG carries exactly one `pHYs` chunk at 72 DPI, inserted after\n * IHDR. Every pre-existing `pHYs` chunk (however many a malformed input\n * carried) is dropped so the emitted density cannot drift.\n */\nexport const pngWithDensity = (png: Uint8Array): Uint8Array => {\n const view = new DataView(png.buffer, png.byteOffset, png.byteLength);\n // Walk chunks; the IHDR/IEND pair bounds the file in any valid PNG.\n let offset = 8; // signature\n let ihdrEnd = -1;\n const segments: Uint8Array[] = [];\n const tail: Uint8Array[] = [];\n while (offset + 12 <= png.length) {\n const length = chunkLength(view, offset);\n const type = chunkType(png, offset + 4);\n const chunkEnd = offset + 12 + length;\n if (type === \"IHDR\") {\n ihdrEnd = chunkEnd;\n segments.push(png.subarray(offset, chunkEnd));\n } else if (type !== \"pHYs\") {\n (ihdrEnd === -1 ? segments : tail).push(png.subarray(offset, chunkEnd));\n }\n offset = chunkEnd;\n if (type === \"IEND\") break;\n }\n if (ihdrEnd === -1) throw new Error(\"pngWithDensity: IHDR chunk not found\");\n\n const chunk = new Uint8Array(12 + PHYS_DATA.length);\n const chunkView = new DataView(chunk.buffer);\n chunkView.setUint32(0, PHYS_DATA.length);\n chunk.set(\n new TextEncoder().encode(\"pHYs\"),\n 4,\n );\n chunk.set(PHYS_DATA, 8);\n chunkView.setUint32(\n 8 + PHYS_DATA.length,\n crc32(chunk.subarray(4, 8 + PHYS_DATA.length)),\n );\n\n return concat(\n png.subarray(0, 8),\n ...segments,\n chunk,\n ...tail,\n );\n};\n\nconst concat = (...parts: readonly Uint8Array[]): Uint8Array => {\n const total = parts.reduce((sum, part) => sum + part.byteLength, 0);\n const out = new Uint8Array(total);\n let offset = 0;\n for (const part of parts) {\n out.set(part, offset);\n offset += part.byteLength;\n }\n return out;\n};\n\n/* ------------------------------- icon encoders ------------------------------ */\n\n/** Encode RGBA pixels to a density-carrying PNG. */\nexport const encodeDensePng = async (\n image: ImageDataLike,\n): Promise<Uint8Array> => pngWithDensity(await encodeImagePng(image));\n\n/** Encode the ten-tag ICNS from per-size PNG payloads (macOS variant source). */\nexport const encodeIcns = async (\n pngAt: (size: number) => Promise<Uint8Array>,\n): Promise<Uint8Array> => {\n const icns = new IconIcns();\n icns.toc = true;\n for (const { tag, size } of ICNS_REPRESENTATIONS) {\n await icns.addFromPng(await pngAt(size), [tag], false);\n }\n return icns.encode();\n};\n\n/** Encode the ICO ladder from per-size PNG payloads (Windows variant source). */\nexport const encodeIco = async (\n pngAt: (size: number) => Promise<Uint8Array>,\n): Promise<Uint8Array> => {\n const ico = new IconIco();\n for (const size of ICO_SIZES) {\n await ico.addFromPng(await pngAt(size), null, false);\n }\n return ico.encode();\n};\n","// App-icon catalog generation (ported from @opentray/vite-plugin app-icon;\n// orthogonal intents maintained 2026-07-20, kernel move 2026-09):\n// 1. Normalize a brand source image into a readable application icon with a\n// white safe-area tile and a transparent outer margin (continuous-curvature\n// squircle, figma-squircle path).\n// 2. Produce standard macOS ICNS, Windows ICO, and Linux theme PNG assets with\n// explicit 72 DPI density.\n// 3. Cache the output by source, source implementation, bundled implementation,\n// recipe, encoder/rasterizer stack versions, and every output path so stale\n// generated assets cannot leak into a dev runtime.\n// Compromise: published packages do not ship TypeScript sources, so their cache\n// uses a null source hash and the bundled implementation hash as the\n// implementation authority; linked consumers hash both layers.\n\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { getSvgPath } from \"figma-squircle\";\n\nimport type { AppIcon } from \"@opentray/spec\";\n\nimport {\n cloneImage,\n containImage,\n cropImage,\n decodeImageFile,\n emptyImageOf,\n insideImage,\n pasteImage,\n rasterizeSvg,\n resizeImage,\n trimBounds,\n type ImageDataLike,\n} from \"./raster\";\nimport {\n encodeDensePng,\n encodeIcns,\n encodeIco,\n ICO_SIZES,\n ICNS_REPRESENTATIONS,\n LINUX_SIZES,\n} from \"./encode\";\n\nconst ICON_SIZE = 1024;\nconst TILE_INSET = 64;\nconst TILE_SIZE = ICON_SIZE - TILE_INSET * 2;\nconst TILE_RADIUS = 196;\nconst TILE_SMOOTHING = 1;\nconst SYMBOL_SIZE = 704;\nconst APP_ICON_DENSITY = 72;\nconst CACHE_SCHEMA_VERSION = 7;\nconst RECIPE_VERSION = `squircle-v4:${ICON_SIZE}:${TILE_INSET}:${TILE_RADIUS}:${TILE_SMOOTHING}:${SYMBOL_SIZE}:${APP_ICON_DENSITY}dpi:icns-tagged:wasm-stack`;\n\nconst require = createRequire(import.meta.url);\n\nexport interface OpenTrayAppIconOptions {\n readonly sourcePath: string;\n readonly outputPath?: string;\n readonly icnsOutputPath?: string;\n readonly icoOutputPath?: string;\n readonly linuxOutputDirectory?: string;\n readonly manifestOutputPath?: string;\n readonly cachePath?: string;\n /** Advanced: override the module whose bytes identify the generator implementation. */\n readonly implementationPath?: string;\n /** Advanced: override the source file whose bytes identify the generator implementation. */\n readonly implementationSourcePath?: string;\n /**\n * Pre-composed source: skip glyph re-tiling; pass pixels through verbatim.\n */\n readonly composed?: boolean;\n /**\n * Separate macOS content source; ICNS encodes from this while ICO/Linux\n * use sourcePath.\n */\n readonly macosSourcePath?: string;\n}\n\nexport interface OpenTrayAppIconCacheMetadata {\n readonly schemaVersion: number;\n readonly sourceSha256: string;\n readonly macosSourceSha256?: string;\n readonly composed?: boolean;\n readonly sourceImplementationSha256: string | null;\n readonly implementationSha256: string;\n readonly recipeVersion: string;\n readonly jsquashPngVersion: string;\n readonly jsquashResizeVersion: string;\n readonly resvgVersion: string;\n readonly iconEncoderVersion: string;\n readonly figmaSquircleVersion: string;\n readonly exifrVersion: string;\n readonly outputPath: string;\n readonly icnsOutputPath: string;\n readonly icoOutputPath: string;\n readonly linuxPngOutputPaths: readonly {\n readonly size: number;\n readonly path: string;\n }[];\n readonly manifestOutputPath: string;\n /** Absolute file sources ready to pass to OpenTray at runtime. */\n readonly appIcon: AppIcon;\n}\n\nexport interface OpenTrayAppIconManifest {\n readonly schemaVersion: 1;\n /** File paths are relative to the manifest file. */\n readonly appIcon: AppIcon;\n}\n\n/** Generate one strict cross-platform AppIcon asset set. */\nexport async function generateOpenTrayAppIcon(\n options: OpenTrayAppIconOptions\n): Promise<OpenTrayAppIconCacheMetadata> {\n const outputPath =\n options.outputPath ??\n path.join(path.dirname(options.sourcePath), \"app-icon.png\");\n const icnsOutputPath =\n options.icnsOutputPath ??\n path.join(path.dirname(outputPath), \"app-icon.icns\");\n const icoOutputPath =\n options.icoOutputPath ??\n path.join(path.dirname(outputPath), \"app-icon.ico\");\n const linuxOutputDirectory =\n options.linuxOutputDirectory ??\n path.join(path.dirname(outputPath), \"linux\");\n const manifestOutputPath =\n options.manifestOutputPath ??\n path.join(path.dirname(outputPath), \"app-icon.json\");\n const cachePath =\n options.cachePath ??\n path.join(path.dirname(outputPath), \"../../.cache/app-icon.json\");\n const implementationPath =\n options.implementationPath ?? fileURLToPath(import.meta.url);\n const metadata = await createCacheMetadata({\n sourcePath: options.sourcePath,\n implementationPath,\n ...(options.composed === true ? { composed: true } : {}),\n ...(options.macosSourcePath === undefined\n ? {}\n : { macosSourcePath: options.macosSourcePath }),\n outputPath,\n icnsOutputPath,\n icoOutputPath,\n linuxOutputDirectory,\n manifestOutputPath,\n ...(options.implementationSourcePath === undefined\n ? {}\n : { implementationSourcePath: options.implementationSourcePath }),\n });\n\n if (await cacheMatches(cachePath, metadata)) return metadata;\n\n const rendered = await renderAppIconPixels(\n options.sourcePath,\n options.composed === true,\n );\n const macosRendered =\n options.macosSourcePath === undefined || options.macosSourcePath === options.sourcePath\n ? rendered\n : await renderAppIconPixels(options.macosSourcePath, options.composed === true);\n await fs.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.mkdir(path.dirname(icnsOutputPath), { recursive: true });\n await fs.mkdir(path.dirname(icoOutputPath), { recursive: true });\n await fs.mkdir(path.dirname(cachePath), { recursive: true });\n await fs.writeFile(outputPath, await encodeDensePng(rendered));\n await fs.writeFile(\n icnsOutputPath,\n await encodeIcns(pngCacheFor(macosRendered).pngAt),\n );\n await fs.writeFile(\n icoOutputPath,\n await encodeIco(pngCacheFor(rendered).pngAt),\n );\n for (const { size, path: pngPath } of metadata.linuxPngOutputPaths) {\n await fs.mkdir(path.dirname(pngPath), { recursive: true });\n await fs.writeFile(\n pngPath,\n await encodeDensePng(\n await resizeImage(rendered, size, size, \"lanczos3\"),\n ),\n );\n }\n await writeManifest(metadata);\n await fs.writeFile(\n cachePath,\n `${JSON.stringify(metadata, null, 2)}\\n`,\n \"utf8\"\n );\n return metadata;\n}\n\nconst pngCacheFor = (source: ImageDataLike): {\n pngAt(size: number): Promise<Uint8Array>;\n} => {\n const bySize = new Map<number, Uint8Array>();\n return {\n async pngAt(size: number): Promise<Uint8Array> {\n const cached = bySize.get(size);\n if (cached !== undefined) return cached;\n const png = await encodeDensePng(\n await resizeImage(cloneImage(source), size, size, \"lanczos3\"),\n );\n bySize.set(size, png);\n return png;\n },\n };\n};\n\nasync function renderAppIconPixels(\n sourcePath: string,\n composed = false,\n): Promise<ImageDataLike> {\n if (composed) {\n // Pre-composed art: normalize to the 1024 canvas and pass through —\n // the background and squircle mask are already baked in.\n const decoded = await decodeImageFile(sourcePath);\n return containImage(decoded, ICON_SIZE, ICON_SIZE, \"lanczos3\");\n }\n const source = await decodeImageFile(sourcePath);\n const bounds = trimBounds(source, 0);\n if (bounds === null) throw new Error(`icon source has no visible pixels: ${sourcePath}`);\n const trimmed = cropImage(\n source,\n bounds.left,\n bounds.top,\n bounds.width,\n bounds.height,\n );\n const symbol = await insideImage(trimmed, SYMBOL_SIZE, \"lanczos3\");\n const symbolLeft = Math.round((ICON_SIZE - symbol.width) / 2);\n const symbolTop = Math.round((ICON_SIZE - symbol.height) / 2);\n const squirclePath = getSvgPath({\n width: TILE_SIZE,\n height: TILE_SIZE,\n cornerRadius: TILE_RADIUS,\n cornerSmoothing: TILE_SMOOTHING,\n preserveSmoothing: true,\n });\n const whiteTile = await rasterizeSvg(\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${TILE_SIZE}\" height=\"${TILE_SIZE}\"><path d=\"${squirclePath}\" fill=\"#fff\"/></svg>`,\n TILE_SIZE,\n );\n const canvas = emptyImageOf(ICON_SIZE, ICON_SIZE);\n pasteImage(canvas, whiteTile, TILE_INSET, TILE_INSET);\n pasteImage(canvas, symbol, symbolLeft, symbolTop);\n return canvas;\n}\n\nasync function createCacheMetadata(options: {\n sourcePath: string;\n implementationPath: string;\n implementationSourcePath?: string;\n /** Pass-through mode: skip glyph re-tiling (part of cache identity). */\n composed?: boolean;\n /** Separate macOS content source (part of cache identity). */\n macosSourcePath?: string;\n outputPath: string;\n icnsOutputPath: string;\n icoOutputPath: string;\n linuxOutputDirectory: string;\n manifestOutputPath: string;\n}): Promise<OpenTrayAppIconCacheMetadata> {\n const sourceImplementationPath =\n options.implementationSourcePath ??\n (await resolveSourceImplementationPath(options.implementationPath));\n const linuxPngOutputPaths = LINUX_SIZES.map((size) => ({\n size,\n path: path.resolve(\n options.linuxOutputDirectory,\n `${size}x${size}`,\n \"app-icon.png\"\n ),\n }));\n const icnsOutputPath = path.resolve(options.icnsOutputPath);\n const icoOutputPath = path.resolve(options.icoOutputPath);\n const appIcon: AppIcon = [\n {\n platform: \"darwin\",\n format: \"icns\",\n source: { type: \"file\", path: icnsOutputPath },\n },\n {\n platform: \"windows\",\n format: \"ico\",\n source: { type: \"file\", path: icoOutputPath },\n },\n ...linuxPngOutputPaths.map(({ size, path: pngPath }) => ({\n platform: \"linux\" as const,\n format: \"png\" as const,\n size,\n source: { type: \"file\" as const, path: pngPath },\n })),\n ];\n return {\n schemaVersion: CACHE_SCHEMA_VERSION,\n sourceSha256: await sha256(options.sourcePath),\n ...(options.macosSourcePath === undefined\n ? {}\n : { macosSourceSha256: await sha256(options.macosSourcePath) }),\n ...(options.composed === true ? { composed: true } : {}),\n sourceImplementationSha256:\n sourceImplementationPath === null\n ? null\n : await sha256(sourceImplementationPath),\n implementationSha256: await sha256(options.implementationPath),\n recipeVersion: RECIPE_VERSION,\n jsquashPngVersion: await packageVersion(\"@jsquash/png\"),\n jsquashResizeVersion: await packageVersion(\"@jsquash/resize\"),\n resvgVersion: await packageVersion(\"@resvg/resvg-wasm\"),\n iconEncoderVersion: await packageVersion(\"@shockpkg/icon-encoder\"),\n figmaSquircleVersion: await packageVersion(\"figma-squircle\"),\n exifrVersion: await packageVersion(\"exifr\"),\n outputPath: path.resolve(options.outputPath),\n icnsOutputPath,\n icoOutputPath,\n linuxPngOutputPaths,\n manifestOutputPath: path.resolve(options.manifestOutputPath),\n appIcon,\n };\n}\n\nasync function writeManifest(\n metadata: OpenTrayAppIconCacheMetadata\n): Promise<void> {\n const manifestDirectory = path.dirname(metadata.manifestOutputPath);\n const relativeSource = (\n sourcePath: string\n ): { type: \"file\"; path: string } => ({\n type: \"file\",\n path: path\n .relative(manifestDirectory, sourcePath)\n .split(path.sep)\n .join(\"/\"),\n });\n const manifest: OpenTrayAppIconManifest = {\n schemaVersion: 1,\n appIcon: [\n {\n platform: \"darwin\",\n format: \"icns\",\n source: relativeSource(metadata.icnsOutputPath),\n },\n {\n platform: \"windows\",\n format: \"ico\",\n source: relativeSource(metadata.icoOutputPath),\n },\n ...metadata.linuxPngOutputPaths.map(({ size, path: pngPath }) => ({\n platform: \"linux\" as const,\n format: \"png\" as const,\n size,\n source: relativeSource(pngPath),\n })),\n ],\n };\n await fs.mkdir(manifestDirectory, { recursive: true });\n await fs.writeFile(\n metadata.manifestOutputPath,\n `${JSON.stringify(manifest, null, 2)}\\n`\n );\n}\n\nasync function cacheMatches(\n file: string,\n expected: OpenTrayAppIconCacheMetadata\n): Promise<boolean> {\n try {\n const parsed: unknown = JSON.parse(await fs.readFile(file, \"utf8\"));\n if (!isCacheMetadata(parsed) || !sameCacheIdentity(parsed, expected))\n return false;\n await Promise.all([\n fs.access(expected.outputPath),\n fs.access(expected.icnsOutputPath),\n fs.access(expected.icoOutputPath),\n fs.access(expected.manifestOutputPath),\n ...expected.linuxPngOutputPaths.map(({ path: outputPath }) =>\n fs.access(outputPath)\n ),\n ]);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction sameCacheIdentity(\n actual: OpenTrayAppIconCacheMetadata,\n expected: OpenTrayAppIconCacheMetadata\n): boolean {\n return (\n actual.schemaVersion === expected.schemaVersion &&\n actual.sourceSha256 === expected.sourceSha256 &&\n actual.macosSourceSha256 === expected.macosSourceSha256 &&\n actual.composed === expected.composed &&\n actual.sourceImplementationSha256 === expected.sourceImplementationSha256 &&\n actual.implementationSha256 === expected.implementationSha256 &&\n actual.recipeVersion === expected.recipeVersion &&\n actual.jsquashPngVersion === expected.jsquashPngVersion &&\n actual.jsquashResizeVersion === expected.jsquashResizeVersion &&\n actual.resvgVersion === expected.resvgVersion &&\n actual.iconEncoderVersion === expected.iconEncoderVersion &&\n actual.figmaSquircleVersion === expected.figmaSquircleVersion &&\n actual.exifrVersion === expected.exifrVersion &&\n actual.outputPath === expected.outputPath &&\n actual.icnsOutputPath === expected.icnsOutputPath &&\n actual.icoOutputPath === expected.icoOutputPath &&\n actual.manifestOutputPath === expected.manifestOutputPath &&\n JSON.stringify(actual.linuxPngOutputPaths) ===\n JSON.stringify(expected.linuxPngOutputPaths) &&\n JSON.stringify(actual.appIcon) === JSON.stringify(expected.appIcon)\n );\n}\n\nfunction isCacheMetadata(\n value: unknown\n): value is OpenTrayAppIconCacheMetadata {\n if (typeof value !== \"object\" || value === null) return false;\n const record = value as Record<string, unknown>;\n return (\n typeof record.schemaVersion === \"number\" &&\n typeof record.sourceSha256 === \"string\" &&\n (record.macosSourceSha256 === undefined ||\n typeof record.macosSourceSha256 === \"string\") &&\n (record.composed === undefined || typeof record.composed === \"boolean\") &&\n (record.sourceImplementationSha256 === null ||\n typeof record.sourceImplementationSha256 === \"string\") &&\n typeof record.implementationSha256 === \"string\" &&\n typeof record.recipeVersion === \"string\" &&\n typeof record.jsquashPngVersion === \"string\" &&\n typeof record.jsquashResizeVersion === \"string\" &&\n typeof record.resvgVersion === \"string\" &&\n typeof record.iconEncoderVersion === \"string\" &&\n typeof record.figmaSquircleVersion === \"string\" &&\n typeof record.exifrVersion === \"string\" &&\n typeof record.outputPath === \"string\" &&\n typeof record.icnsOutputPath === \"string\" &&\n typeof record.icoOutputPath === \"string\" &&\n Array.isArray(record.linuxPngOutputPaths) &&\n typeof record.manifestOutputPath === \"string\" &&\n Array.isArray(record.appIcon)\n );\n}\n\nasync function resolveSourceImplementationPath(\n implementationPath: string\n): Promise<string | null> {\n if (implementationPath.endsWith(`${path.sep}src${path.sep}index.ts`)) {\n return implementationPath;\n }\n // The bundled implementation is the package entry; its source counterpart\n // is the source entry one level above dist (linked-source dev checkouts).\n const candidate = path.join(\n path.dirname(path.dirname(implementationPath)),\n \"src\",\n \"index.ts\"\n );\n try {\n await fs.access(candidate);\n return candidate;\n } catch {\n return null;\n }\n}\n\nexport async function packageVersion(packageName: string): Promise<string> {\n const entryPath = require.resolve(packageName);\n let directory = path.dirname(entryPath);\n while (true) {\n const packagePath = path.join(directory, \"package.json\");\n try {\n const parsed: unknown = JSON.parse(\n await fs.readFile(packagePath, \"utf8\")\n );\n if (isPackageMetadata(parsed, packageName)) return parsed.version;\n } catch {\n // Continue towards the package root; package exports may hide package.json.\n }\n const parent = path.dirname(directory);\n if (parent === directory) break;\n directory = parent;\n }\n throw new Error(`Unable to resolve ${packageName} package version`);\n}\n\nfunction isPackageMetadata(\n value: unknown,\n packageName: string\n): value is { name: string; version: string } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"name\" in value &&\n value.name === packageName &&\n \"version\" in value &&\n typeof value.version === \"string\"\n );\n}\n\nasync function sha256(file: string): Promise<string> {\n return crypto\n .createHash(\"sha256\")\n .update(await fs.readFile(file))\n .digest(\"hex\");\n}\n","/**\n * Glyph icon construction (plan D4): the first character of the application\n * name on the continuous-curvature squircle tile — the same tiling parameters\n * as the kernel's brand path (figma-squircle, cornerSmoothing 1), replacing\n * the earlier plain `rx` rounded rectangle fallback.\n */\nimport { getSvgPath } from \"figma-squircle\";\n\nimport { GLYPH_FONT_FAMILY } from \"./fonts\";\n\nexport const GLYPH_ACCENT_DEFAULT = \"#0A84FF\";\n\n/** Canvas geometry aligned with the brand tile: 1024 canvas, 64 inset. */\nexport const GLYPH_CANVAS = 1024;\nexport const GLYPH_TILE_INSET = 64;\nexport const GLYPH_TILE_SIZE = GLYPH_CANVAS - GLYPH_TILE_INSET * 2;\nexport const GLYPH_TILE_RADIUS = 196;\nexport const GLYPH_TILE_SMOOTHING = 1;\nexport const GLYPH_LETTER_SIZE = 476;\n\nconst escapeXml = (value: string): string =>\n value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\");\n\n/** First Unicode code point of the trimmed name; \"A\" when effectively empty. */\nexport const glyphLetterOf = (appName: string): string => {\n const characters = Array.from(appName.trim());\n return characters[0] ?? \"A\";\n};\n\n/**\n * Neutral fallback when neither the embedded font nor the discovered ladder\n * covers the name's first character: the first ASCII letter or digit, upper\n * case; null when the name has none.\n */\nexport const neutralGlyphLetterOf = (appName: string): string | null => {\n for (const character of appName.trim()) {\n if (/[a-z0-9]/i.test(character)) {\n return character.toUpperCase();\n }\n }\n return null;\n};\n\n/**\n * The glyph icon SVG. The tile path is emitted with explicit continuous\n * curvature so the rasterized shape matches the brand-icon standard exactly;\n * the letter is a text layer resolved through the font ladder at raster time\n * (never `loadSystemFonts`, which silently drops text under WASM).\n */\nexport const buildGlyphIconSvg = (\n appName: string,\n accent: string = GLYPH_ACCENT_DEFAULT,\n letterOverride?: string,\n): string => {\n const letter = escapeXml(letterOverride ?? glyphLetterOf(appName));\n const tilePath = getSvgPath({\n width: GLYPH_TILE_SIZE,\n height: GLYPH_TILE_SIZE,\n cornerRadius: GLYPH_TILE_RADIUS,\n cornerSmoothing: GLYPH_TILE_SMOOTHING,\n preserveSmoothing: true,\n });\n return [\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${GLYPH_CANVAS}\" height=\"${GLYPH_CANVAS}\" viewBox=\"0 0 ${GLYPH_CANVAS} ${GLYPH_CANVAS}\">`,\n `<path transform=\"translate(${GLYPH_TILE_INSET} ${GLYPH_TILE_INSET})\" d=\"${tilePath}\" fill=\"${accent}\"/>`,\n `<text x=\"${GLYPH_CANVAS / 2}\" y=\"${GLYPH_CANVAS / 2}\" font-family=\"${GLYPH_FONT_FAMILY}\" font-size=\"${GLYPH_LETTER_SIZE}\" font-weight=\"600\" fill=\"#FFFFFF\" text-anchor=\"middle\" dominant-baseline=\"central\">${letter}</text>`,\n `</svg>`,\n ].join(\"\");\n};\n","/**\n * App-icon composition (ported from @create-opentray/core icon-compose, owner\n * round-12 semantics preserved): the user's foreground icon is composited onto\n * one of three BACKGROUNDS — black, white, or transparent — with the\n * background auto-selected for contrast against the artwork's own luminance.\n * The foreground's ORIGINAL PIXELS are always preserved (never recolored);\n * macOS receives an 824px-content variant inside the 1024 canvas (platform\n * best practice), Windows/Linux take the full 1024.\n *\n * The bundled background PNGs carry the squircle alpha mask. That mask is the\n * owner's clipping law (invert → polarize → mask): it is applied to EVERY\n * composition — including the transparent background, whose square source\n * would otherwise render un-rounded on macOS.\n *\n * Pixel operations run on raw ImageData (WASM stack); sharp is not involved.\n */\nimport { createHash } from \"node:crypto\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport { assetsDirectory } from \"./assets\";\nimport {\n cloneImage,\n containImage,\n decodeImageFile,\n emptyImageOf,\n insideImage,\n pasteImage,\n resizeImage,\n type ImageDataLike,\n} from \"./raster\";\n\nexport const APP_ICON_CANVAS = 1024;\n/** macOS best-practice content size inside the 1024 canvas. */\nexport const MACOS_CONTENT_SIZE = 824;\n/** Default foreground inset ratio (user-adjustable 0.5–0.95). */\nexport const FOREGROUND_SCALE_DEFAULT = 0.8;\n\nexport type IconBackground = \"black\" | \"white\" | \"transparent\";\n\nexport const ICON_BACKGROUNDS: readonly IconBackground[] = [\n \"black\",\n \"white\",\n \"transparent\",\n];\n\nconst BACKGROUND_FILES: Record<Exclude<IconBackground, \"transparent\">, string> = {\n black: \"create-openspec-template-iOS-Dark-1024@1x.png\",\n white: \"create-openspec-template-iOS-Default-1024@1x.png\",\n};\n\nconst backgroundCache = new Map<Exclude<IconBackground, \"transparent\">, ImageDataLike>();\n\nconst loadBackground = async (\n background: Exclude<IconBackground, \"transparent\">,\n): Promise<ImageDataLike> => {\n const cached = backgroundCache.get(background);\n if (cached !== undefined) return cloneImage(cached);\n const image = await decodeImageFile(\n join(assetsDirectory(), BACKGROUND_FILES[background]),\n );\n backgroundCache.set(background, image);\n return cloneImage(image);\n};\n\n/** Test hook: drop memoized background tiles. */\nexport const resetCompositionCache = (): void => {\n backgroundCache.clear();\n squircleMaskImage = undefined;\n};\n\n/**\n * Full-resolution RGBA pixels of a source sampled at a bounded size with NO\n * padding (sharp `fit: \"inside\"` semantics): letterbox pixels would dilute\n * the coverage statistic that drives background auto-selection. EXIF\n * orientation is applied during decode so phone-photo icons compose upright.\n */\nconst foregroundSample = async (\n sourcePath: string,\n): Promise<ImageDataLike> => {\n const decoded = await decodeImageFile(sourcePath);\n return insideImage(decoded, 512, \"lanczos3\");\n};\n\n/** Border-ring analysis of the sampled foreground (owner 2026-09-10). */\nexport interface ForegroundEdgeStats {\n /** Ring opaque ratio (0–1); the border is \"solid\" near 1. */\n readonly opaque: number;\n /** Mean ring luminance over opaque pixels (0 = black … 1 = white). */\n readonly luminance: number;\n /** True when ring pixels stay within one narrow color band per channel. */\n readonly uniform: boolean;\n}\n\n/** Per-channel spread tolerance for a \"solid color\" border (JPEG noise room). */\nconst EDGE_UNIFORM_SPREAD = 24 / 255;\n\n/** Both analysis metrics from ONE decode (huge uploads must not double). */\nexport const foregroundStats = async (\n sourcePath: string,\n): Promise<{\n luminance: number | undefined;\n coverage: number;\n /** Undefined when the sampled border ring has no opaque pixels at all. */\n edge: ForegroundEdgeStats | undefined;\n}> => {\n const { data, width, height } = await foregroundSample(sourcePath);\n let weight = 0;\n let sum = 0;\n let opaque = 0;\n // Border ring (owner rule): a solid opaque ring means the art carries its\n // own solid backdrop (e.g. a white-pad logo) — the auto background should\n // MATCH that color instead of transparency, so the squircle tile stays\n // seamless instead of floating the pad on the system backdrop.\n const ring = Math.max(2, Math.round(Math.min(width, height) * 0.04));\n let ringTotal = 0;\n let ringOpaque = 0;\n let ringWeight = 0;\n let ringSum = 0;\n let ringMin = [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY];\n let ringMax = [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY];\n for (let y = 0; y < height; y += 1) {\n const inBandRow = y < ring || y >= height - ring;\n for (let x = 0; x < width; x += 1) {\n const i = (y * width + x) * 4;\n const a = (data[i + 3] ?? 0) / 255;\n if (a > 0) {\n const lum =\n (0.299 * (data[i] ?? 0) + 0.587 * (data[i + 1] ?? 0) + 0.114 * (data[i + 2] ?? 0)) / 255;\n weight += a;\n sum += lum * a;\n }\n const isOpaque = (data[i + 3] ?? 0) > 16;\n if (isOpaque) opaque += 1;\n if (inBandRow || x < ring || x >= width - ring) {\n ringTotal += 1;\n if (isOpaque) {\n ringOpaque += 1;\n ringWeight += a;\n ringSum +=\n (0.299 * (data[i] ?? 0) + 0.587 * (data[i + 1] ?? 0) + 0.114 * (data[i + 2] ?? 0)) / 255 * a;\n for (let c = 0; c < 3; c += 1) {\n const v = (data[i + c] ?? 0) / 255;\n if (v < ringMin[c]!) ringMin[c] = v;\n if (v > ringMax[c]!) ringMax[c] = v;\n }\n }\n }\n }\n }\n const luminance = weight < width * height * 0.02 ? undefined : sum / weight;\n const edge =\n ringOpaque === 0\n ? undefined\n : {\n opaque: ringOpaque / ringTotal,\n luminance: ringSum / ringWeight,\n uniform:\n ringMin.every((min, c) => (ringMax[c]! - min) <= EDGE_UNIFORM_SPREAD),\n };\n return { luminance, coverage: opaque / (width * height), edge };\n};\n\n/** Mean luminance of the artwork's own pixels (0 = black … 1 = white). */\nexport const foregroundLuminance = async (\n sourcePath: string,\n): Promise<number | undefined> =>\n (await foregroundStats(sourcePath)).luminance;\n\n/** Opaque coverage ratio (0–1): fraction of the canvas the artwork paints. */\nexport const foregroundCoverage = async (sourcePath: string): Promise<number> =>\n (await foregroundStats(sourcePath)).coverage;\n\n/** Owner rule: pick the background for a foreground automatically. */\nexport const autoBackground = (options: {\n readonly luminance: number | undefined;\n readonly coverage: number;\n /** Border-ring analysis (owner 2026-09-10): solid ring = solid backdrop. */\n readonly edge?: ForegroundEdgeStats | undefined;\n}): IconBackground => {\n if (options.coverage >= 0.985) {\n // A fully opaque foreground with a SOLID border ring carries its own\n // backdrop color (white-pad logos like Wikipedia, black-pad marks): match\n // that color so the composed squircle tile stays seamless. Opaque art\n // WITHOUT a solid ring (photos, full-bleed artwork) still composes on\n // transparency so the user's art passes through verbatim.\n const edge = options.edge;\n if (edge !== undefined && edge.opaque >= 0.98 && edge.uniform) {\n return edge.luminance > 0.5 ? \"white\" : \"black\";\n }\n return \"transparent\";\n }\n // Light artwork → dark background; dark artwork → light background. The\n // artwork's own pixels stay untouched either way.\n return options.luminance !== undefined && options.luminance > 0.5\n ? \"black\"\n : \"white\";\n};\n\nlet squircleMaskImage: Promise<Uint8Array> | undefined;\n\n/**\n * The squircle clip mask (1024², one byte per pixel) taken from the bundled\n * background's alpha: 255 inside the rounded tile, 0 outside.\n */\nconst squircleMask = (): Promise<Uint8Array> => {\n squircleMaskImage ??= (async () => {\n const bg = await loadBackground(\"white\");\n if (bg.width !== APP_ICON_CANVAS || bg.height !== APP_ICON_CANVAS) {\n throw new Error(\"squircle mask must be 1024×1024\");\n }\n const mask = new Uint8Array(APP_ICON_CANVAS * APP_ICON_CANVAS);\n for (let i = 0; i < mask.length; i += 1) {\n mask[i] = bg.data[i * 4 + 3]!;\n }\n return mask;\n })();\n return squircleMaskImage;\n};\n\n/** Clip RGBA pixels to the squircle via a dest-in alpha multiply. */\nconst clipToSquircle = async (image: ImageDataLike): Promise<ImageDataLike> => {\n const mask = await squircleMask();\n const out = cloneImage(image);\n for (let i = 0; i < mask.length; i += 1) {\n out.data[i * 4 + 3] = Math.round((out.data[i * 4 + 3]! * mask[i]!) / 255);\n }\n return out;\n};\n\n/**\n * Composite the app icon. The foreground's ORIGINAL pixels are preserved on\n * every background — the background choice provides the contrast, not a\n * recolor of the artwork.\n *\n * Output: the full-canvas tile (Windows/Linux form) plus the macOS variant\n * where the ENTIRE tile (background + art) is scaled to the platform content\n * size and centered on the transparent canvas. Dock icons since Big Sur\n * carry those margins instead of running edge-to-edge.\n */\nexport const composeAppIcon = async (options: {\n readonly foregroundPath: string;\n readonly background: IconBackground;\n readonly scale?: number;\n /** v1 sampling intent: false keeps pixel-art edges discrete (point sampling). */\n readonly imageSmoothingEnabled?: boolean;\n readonly outputDir: string;\n}): Promise<{\n readonly compositePath: string;\n readonly macOSPath: string;\n readonly background: IconBackground;\n}> => {\n const scale = options.scale ?? FOREGROUND_SCALE_DEFAULT;\n const smoothing = options.imageSmoothingEnabled !== false; // v1 default: true\n const method = smoothing ? \"lanczos3\" as const : \"nearest\" as const;\n await mkdir(options.outputDir, { recursive: true });\n\n // Per-composition subdirectory: fixed filenames must never overwrite an\n // earlier composition, because the wizard serves previews by cache key.\n const key = compositionCacheKey({\n foregroundPath: options.foregroundPath,\n background: options.background,\n scale,\n imageSmoothingEnabled: smoothing,\n });\n const compositionDir = join(options.outputDir, key);\n await mkdir(compositionDir, { recursive: true });\n\n const fgSize = Math.round(APP_ICON_CANVAS * scale);\n const offset = Math.round((APP_ICON_CANVAS - fgSize) / 2);\n\n const decoded = await decodeImageFile(options.foregroundPath);\n const foreground = await containImage(decoded, fgSize, fgSize, method);\n\n const base =\n options.background === \"transparent\"\n ? emptyImageOf(APP_ICON_CANVAS, APP_ICON_CANVAS)\n : await loadBackground(options.background);\n const composed = cloneImage(base);\n pasteImage(composed, foreground, offset, offset);\n // Every composition is clipped to the squircle: OVER compositing lets the\n // foreground's square corners escape the tile at large scales, so the clip\n // runs for ALL backgrounds, not just the transparent one.\n const clipped = await clipToSquircle(composed);\n\n const macOSMargin = Math.round((APP_ICON_CANVAS - MACOS_CONTENT_SIZE) / 2);\n const macOSContent = await resizeImage(\n clipped,\n MACOS_CONTENT_SIZE,\n MACOS_CONTENT_SIZE,\n // Sampling intent governs the macOS downscale as well: pixel art must\n // keep hard edges in the content variant, not just the full-size tile.\n method,\n );\n const macOSVariant = emptyImageOf(APP_ICON_CANVAS, APP_ICON_CANVAS);\n pasteImage(macOSVariant, macOSContent, macOSMargin, macOSMargin);\n\n const writeVariant = async (image: ImageDataLike, suffix: string): Promise<string> => {\n const path = join(compositionDir, `app-composited${suffix}.png`);\n const { encodeDensePng } = await import(\"./encode\");\n await writeFile(path, await encodeDensePng(image));\n return path;\n };\n\n const compositePath = await writeVariant(clipped, \"\");\n const macOSPath = await writeVariant(macOSVariant, \"-macos\");\n return { compositePath, macOSPath, background: options.background };\n};\n\n/** Stable cache key for a composed icon (wizard-side preview reuse). */\nexport const compositionCacheKey = (options: {\n readonly foregroundPath: string;\n readonly background: IconBackground;\n readonly scale: number;\n readonly imageSmoothingEnabled?: boolean;\n}): string =>\n createHash(\"sha256\")\n .update(\n `${options.foregroundPath}|${options.background}|${options.scale}|${options.imageSmoothingEnabled !== false ? \"smooth\" : \"nearest\"}`,\n )\n .digest(\"hex\")\n .slice(0, 16);\n","/**\n * The synthesized default App icon (plan D4/D5/D8): the application name's\n * first glyph on the shared continuous-curvature squircle tile, emitted as a\n * full platform catalog. One generator serves both the runtime daemon's\n * omitted-appIcon materialization and create-opentray's glyph fallback, so\n * both consumers share one visual standard and one cache discipline.\n *\n * Text-presence law: rendering is verified by pixel probe after rasterization\n * (bright-letter ratio). A ladder miss degrades first to the name's first\n * ASCII letter/digit, then to a forced embedded-font glyph — a blank tile is\n * never silently accepted.\n */\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport type { AppIcon } from \"@opentray/spec\";\n\nimport {\n buildGlyphIconSvg,\n GLYPH_ACCENT_DEFAULT,\n glyphLetterOf,\n neutralGlyphLetterOf,\n} from \"./glyph\";\nimport { embeddedGlyphFont, glyphLadderFingerprint } from \"./fonts\";\nimport {\n cloneImage,\n emptyImageOf,\n brightPixelRatio,\n pasteImage,\n rasterizeSvg,\n resizeImage,\n type ImageDataLike,\n} from \"./raster\";\nimport {\n encodeDensePng,\n encodeIcns,\n encodeIco,\n LINUX_SIZES,\n} from \"./encode\";\nimport { packageVersion, type OpenTrayAppIconManifest } from \"./generate\";\nimport { MACOS_CONTENT_SIZE, APP_ICON_CANVAS } from \"./compose\";\n\nconst CANVAS = APP_ICON_CANVAS;\nconst CACHE_SCHEMA_VERSION = 1;\n/** Bright-pixel floor for a rendered letter (spike: \"A\" ≈ 6.8%, 笔 ≈ 7.2%). */\nconst TEXT_PRESENCE_FLOOR = 0.004;\nconst RECIPE_VERSION = \"glyph-v1:squircle-tile:824-macos:72dpi\";\n\nexport interface DefaultAppIconOptions {\n readonly appName: string;\n readonly accent?: string;\n readonly outputDir: string;\n /**\n * Output file stem. The runtime uses the default (`default-app-icon`); the\n * create pipeline passes `app-icon` so the glyph fallback lands in the\n * scaffold's standard catalog layout — one generator, one visual standard.\n */\n readonly fileStem?: string;\n /** Cache metadata path; defaults to `<outputDir>/../.cache/default-app-icon.json`. */\n readonly cachePath?: string;\n}\n\nexport interface DefaultAppIconResult {\n readonly fullPngPath: string;\n readonly macOSPngPath: string;\n readonly icnsPath: string;\n readonly icoPath: string;\n readonly linuxPngPaths: readonly { size: number; path: string }[];\n readonly manifestPath: string;\n /** Absolute file sources ready to pass to the runtime as `appIcon`. */\n readonly appIcon: AppIcon;\n readonly cacheIdentity: string;\n /**\n * True when the name's own first glyph could not be covered by the font\n * ladder on this host and the neutral terminal mark was used instead\n * (e.g. CJK names on CJK-less CI runners and containers).\n */\n readonly degraded: boolean;\n}\n\n/** Generate (or reuse, by full identity) the default glyph App icon catalog. */\nexport async function generateDefaultAppIcon(\n options: DefaultAppIconOptions,\n): Promise<DefaultAppIconResult> {\n const accent = options.accent ?? GLYPH_ACCENT_DEFAULT;\n const stem = options.fileStem ?? \"default-app-icon\";\n const fullPngPath = path.join(options.outputDir, `${stem}.png`);\n const macOSPngPath = path.join(options.outputDir, `${stem}-macos.png`);\n const icnsPath = path.join(options.outputDir, `${stem}.icns`);\n const icoPath = path.join(options.outputDir, `${stem}.ico`);\n const linuxPngPaths = LINUX_SIZES.map((size) => ({\n size,\n path: path.join(options.outputDir, \"linux\", `${size}x${size}`, `${stem}.png`),\n }));\n const manifestPath = path.join(options.outputDir, `${stem}.json`);\n const cachePath =\n options.cachePath ??\n path.join(options.outputDir, \"..\", \".cache\", \"default-app-icon.json\");\n const appIcon: AppIcon = [\n {\n platform: \"darwin\",\n format: \"icns\",\n source: { type: \"file\", path: path.resolve(icnsPath) },\n },\n {\n platform: \"windows\",\n format: \"ico\",\n source: { type: \"file\", path: path.resolve(icoPath) },\n },\n ...linuxPngPaths.map(({ size, path: pngPath }) => ({\n platform: \"linux\" as const,\n format: \"png\" as const,\n size,\n source: { type: \"file\" as const, path: path.resolve(pngPath) },\n })),\n ];\n const cacheIdentity = await defaultIconCacheIdentity({\n appName: options.appName,\n accent,\n fileStem: stem,\n outputDir: options.outputDir,\n });\n const expected = {\n schemaVersion: CACHE_SCHEMA_VERSION,\n cacheIdentity,\n fullPngPath: path.resolve(fullPngPath),\n macOSPngPath: path.resolve(macOSPngPath),\n icnsPath: path.resolve(icnsPath),\n icoPath: path.resolve(icoPath),\n manifestPath: path.resolve(manifestPath),\n linuxPngPaths,\n };\n const cached = await readCachedDegraded(cachePath, cacheIdentity);\n if (cached !== undefined && (await defaultCacheMatches(cachePath, expected))) {\n return {\n fullPngPath,\n macOSPngPath,\n icnsPath,\n icoPath,\n linuxPngPaths,\n manifestPath,\n appIcon,\n cacheIdentity,\n degraded: cached,\n };\n }\n\n const { image: full, degraded } = await renderGlyphPixels(options.appName, accent);\n const macOSVariant = await macosContentVariant(full);\n\n await fs.mkdir(options.outputDir, { recursive: true });\n await fs.mkdir(path.dirname(cachePath), { recursive: true });\n await fs.writeFile(fullPngPath, await encodeDensePng(full));\n await fs.writeFile(macOSPngPath, await encodeDensePng(macOSVariant));\n const pngCache = new Map<number, Uint8Array>();\n const macosPngAt = async (size: number): Promise<Uint8Array> => {\n const cached = pngCache.get(size);\n if (cached !== undefined) return cached;\n const png = await encodeDensePng(\n await resizeImage(cloneImage(macOSVariant), size, size, \"lanczos3\"),\n );\n pngCache.set(size, png);\n return png;\n };\n const fullPngCache = new Map<number, Uint8Array>();\n const fullPngAt = async (size: number): Promise<Uint8Array> => {\n const cached = fullPngCache.get(size);\n if (cached !== undefined) return cached;\n const png = await encodeDensePng(\n await resizeImage(cloneImage(full), size, size, \"lanczos3\"),\n );\n fullPngCache.set(size, png);\n return png;\n };\n await fs.writeFile(icnsPath, await encodeIcns(macosPngAt));\n await fs.writeFile(icoPath, await encodeIco(fullPngAt));\n for (const { size, path: pngPath } of linuxPngPaths) {\n await fs.mkdir(path.dirname(pngPath), { recursive: true });\n await fs.writeFile(pngPath, await fullPngAt(size));\n }\n\n const manifestDirectory = path.dirname(manifestPath);\n const relativeSource = (sourcePath: string): { type: \"file\"; path: string } => ({\n type: \"file\",\n path: path.relative(manifestDirectory, sourcePath).split(path.sep).join(\"/\"),\n });\n const manifest: OpenTrayAppIconManifest = {\n schemaVersion: 1,\n appIcon: [\n {\n platform: \"darwin\",\n format: \"icns\",\n source: relativeSource(path.resolve(icnsPath)),\n },\n {\n platform: \"windows\",\n format: \"ico\",\n source: relativeSource(path.resolve(icoPath)),\n },\n ...linuxPngPaths.map(({ size, path: pngPath }) => ({\n platform: \"linux\" as const,\n format: \"png\" as const,\n size,\n source: relativeSource(path.resolve(pngPath)),\n })),\n ],\n };\n await fs.writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\\n`);\n await fs.writeFile(\n cachePath,\n `${JSON.stringify({ ...expected, appIcon, degraded }, null, 2)}\\n`,\n \"utf8\",\n );\n return {\n fullPngPath,\n macOSPngPath,\n icnsPath,\n icoPath,\n linuxPngPaths,\n manifestPath,\n appIcon,\n cacheIdentity,\n degraded,\n };\n}\n\n/** The cache record persists the degradation flag across restarts. */\nconst readCachedDegraded = async (\n cachePath: string,\n cacheIdentity: string,\n): Promise<boolean | undefined> => {\n try {\n const parsed: unknown = JSON.parse(await fs.readFile(cachePath, \"utf8\"));\n if (typeof parsed !== \"object\" || parsed === null) return undefined;\n const record = parsed as Record<string, unknown>;\n if (record.cacheIdentity !== cacheIdentity || typeof record.degraded !== \"boolean\") {\n return undefined;\n }\n return record.degraded;\n } catch {\n return undefined;\n }\n};\n\n/** Render the glyph tile with the text-presence ladder (no silent blanks). */\nconst renderGlyphPixels = async (\n appName: string,\n accent: string,\n): Promise<{ image: ImageDataLike; degraded: boolean }> => {\n // Ladder: the name's actual first character, then — only when it differs —\n // its first ASCII letter/digit. The terminal attempt is the neutral \"A\"\n // mark, which the embedded subset always covers: a host without the name's\n // scripts (e.g. CJK-less CI runners and containers) still gets a truthful\n // glyph tile — flagged degraded — instead of a failed generation, because\n // callers below this generator have no further fallback.\n const primary = glyphLetterOf(appName);\n const neutral = neutralGlyphLetterOf(appName);\n const attempts: readonly (string | { terminal: string })[] = [\n primary,\n ...(neutral !== null && neutral !== primary ? [neutral] : []),\n { terminal: \"A\" },\n ];\n let lastRatio = 0;\n for (let index = 0; index < attempts.length; index += 1) {\n const attempt = attempts[index]!;\n const letter = typeof attempt === \"string\" ? attempt : attempt.terminal;\n const svg = buildGlyphIconSvg(appName, accent, letter);\n const rendered = await rasterizeSvg(svg, CANVAS);\n lastRatio = brightPixelRatio(rendered);\n if (lastRatio >= TEXT_PRESENCE_FLOOR) {\n return { image: rendered, degraded: index > 0 };\n }\n }\n // The terminal mark is covered by the embedded subset; a blank render there\n // means the raster stack itself is broken.\n throw new Error(\n `default app icon glyph rendered without text pixels for ${JSON.stringify(appName)} (probe ${lastRatio.toFixed(4)} < ${TEXT_PRESENCE_FLOOR}); even the embedded-subset terminal mark failed`,\n );\n};\n\n/** Scale the whole tile into the platform content size on a transparent canvas. */\nconst macosContentVariant = async (full: ImageDataLike): Promise<ImageDataLike> => {\n const margin = Math.round((CANVAS - MACOS_CONTENT_SIZE) / 2);\n const scaled = await resizeImage(\n full,\n MACOS_CONTENT_SIZE,\n MACOS_CONTENT_SIZE,\n \"lanczos3\",\n );\n const content = emptyImageOf(CANVAS, CANVAS);\n pasteImage(content, scaled, margin, margin);\n return content;\n};\n\nasync function defaultIconCacheIdentity(options: {\n appName: string;\n accent: string;\n fileStem: string;\n outputDir: string;\n}): Promise<string> {\n const font = await embeddedGlyphFont();\n const fontHash = crypto.createHash(\"sha256\").update(font).digest(\"hex\");\n const ladderFingerprint = await glyphLadderFingerprint();\n const stack = [\n await packageVersion(\"@jsquash/png\"),\n await packageVersion(\"@jsquash/resize\"),\n await packageVersion(\"@resvg/resvg-wasm\"),\n await packageVersion(\"@shockpkg/icon-encoder\"),\n await packageVersion(\"figma-squircle\"),\n ].join(\"|\");\n return crypto\n .createHash(\"sha256\")\n .update(\n [\n CACHE_SCHEMA_VERSION,\n RECIPE_VERSION,\n options.appName,\n options.accent,\n options.fileStem,\n fontHash,\n ladderFingerprint,\n stack,\n path.resolve(options.outputDir),\n ].join(\"|\"),\n )\n .digest(\"hex\");\n}\n\nasync function defaultCacheMatches(\n cachePath: string,\n expected: {\n schemaVersion: number;\n cacheIdentity: string;\n fullPngPath: string;\n macOSPngPath: string;\n icnsPath: string;\n icoPath: string;\n manifestPath: string;\n linuxPngPaths: readonly { size: number; path: string }[];\n },\n): Promise<boolean> {\n try {\n const parsed: unknown = JSON.parse(await fs.readFile(cachePath, \"utf8\"));\n if (typeof parsed !== \"object\" || parsed === null) return false;\n const record = parsed as Record<string, unknown>;\n if (\n record.schemaVersion !== expected.schemaVersion ||\n record.cacheIdentity !== expected.cacheIdentity ||\n record.icnsPath !== expected.icnsPath\n ) {\n return false;\n }\n await Promise.all([\n fs.access(expected.fullPngPath),\n fs.access(expected.macOSPngPath),\n fs.access(expected.icnsPath),\n fs.access(expected.icoPath),\n fs.access(expected.manifestPath),\n ...expected.linuxPngPaths.map(({ path }) => fs.access(path)),\n ]);\n return true;\n } catch {\n return false;\n }\n}\n","// Orthogonal intents (maintained 2026-08-16; original user request: scrape the\n// service favicon and title as default identity, switching services rescrapes;\n// round-8 acceptance: collect EVERY icon candidate the page declares — SVG,\n// apple-touch-icon, sized PNG sets, /favicon.ico — measure true clarity,\n// dedupe near-identical images, and expose them as ranked clickable\n// candidates):\n// 1. Fetch the service root with proxy-free loopback semantics.\n// 2. Download all declared candidates (capped), never skipping SVG.\n// 3. Decode true pixel dimensions (WASM raster stack; ICO via directory/\n// PNG-payload/DIB extraction) and a perceptual hash; rank by clarity,\n// hide near-duplicates.\n// 4. Keep scrape failures non-fatal with an empty result and a glyph fallback source.\n// 5. URL-mode creation presets (add-create-url-apps D10): scrape an arbitrary\n// http(s) address once and adopt title + best favicon as DEFAULTS — a URL\n// app knows its address up front, unlike a command that must run first.\n\nimport { createHash } from \"node:crypto\";\nimport { mkdtemp, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\nimport { parse } from \"node-html-parser\";\n\nimport {\n buildGlyphIconSvg,\n containImage,\n decodeImage,\n decodeImageFile,\n emptyImageOf,\n encodeImagePng,\n resizeImage,\n} from \"@opentray/icon\";\n\nimport { ensureLoopbackNoProxy, serviceUrl } from \"./port-scan\";\n\n/** Tolerant HTML parsing (node-html-parser): unquoted attrs, case, malformation. */\nconst parseHtml = (html: string) => parse(html, { blockTextElements: { script: true, style: true } });\n\n/** Variant tag: the original art, a solid-color silhouette derived from it,\n * or an AI subject-extraction derived by the wizard's browser client. */\nexport type IconVariant = \"original\" | \"solid-black\" | \"solid-white\" | \"subject\";\n\n/** One scraped icon candidate, ranked and deduplicated. */\nexport interface ScrapedIcon {\n /** Index within the candidate list (stable for /api/icon-data/:port/:index). */\n readonly index: number;\n /** Absolute URL the bytes came from (variants inherit their source URL). */\n readonly url: string;\n /** Absolute temp file holding the icon bytes. */\n readonly path: string;\n /** True pixel clarity (largest dimension; SVG uses intrinsic or 512). */\n readonly width: number;\n readonly height: number;\n /** png | svg | jpeg | webp | gif | ico (ico payloads are extracted to png). */\n readonly format: string;\n /** Which art this entry carries (originals feed the app-icon picker; the\n * advanced tray picker also shows solid variants). */\n readonly variant: IconVariant;\n /** Index of the original candidate a variant was derived from. */\n readonly variantOf?: number;\n}\n\nexport interface ScrapeResult {\n readonly ok: boolean;\n readonly title: string | undefined;\n /** Absolute temp file holding the chosen (clearest) favicon bytes, when found. */\n readonly iconPath: string | undefined;\n readonly iconUrl?: string;\n /** All viable candidates ranked by clarity, near-duplicates removed. */\n readonly icons: readonly ScrapedIcon[];\n /**\n * Whether the page's response policy allows third-party iframe embedding\n * (toolbar mode feasibility); undefined when the page could not be fetched.\n */\n readonly frameEmbeddable?: boolean;\n}\n\nexport interface FaviconCandidate {\n readonly href: string;\n readonly rel: string;\n readonly sizes?: string;\n}\n\n/** Extract `<title>` text from HTML. */\nexport const extractTitle = (html: string): string | undefined => {\n const root = parseHtml(html);\n const title = root.querySelector(\"title\")?.text;\n if (title === undefined) {\n return undefined;\n }\n // node-html-parser decodes entities fully (numeric + named).\n const trimmed = title.replace(/\\s+/gu, \" \").trim();\n return trimmed.length > 0 ? trimmed : undefined;\n};\n\n/** Extract `<link rel=... href=...>` favicon candidates from HTML head. */\nexport const extractFaviconCandidates = (html: string): readonly FaviconCandidate[] => {\n const root = parseHtml(html);\n const candidates: FaviconCandidate[] = [];\n for (const link of root.querySelectorAll(\"link\")) {\n const rel = (link.getAttribute(\"rel\") ?? \"\").trim().toLowerCase();\n // A tolerant HTML parser handles unquoted attributes (REL=icon\n // HREF=/favicon.ico), uppercase tags, and malformed markup — a regex\n // over quoted-attribute forms silently dropped all of those.\n if (!rel.includes(\"icon\") || rel.includes(\"mask\")) {\n continue;\n }\n const href = (link.getAttribute(\"href\") ?? \"\").trim();\n if (href.length === 0) {\n continue;\n }\n const sizes = link.getAttribute(\"sizes\");\n candidates.push({\n href,\n rel,\n ...(sizes === undefined || sizes.length === 0 ? {} : { sizes }),\n });\n }\n return candidates;\n};\n\n/** Largest dimension of a `sizes` attribute value such as `32x32` or `any`. */\nexport const faviconCandidateSize = (candidate: FaviconCandidate): number => {\n if (candidate.sizes === undefined) {\n return 0;\n }\n const match = /(\\d+)\\s*x\\s*(\\d+)/iu.exec(candidate.sizes);\n if (match === null || match[1] === undefined || match[2] === undefined) {\n return 0;\n }\n return Math.max(Number.parseInt(match[1], 10), Number.parseInt(match[2], 10));\n};\n\n/** Resolve a favicon href against the service origin. */\nexport const resolveFaviconUrl = (href: string, origin: string): string | undefined => {\n try {\n return new URL(href, origin).href;\n } catch {\n return undefined;\n }\n};\n\n/** Order candidates: declared-size icons descending, then apple-touch-icon, then others. */\nexport const rankFaviconCandidates = (\n candidates: readonly FaviconCandidate[],\n): readonly FaviconCandidate[] => {\n const score = (candidate: FaviconCandidate): number => {\n const declared = faviconCandidateSize(candidate);\n if (declared > 0) {\n return declared;\n }\n if (candidate.rel.includes(\"apple-touch-icon\")) {\n return 128;\n }\n return 1;\n };\n return [...candidates].sort((a, b) => score(b) - score(a));\n};\n\nexport interface ScrapePage {\n readonly ok: boolean;\n readonly status: number;\n readonly body: string;\n readonly headers: Record<string, string>;\n}\n\nexport interface ScrapeBytes {\n readonly ok: boolean;\n readonly status: number;\n readonly bytes: Buffer;\n readonly contentType: string;\n}\n\nexport interface ScrapeFetch {\n page(url: string, timeoutMs?: number): Promise<ScrapePage>;\n bytes(url: string, timeoutMs?: number): Promise<ScrapeBytes>;\n}\n\nconst fetchWithTimeout = async (\n url: string,\n timeoutMs: number,\n accept: string,\n): Promise<Response | undefined> => {\n ensureLoopbackNoProxy();\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n return await fetch(url, {\n signal: controller.signal,\n redirect: \"follow\",\n headers: { accept },\n });\n } catch {\n return undefined;\n } finally {\n clearTimeout(timer);\n }\n};\n\nconst defaultFetch: ScrapeFetch = {\n async page(url, timeoutMs = 5_000) {\n const response = await fetchWithTimeout(\n url,\n timeoutMs,\n \"text/html,application/xhtml+xml\",\n );\n if (response === undefined) {\n return { ok: false, status: 0, body: \"\", headers: {} };\n }\n const body = await response.text();\n const headers: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n headers[key.toLowerCase()] = value;\n });\n return { ok: response.ok, status: response.status, body, headers };\n },\n async bytes(url, timeoutMs = 5_000) {\n const response = await fetchWithTimeout(url, timeoutMs, \"image/*,*/*;q=0.8\");\n if (response === undefined) {\n return { ok: false, status: 0, bytes: Buffer.alloc(0), contentType: \"\" };\n }\n const buffer = Buffer.from(await response.arrayBuffer());\n return {\n ok: response.ok,\n status: response.status,\n bytes: buffer,\n contentType: (response.headers.get(\"content-type\") ?? \"\").toLowerCase(),\n };\n },\n};\n\n/** Cap on downloaded candidates per scrape. */\nconst MAX_ICON_DOWNLOADS = 8;\n\n/**\n * Whether the page's response headers permit embedding by a third-party\n * origin (the toolbar wrapper): rejects on X-Frame-Options (except\n * ALLOWALL) and on CSP frame-ancestors without a wildcard. Absent both\n * policies, embedding is allowed by default — same default browsers use.\n */\nexport const responseHeadersAllowEmbedding = (headers: Record<string, string>): boolean => {\n const xfo = (headers[\"x-frame-options\"] ?? \"\").trim().toUpperCase();\n if (xfo.length > 0 && !xfo.split(\",\").map((token) => token.trim()).includes(\"ALLOWALL\")) {\n return false;\n }\n // Multiple CSP headers (and repeated directives) join into one scan: a\n // frame-ancestors directive exists and none of its sources is a wildcard.\n const csp = (headers[\"content-security-policy\"] ?? \"\").toLowerCase();\n const directive = /frame-ancestors\\s+([^;]+)/gu;\n for (const match of csp.matchAll(directive)) {\n const sources = (match[1] ?? \"\").trim();\n if (sources.length === 0 || !sources.split(/\\s+/u).includes(\"*\")) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Scrape title and ALL icon candidates from an arbitrary http(s) URL.\n * Never throws: failures return `ok: false` with whatever partial identity\n * was found. (`scrapeService` is the loopback-port wrapper over this.)\n */\nexport const scrapeUrl = async (\n url: string,\n options: { fetch?: ScrapeFetch; tempDir?: string } = {},\n): Promise<ScrapeResult> => {\n const fetchImpl = options.fetch ?? defaultFetch;\n const origin = url;\n const page = await fetchImpl.page(origin);\n if (!page.ok) {\n return {\n ok: false,\n title: undefined,\n iconPath: undefined,\n icons: [],\n };\n }\n\n const title = extractTitle(page.body);\n const candidates = rankFaviconCandidates(extractFaviconCandidates(page.body));\n // The root /favicon.ico fallback is resolved against the ORIGIN (not the\n // full address): a deep link like /app must still probe the site root.\n const orderedUrls = [\n ...candidates.map((candidate) => resolveFaviconUrl(candidate.href, origin)),\n resolveFaviconUrl(\"/favicon.ico\", origin),\n ]\n .filter((url): url is string => url !== undefined)\n .filter((url, index, all) => all.indexOf(url) === index)\n .slice(0, MAX_ICON_DOWNLOADS);\n\n const dir = await ensureTempIconDir(options.tempDir);\n const collected: { url: string; path: string; width: number; height: number; format: string; hash: string | undefined }[] = [];\n for (const url of orderedUrls) {\n if (collected.length >= MAX_ICON_DOWNLOADS) {\n break;\n }\n const icon = await fetchImpl.bytes(url);\n if (!icon.ok || icon.bytes.length < 64) {\n continue;\n }\n const prepared = await prepareIconBytes(icon.bytes, icon.contentType);\n if (prepared === undefined) {\n // HTML fallback routes, corrupt images, undecodable payloads: skip.\n continue;\n }\n const { bytes, format } = prepared;\n const meta = await iconDimensions(bytes, format);\n if (meta === undefined) {\n continue;\n }\n const hash = await iconPerceptualHash(bytes);\n // Near-duplicate clarity: same image at another size is redundant.\n if (hash !== undefined && collected.some((c) => c.hash !== undefined && hamming(hash, c.hash) <= 8)) {\n continue;\n }\n const path = await writeIconTemp(bytes, dir);\n collected.push({ url, path, ...meta, format, hash });\n }\n\n // Rank by true clarity: pixel area descending (SVG scales infinitely, so\n // intrinsic (or default 512) dimensions rank it with the clearest sources).\n collected.sort((a, b) => b.width * a.height === a.width * b.height ? 0 : b.width * b.height - a.width * a.height);\n const originals = collected.map((c, order) => ({ ...c, order }));\n\n // Solid tray-template silhouettes are NO LONGER derived here: the alpha\n // mask of an opaque white-pad favicon is a full square, which produced\n // useless solid tiles. They are now derived server-side from the\n // browser-extracted SUBJECT (see wizard addIconCandidate / D17).\n\n const icons: ScrapedIcon[] = originals.map<ScrapedIcon>((c) => ({\n index: c.order,\n url: c.url,\n path: c.path,\n width: c.width,\n height: c.height,\n format: c.format,\n variant: \"original\",\n }));\n\n return {\n ok: true,\n title,\n iconPath: originals[0]?.path,\n ...(originals[0] === undefined ? {} : { iconUrl: originals[0].url }),\n icons,\n frameEmbeddable: responseHeadersAllowEmbedding(page.headers),\n };\n}\n\n/**\n * Scrape title and ALL icon candidates from a service port. Never throws:\n * failures return `ok: false` with whatever partial identity was found.\n */\nexport const scrapeService = (\n port: number,\n options: { fetch?: ScrapeFetch; tempDir?: string } = {},\n): Promise<ScrapeResult> => scrapeUrl(serviceUrl(port), options);\n\n// URL-mode creation presets (add-create-url-apps D10, 2026-09-09; owner\n// acceptance round): unlike a command app — which must RUN before anything\n// can be scraped — a URL app knows its address up front, so creation may\n// adopt the page title and best favicon as DEFAULTS. The favicon flows as\n// the scrape pipeline's already-normalized temp file (ICO frames cracked,\n// SVG densified), feeding the same importResource snapshot path the wizard\n// uses. Every failure path degrades to {} — enrichment never blocks or\n// fails creation.\nexport interface UrlPresets {\n /** Page `<title>` (whitespace-normalized, length-capped) or undefined. */\n readonly appName?: string;\n /** Normalized temp-file icon source for the app icon, or undefined. */\n readonly appIconPath?: string;\n /** Page policy allows third-party iframe embedding; undefined when unknown. */\n readonly frameEmbeddable?: boolean;\n}\n\n/** Upper bound for an adopted page title (display names stay sane). */\nconst PRESET_TITLE_MAX = 80;\n\nexport const deriveUrlPresets = async (\n url: string,\n options: { fetch?: ScrapeFetch; tempDir?: string } = {},\n): Promise<UrlPresets> => {\n const scraped = await scrapeUrl(url, options);\n if (!scraped.ok) {\n return {};\n }\n const title = scraped.title?.trim();\n const appName =\n title !== undefined && title.length > 0\n ? (title.length > PRESET_TITLE_MAX ? `${title.slice(0, PRESET_TITLE_MAX - 1).trimEnd()}…` : title)\n : undefined;\n return {\n ...(appName === undefined ? {} : { appName }),\n ...(scraped.iconPath === undefined ? {} : { appIconPath: scraped.iconPath }),\n ...(scraped.frameEmbeddable === undefined ? {} : { frameEmbeddable: scraped.frameEmbeddable }),\n };\n};\n\n/** Tray-template silhouette render size (tray projections are ≤ 64pt). */\nexport const SOLID_SIZE = 128;\n\n/**\n * Render a solid-color silhouette from an icon's alpha mask (RGB discarded,\n * alpha kept) — the shape language macOS tray templates want. Called on the\n * browser-extracted SUBJECT (its alpha mask IS the subject shape); returns\n * undefined for non-decodable sources instead of failing the caller.\n */\nexport const renderSolidSilhouette = async (\n sourcePath: string,\n color: { r: number; g: number; b: number },\n): Promise<Buffer | undefined> => {\n try {\n const image = await containImage(\n await decodeImageFile(sourcePath),\n SOLID_SIZE,\n SOLID_SIZE,\n );\n // RGB discarded (repainted in the solid color), alpha kept: the shape\n // language macOS tray templates want.\n for (let i = 0; i < image.data.length; i += 4) {\n image.data[i] = color.r;\n image.data[i + 1] = color.g;\n image.data[i + 2] = color.b;\n }\n return Buffer.from(await encodeImagePng(image));\n } catch {\n return undefined;\n }\n};\n\n/** Recognizable raster image signatures (PNG/JPEG/GIF/ICO/BMP/WebP). */\nconst hasRasterImageSignature = (bytes: Buffer): boolean => {\n if (bytes.length < 16) {\n return false;\n }\n if (\n bytes[0] === 0x89 &&\n bytes[1] === 0x50 &&\n bytes[2] === 0x4e &&\n bytes[3] === 0x47 &&\n bytes[4] === 0x0d &&\n bytes[5] === 0x0a &&\n bytes[6] === 0x1a &&\n bytes[7] === 0x0a &&\n bytes.subarray(12, 16).toString(\"latin1\") === \"IHDR\"\n ) {\n return true; // PNG with a well-formed leading IHDR chunk\n }\n if (bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff) {\n return true; // JPEG\n }\n if (\n bytes.subarray(0, 4).toString(\"latin1\") === \"RIFF\" &&\n bytes.subarray(8, 12).toString(\"latin1\") === \"WEBP\"\n ) {\n return true; // WebP\n }\n if (bytes[0] === 0x00 && bytes[1] === 0x00 && bytes[2] === 0x01 && bytes[3] === 0x00) {\n return true; // ICO\n }\n if (bytes.subarray(0, 6).toString(\"latin1\").startsWith(\"GIF8\")) {\n return true; // GIF\n }\n if (bytes[0] === 0x42 && bytes[1] === 0x4d) {\n return true; // BMP\n }\n return false;\n};\n\n\nconst ensureTempIconDir = async (tempDir?: string): Promise<string | undefined> => {\n if (tempDir !== undefined) {\n return tempDir;\n }\n return mkdtemp(join(tmpdir(), \"create-opentray-icon-\"));\n};\n\n/**\n * Validate and normalize candidate bytes. Returns decodable image bytes plus a\n * format tag: raster signatures pass through, SVG text passes through, and ICO\n * containers are cracked open to their largest frame (PNG payload extracted\n * verbatim, BMP DIB rows converted to PNG) because the raster stack cannot\n * read ICO containers.\n */\nconst prepareIconBytes = async (\n bytes: Buffer,\n contentType: string,\n): Promise<{ bytes: Buffer; format: string } | undefined> => {\n if (looksLikeSvg(bytes, contentType)) {\n return { bytes: await densifySvg(bytes), format: \"svg\" };\n }\n // ICO first: its magic overlaps the generic raster check, but the raster\n // stack cannot read ICO — crack the container to its largest frame.\n if (isIcoContainer(bytes)) {\n const extracted = await extractLargestIcoFrame(bytes);\n if (extracted !== undefined) {\n return { bytes: extracted, format: \"png\" };\n }\n return undefined;\n }\n if (hasRasterImageSignature(bytes)) {\n const format = rasterFormatOf(bytes);\n return format === undefined ? undefined : { bytes, format };\n }\n return undefined;\n};\n\n/**\n * Rewrite an SVG so it rasterizes at high resolution. The rasterizer renders\n * at the declared width/height, ignoring density attributes. Scraped\n * favicons declare small intrinsic sizes (often just 16–50px), so the\n * rasterized base bitmap is tiny and every later upscale (icon catalog,\n * tray, candidates) is blurry. Rewriting the root <svg> width/height to a\n * large target — viewBox untouched, so vector geometry scales cleanly —\n * gives every downstream consumer a crisp base.\n */\nexport const SVG_RASTER_TARGET = 1024;\n\nconst densifySvg = async (bytes: Buffer): Promise<Buffer> => {\n const text = bytes.toString(\"utf8\");\n const svgOpen = text.indexOf(\"<svg\");\n if (svgOpen === -1) {\n return bytes;\n }\n const tagEnd = text.indexOf(\">\", svgOpen);\n if (tagEnd === -1) {\n return bytes;\n }\n const openTag = text.slice(svgOpen, tagEnd + 1);\n let next = openTag;\n if (/\\swidth=/u.test(next)) {\n next = next.replace(/\\swidth=\"[^\"]*\"/u, ` width=\"${SVG_RASTER_TARGET}\"`);\n } else {\n next = next.replace(\"<svg\", `<svg width=\"${SVG_RASTER_TARGET}\"`);\n }\n if (/\\sheight=/u.test(next)) {\n next = next.replace(/\\sheight=\"[^\"]*\"/u, ` height=\"${SVG_RASTER_TARGET}\"`);\n } else {\n next = next.replace(\"<svg\", `<svg height=\"${SVG_RASTER_TARGET}\"`);\n }\n if (next === openTag) {\n return bytes;\n }\n return Buffer.from(text.slice(0, svgOpen) + next + text.slice(tagEnd + 1), \"utf8\");\n};\n\nconst looksLikeSvg = (bytes: Buffer, contentType: string): boolean => {\n if (contentType.includes(\"image/svg\")) {\n return true;\n }\n const head = bytes.subarray(0, 512).toString(\"utf8\").trimStart();\n return head.startsWith(\"<?xml\") || head.startsWith(\"<svg\") || head.includes(\"<svg\");\n};\n\nconst rasterFormatOf = (bytes: Buffer): string | undefined => {\n if (bytes[0] === 0x89 && bytes[1] === 0x50) return \"png\";\n if (bytes[0] === 0xff && bytes[1] === 0xd8) return \"jpeg\";\n if (bytes[0] === 0x47 && bytes[1] === 0x49) return \"gif\";\n if (bytes.subarray(0, 4).toString(\"latin1\") === \"RIFF\") return \"webp\";\n // BM magic: accepted by the signature gate (line ~408) but previously\n // missing here — BMP candidates were recognized then silently dropped.\n if (bytes[0] === 0x42 && bytes[1] === 0x4d) return \"bmp\";\n return undefined;\n};\n\nconst isIcoContainer = (bytes: Buffer): boolean =>\n bytes.length >= 8 &&\n bytes[0] === 0x00 && bytes[1] === 0x00 &&\n bytes[2] === 0x01 && bytes[3] === 0x00;\n\n/**\n * Crack an ICO open with decode-ico (palette/row-alignment/AND-mask/\n * BITFIELDS coverage the hand-rolled DIB reader lacked): pick the largest\n * frame by area; PNG frames pass through verbatim, BMP frames re-encode\n * from the decoder's RGBA through the shared kernel encoder.\n */\nconst extractLargestIcoFrame = async (ico: Buffer): Promise<Buffer | undefined> => {\n const decodeIco = (await import(\"decode-ico\")).default;\n const { toPngBuffer } = await import(\"./icon-codec\");\n let best:\n | { width: number; height: number; data: Uint8Array; png: boolean }\n | undefined;\n for (const frame of decodeIco(ico)) {\n const width = frame.width;\n const height = frame.height;\n if (!Number.isInteger(width) || !Number.isInteger(height) || width <= 0 || height <= 0) {\n continue;\n }\n if (best === undefined || width * height > best.width * best.height) {\n const isPng = frame.type === \"png\";\n const data: Uint8Array = frame.type === \"png\" ? frame.data : new Uint8Array(frame.data);\n best = { width, height, data, png: isPng };\n }\n }\n if (best === undefined) {\n return undefined;\n }\n if (best.png) {\n return Buffer.from(best.data);\n }\n return toPngBuffer(Buffer.from(best.data), best.width, best.height, 4);\n};\n\n/**\n * True pixel dimensions; SVG uses intrinsic attrs, else viewBox, else 512.\n * Rasters decode through the kernel (the sharp metadata()-style header probe\n * is gone): favicon candidates are small, and only URL-mode scrapes can meet\n * larger photos — bounded by the scrape's own fetch limits.\n */\nconst iconDimensions = async (\n bytes: Buffer,\n format: string,\n): Promise<{ width: number; height: number } | undefined> => {\n if (format === \"svg\") {\n return svgDimensions(bytes) ?? { width: 512, height: 512 };\n }\n try {\n const image = await decodeImage(new Uint8Array(bytes));\n if (image.width > 0 && image.height > 0) {\n return { width: image.width, height: image.height };\n }\n } catch {\n // fall through to raster header parsing\n }\n if (format === \"png\" && bytes.length >= 24) {\n const width = bytes.readUInt32BE(16);\n const height = bytes.readUInt32BE(20);\n if (width > 0) return { width, height };\n }\n return undefined;\n};\n\nconst svgDimensions = (bytes: Buffer): { width: number; height: number } | undefined => {\n const head = bytes.subarray(0, 2048).toString(\"utf8\");\n const num = (value: string | undefined): number | undefined => {\n if (value === undefined) return undefined;\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;\n };\n const width = num(/<svg[^>]*\\bwidth\\s*=\\s*[\"']([\\d.]+)/iu.exec(head)?.[1]);\n const height = num(/<svg[^>]*\\bheight\\s*=\\s*[\"']([\\d.]+)/iu.exec(head)?.[1]);\n if (width !== undefined && height !== undefined) {\n return { width, height };\n }\n const viewBox = /viewBox\\s*=\\s*[\"']\\s*([\\d.]+)[\\s,]+([\\d.]+)[\\s,]+([\\d.]+)[\\s,]+([\\d.]+)/iu.exec(head);\n const vbWidthRaw = viewBox?.[3];\n const vbHeightRaw = viewBox?.[4];\n if (vbWidthRaw !== undefined && vbHeightRaw !== undefined) {\n const vbWidth = Number.parseFloat(vbWidthRaw);\n const vbHeight = Number.parseFloat(vbHeightRaw);\n if (Number.isFinite(vbWidth) && vbWidth > 0) {\n return { width: vbWidth, height: Number.isFinite(vbHeight) ? vbHeight : vbWidth };\n }\n }\n return undefined;\n};\n\n/** 64-bit average hash over an 8x8 grayscale normalization (perceptual dedupe). */\nconst iconPerceptualHash = async (bytes: Buffer): Promise<string | undefined> => {\n try {\n // Flatten over white at FULL resolution BEFORE the downscale: the WASM\n // resize premultiplies alpha, and hashing the premultiplied thumb lets a\n // solid-white silhouette's letterbox ringing mimic a solid-black shape —\n // the two color variants would collide and dedupe each other away.\n const decoded = await decodeImage(new Uint8Array(bytes));\n const flattened = emptyImageOf(decoded.width, decoded.height);\n for (let i = 0; i < decoded.data.length; i += 4) {\n const alpha = (decoded.data[i + 3] ?? 0) / 255;\n flattened.data[i] = Math.round((decoded.data[i] ?? 0) * alpha + 255 * (1 - alpha));\n flattened.data[i + 1] = Math.round(\n (decoded.data[i + 1] ?? 0) * alpha + 255 * (1 - alpha),\n );\n flattened.data[i + 2] = Math.round(\n (decoded.data[i + 2] ?? 0) * alpha + 255 * (1 - alpha),\n );\n flattened.data[i + 3] = 255;\n }\n const image = await resizeImage(flattened, 8, 8, \"lanczos3\");\n if (image.data.length < 64 * 4) {\n return undefined;\n }\n // Luma follows BT.601, like the former sharp grayscale chain.\n const luma: number[] = [];\n for (let i = 0; i < 64; i += 1) {\n const o = i * 4;\n luma.push(\n 0.299 * (image.data[o] ?? 0) +\n 0.587 * (image.data[o + 1] ?? 0) +\n 0.114 * (image.data[o + 2] ?? 0),\n );\n }\n const mean = luma.reduce((sum, value) => sum + value, 0) / 64;\n let hash = \"\";\n for (const value of luma) {\n hash += value >= mean ? \"1\" : \"0\";\n }\n return hash;\n } catch {\n return undefined;\n }\n};\n\nconst hamming = (a: string, b: string): number => {\n let distance = 0;\n for (let i = 0; i < Math.min(a.length, b.length); i += 1) {\n if (a[i] !== b[i]) {\n distance += 1;\n }\n }\n return distance;\n};\n\nconst writeIconTemp = async (bytes: Buffer, dir?: string): Promise<string> => {\n const targetDir = dir ?? (await mkdtemp(join(tmpdir(), \"create-opentray-icon-\")));\n // Unique per bytes: multiple candidates of one scrape live side by side.\n const name = `icon-${createHash(\"sha256\").update(bytes).digest(\"hex\").slice(0, 16)}.bin`;\n const path = join(targetDir, name);\n await writeFile(path, bytes);\n return path;\n};\n\n/**\n * Persist the glyph fallback SVG (the shared kernel's first-letter tile) as\n * a temp icon source.\n */\nexport const writeGlyphIconTemp = async (\n appName: string,\n tempDir: string,\n): Promise<string> => {\n const path = join(tempDir, \"glyph.svg\");\n await writeFile(path, buildGlyphIconSvg(appName), \"utf8\");\n return path;\n};\n","// Thin image-encoding seam (raw pixels → PNG through the shared icon\n// kernel). Kept as its own module so tests can stub encoding without\n// stubbing the rest of the kernel.\nimport { emptyImageOf, encodeImagePng } from \"@opentray/icon\";\n\nexport const toPngBuffer = async (\n rgba: Buffer,\n width: number,\n height: number,\n channels: 3 | 4,\n): Promise<Buffer> => {\n const pixels = width * height;\n const image = emptyImageOf(width, height);\n if (channels === 3) {\n for (let i = 0; i < pixels; i += 1) {\n image.data[i * 4] = rgba[i * 3] ?? 0;\n image.data[i * 4 + 1] = rgba[i * 3 + 1] ?? 0;\n image.data[i * 4 + 2] = rgba[i * 3 + 2] ?? 0;\n image.data[i * 4 + 3] = 255;\n }\n } else {\n image.data.set(rgba.subarray(0, pixels * 4));\n }\n return Buffer.from(await encodeImagePng(image));\n};\n","// Orthogonal intents (maintained 2026-07-22; original user requests: run the\n// start command once and stream its shell output; owner acceptance then asked\n// for a real interactive terminal with completely objective stdio transport —\n// the renderer owns all analysis):\n// 1. Spawn the tokenized command without a shell whenever possible.\n// 2. Prefer a pseudo-terminal (prebuilt @lydell/node-pty) for interactive stdin.\n// 3. Transport the binding's strings VERBATIM: no re-decoding, no analysis.\n// node-pty's contract is a UTF-8 text channel (invalid bytes become U+FFFD\n// inside the binding, split multibyte chars are joined there — same\n// semantics as the ../openspecui reference stack). The wizard adds zero\n// interpretation on top; ghostty-web owns all rendering.\n// 4. Degrade to pipe mode when the native PTY dependency is unavailable.\n// 5. Own process-tree teardown on stop/exit across POSIX and Windows.\n\nimport { spawn, execFile, type ChildProcess } from \"node:child_process\";\nimport { createRequire } from \"node:module\";\n\nexport interface CommandRunEvent {\n readonly type: \"stdout\" | \"stderr\" | \"exit\" | \"spawn-error\" | \"pty-ready\" | \"pty-unavailable\";\n /** The PTY binding's output chunk, verbatim; rendering is the frontend's job. */\n readonly chunk?: string;\n readonly code?: number | null;\n readonly message?: string;\n}\n\nexport interface CommandRunTerminalSize {\n readonly cols: number;\n readonly rows: number;\n}\n\nexport interface CommandRunOptions {\n readonly tokens: readonly string[];\n readonly cwd?: string;\n readonly env?: NodeJS.ProcessEnv;\n readonly ringLimit?: number;\n /** Attach through a PTY when available; defaults to true. */\n readonly pty?: boolean;\n readonly terminalSize?: CommandRunTerminalSize;\n readonly onEvent: (event: CommandRunEvent) => void;\n}\n\nexport interface CommandRun {\n readonly pid: number | undefined;\n readonly pty: boolean;\n readonly exited: Promise<{ code: number | null; spawnError?: string }>;\n readonly output: readonly string[];\n /** Write terminal input bytes to the command's stdin (PTY mode only). */\n write(data: string): void;\n /** Resize the pseudo-terminal (PTY mode only). */\n resize(size: CommandRunTerminalSize): void;\n kill(): Promise<void>;\n}\n\nconst SHELL_METACHARS = /[<>&|;$`\"'%]/u;\n\n/** True when the command line needs a shell (only Windows uses cmd /c). */\nexport const needsShell = (tokens: readonly string[]): boolean =>\n tokens.some((token) => SHELL_METACHARS.test(token) && token.length > 1);\n\n/** Minimal shape of the node-pty API this module needs (@lydell/node-pty is API-compatible). */\ninterface PtyModule {\n spawn(\n file: string,\n args: readonly string[],\n options: {\n name: string;\n cols: number;\n rows: number;\n cwd: string;\n env: Record<string, string>;\n },\n ): PtyProcess;\n}\n\ninterface PtyProcess {\n readonly pid: number;\n write(data: string): void;\n resize(cols: number, rows: number): void;\n kill(signal?: string): void;\n onData(listener: (data: string) => void): void;\n onExit(listener: (event: { exitCode: number; signal?: number }) => void): void;\n}\n\nlet ptyProbe: Promise<PtyModule | undefined> | undefined;\n\n/**\n * Feature-detect the optional native PTY dependency. A failed or missing\n * install must never break the wizard: callers fall back to pipe mode.\n * The probe result is cached so repeated commands do not re-require it.\n */\nexport const loadPtyModule = (\n probe: () => Promise<PtyModule | undefined> = defaultPtyProbe,\n): Promise<PtyModule | undefined> => {\n ptyProbe ??= probe().catch(() => undefined);\n return ptyProbe;\n};\n\nconst defaultPtyProbe = async (): Promise<PtyModule | undefined> => {\n // Bun loads the native module and spawns fine, but its PTY read thread never\n // delivers onData — a silent empty terminal (verified 2026-08-16). Node is\n // the supported interactive host; under Bun degrade to pipes immediately.\n if (process.versions.bun !== undefined) {\n return undefined;\n }\n const require = createRequire(import.meta.url);\n for (const request of [\"@lydell/node-pty\", \"node-pty\"]) {\n try {\n const raw: unknown = require(request);\n const module = raw as { spawn?: unknown };\n if (typeof module.spawn === \"function\") {\n return raw as PtyModule;\n }\n } catch {\n // Try the next candidate distribution.\n }\n }\n return undefined;\n};\n\n/** Test seam: reset the cached PTY probe. */\nexport const resetPtyProbeCache = (): void => {\n ptyProbe = undefined;\n};\n\nconst DEFAULT_TERMINAL_SIZE: CommandRunTerminalSize = { cols: 100, rows: 30 };\n\n/** Minimal shapes of Bun's native PTY (Bun ≥ 1.2.19). */\ninterface BunTerminalOptions {\n cols?: number;\n rows?: number;\n name?: string;\n data?: (terminal: unknown, data: Uint8Array<ArrayBuffer>) => void;\n exit?: (terminal: unknown, exitCode: number, signal: string | null) => void;\n}\n\ninterface BunTerminal {\n write(data: string | BufferSource): number;\n resize(cols: number, rows: number): void;\n close(): void;\n}\n\ninterface BunProcess {\n readonly pid: number;\n readonly exited: Promise<number>;\n kill(signal?: number | string): void;\n}\n\ninterface BunRuntime {\n Terminal: new (options: BunTerminalOptions) => BunTerminal;\n spawn(\n command: readonly string[],\n options: { terminal: BunTerminal; cwd?: string; env?: Record<string, string> },\n ): BunProcess;\n}\n\n/** The Bun global when running under Bun with the native Terminal API. */\nexport const bunTerminalRuntime = (): BunRuntime | undefined => {\n const runtime = (globalThis as { Bun?: unknown }).Bun;\n if (typeof runtime !== \"object\" || runtime === null) {\n return undefined;\n }\n const candidate = runtime as Partial<BunRuntime>;\n if (typeof candidate.Terminal !== \"function\" || typeof candidate.spawn !== \"function\") {\n return undefined;\n }\n return candidate as BunRuntime;\n};\n\n/**\n * Native Bun PTY backend: `Bun.Terminal` + `Bun.spawn({ terminal })`. Under\n * Bun this replaces @lydell/node-pty entirely — the optional native module\n * loads but never delivers output under Bun, while the built-in Terminal is\n * first-class (verified Bun 1.3.14: output, stdin echo, resize, exit codes).\n */\nexport const startBunTerminalRun = (\n options: CommandRunOptions,\n bun: BunRuntime,\n): CommandRun => {\n const [command, ...args] = options.tokens;\n if (command === undefined) {\n return emptyRun(options, \"command is empty\");\n }\n const size = options.terminalSize ?? DEFAULT_TERMINAL_SIZE;\n const ring: string[] = [];\n const ringLimit = options.ringLimit ?? 200;\n const decoder = new TextDecoder();\n const append = (chunk: string): void => {\n ring.push(chunk);\n if (ring.length > ringLimit) {\n ring.splice(0, ring.length - ringLimit);\n }\n };\n\n const terminal = new bun.Terminal({\n cols: size.cols,\n rows: size.rows,\n name: \"xterm-256color\",\n data: (_terminal, data) => {\n // Objective passthrough: decode the PTY's bytes verbatim; rendering and\n // all analysis stay in the frontend renderer.\n const text = decoder.decode(data);\n if (text.length === 0) {\n return;\n }\n append(text);\n options.onEvent({ type: \"stdout\", chunk: text });\n },\n });\n\n const proc = bun.spawn([command, ...args], {\n terminal,\n cwd: options.cwd ?? globalThis.process.cwd(),\n env: {\n ...globalThis.process.env,\n ...options.env,\n TERM: \"xterm-256color\",\n } as Record<string, string>,\n });\n options.onEvent({ type: \"pty-ready\" });\n\n const exited = proc.exited.then((code) => {\n options.onEvent({ type: \"exit\", code });\n return { code };\n });\n\n let killPromise: Promise<void> | undefined;\n return {\n pid: proc.pid,\n pty: true,\n exited,\n output: ring,\n write(data) {\n terminal.write(data);\n },\n resize({ cols, rows }) {\n terminal.resize(cols, rows);\n },\n kill() {\n killPromise ??= (async () => {\n // Closing the PTY sends SIGHUP to the session (children included);\n // the direct kill covers processes that detached the terminal.\n try {\n proc.kill();\n } catch {\n // already dead\n }\n try {\n terminal.close();\n } catch {\n // already closed\n }\n // D5 (create-no-first-launch-force-terminal): the direct signals miss\n // descendants that escaped the session — sweep the PPid tree so a\n // stopped preview can never leave a server holding the service port.\n await sweepDescendants(proc.pid, \"SIGTERM\").catch(() => undefined);\n const exitedInGrace = await Promise.race([\n exited.then(() => true),\n new Promise<boolean>((resolve) => {\n setTimeout(() => resolve(false), 3000);\n }),\n ]);\n if (!exitedInGrace) {\n await sweepDescendants(proc.pid, \"SIGKILL\").catch(() => undefined);\n }\n })();\n return killPromise;\n },\n };\n};\n\nexport const startCommandRun = async (options: CommandRunOptions): Promise<CommandRun> => {\n if (options.pty !== false) {\n const bun = bunTerminalRuntime();\n if (bun !== undefined) {\n try {\n return startBunTerminalRun(options, bun);\n } catch (error) {\n // PTY spawn failures fall through to pipe mode so the wizard stays usable.\n options.onEvent({\n type: \"spawn-error\",\n message: `bun terminal spawn failed: ${error instanceof Error ? error.message : String(error)}`,\n });\n }\n } else if (process.versions.bun !== undefined) {\n options.onEvent({\n type: \"pty-unavailable\",\n message:\n \"Bun 版本缺少 Bun.Terminal(需要 Bun ≥ 1.2.19),预览以非交互模式运行。\",\n });\n } else {\n const ptyModule = await loadPtyModule();\n if (ptyModule !== undefined) {\n try {\n return startPtyRun(options, ptyModule);\n } catch (error) {\n options.onEvent({\n type: \"spawn-error\",\n message: `pty spawn failed: ${error instanceof Error ? error.message : String(error)}`,\n });\n }\n } else {\n options.onEvent({\n type: \"pty-unavailable\",\n message:\n \"node-pty 不可用,预览以非交互模式运行(无法向命令输入内容)。可安装 @lydell/node-pty 启用交互。\",\n });\n }\n }\n }\n return startPipeRun(options);\n};\n\nconst startPtyRun = (options: CommandRunOptions, ptyModule: PtyModule): CommandRun => {\n const [command, ...args] = options.tokens;\n if (command === undefined) {\n return emptyRun(options, \"command is empty\");\n }\n const size = options.terminalSize ?? DEFAULT_TERMINAL_SIZE;\n const ring: string[] = [];\n const ringLimit = options.ringLimit ?? 200;\n const onEvent = options.onEvent;\n const append = (chunk: string): void => {\n ring.push(chunk);\n if (ring.length > ringLimit) {\n ring.splice(0, ring.length - ringLimit);\n }\n };\n\n const ptyProcess = ptyModule.spawn(command, args, {\n name: \"xterm-256color\",\n cols: size.cols,\n rows: size.rows,\n cwd: options.cwd ?? globalThis.process.cwd(),\n env: {\n ...globalThis.process.env,\n ...options.env,\n TERM: \"xterm-256color\",\n } as Record<string, string>,\n });\n onEvent({ type: \"pty-ready\" });\n\n const exited = new Promise<{ code: number | null; spawnError?: string }>((resolve) => {\n ptyProcess.onExit(({ exitCode }) => {\n onEvent({ type: \"exit\", code: exitCode });\n resolve({ code: exitCode });\n });\n });\n ptyProcess.onData((data) => {\n if (data.length === 0) {\n return;\n }\n append(data);\n onEvent({ type: \"stdout\", chunk: data });\n });\n\n let killPromise: Promise<void> | undefined;\n return {\n pid: ptyProcess.pid,\n pty: true,\n exited,\n output: ring,\n write(data) {\n ptyProcess.write(data);\n },\n resize({ cols, rows }) {\n try {\n ptyProcess.resize(cols, rows);\n } catch {\n // A dead PTY cannot be resized; teardown owns the rest.\n }\n },\n kill: () => {\n killPromise ??= (async () => {\n try {\n ptyProcess.kill();\n } catch {\n // Best-effort teardown: a dead process is the goal state.\n }\n // D5: PTY kill only signals the direct child. Sweep the PPid tree\n // (bounded grace → SIGKILL) so preview stop never leaks a server that\n // keeps holding the service port the generated app will need.\n await sweepDescendants(ptyProcess.pid, \"SIGTERM\").catch(() => undefined);\n const exitedInGrace = await Promise.race([\n exited.then(() => true),\n new Promise<boolean>((resolve) => {\n setTimeout(() => resolve(false), 3000);\n }),\n ]);\n if (!exitedInGrace) {\n try {\n ptyProcess.kill();\n } catch {\n // already dead\n }\n await sweepDescendants(ptyProcess.pid, \"SIGKILL\").catch(() => undefined);\n }\n })();\n return killPromise;\n },\n };\n};\n\nconst startPipeRun = (options: CommandRunOptions): CommandRun => {\n const [command, ...args] = options.tokens;\n if (command === undefined) {\n return emptyRun(options, \"command is empty\");\n }\n\n const ring: string[] = [];\n const ringLimit = options.ringLimit ?? 200;\n const onEvent = options.onEvent;\n const append = (chunk: string): void => {\n ring.push(chunk);\n if (ring.length > ringLimit) {\n ring.splice(0, ring.length - ringLimit);\n }\n };\n\n const useShell = process.platform === \"win32\" && needsShell(options.tokens);\n let child: ChildProcess;\n try {\n child = spawn(command, args, {\n cwd: options.cwd,\n env: options.env ?? process.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n shell: useShell,\n windowsHide: true,\n detached: process.platform !== \"win32\",\n });\n } catch (error) {\n return emptyRun(\n options,\n error instanceof Error ? error.message : String(error),\n { code: null, spawnError: error instanceof Error ? error.message : String(error) },\n );\n }\n\n const exited = new Promise<{ code: number | null; spawnError?: string }>((resolve) => {\n child.once(\"error\", (error: Error) => {\n onEvent({ type: \"spawn-error\", message: error.message });\n resolve({ code: null, spawnError: error.message });\n });\n child.once(\"exit\", (code) => {\n onEvent({ type: \"exit\", code });\n resolve({ code });\n });\n });\n\n const pipe = (stream: NodeJS.ReadableStream | null, type: \"stdout\" | \"stderr\"): void => {\n if (stream === null) {\n return;\n }\n // Pipe fallback: standard one-shot UTF-8 text decode (the degraded path);\n // the renderer still owns all rendering.\n stream.on(\"data\", (chunk: Buffer | string) => {\n const text = Buffer.from(chunk).toString(\"utf8\");\n append(text);\n onEvent({ type, chunk: text });\n });\n };\n pipe(child.stdout, \"stdout\");\n pipe(child.stderr, \"stderr\");\n\n let killPromise: Promise<void> | undefined;\n return {\n pid: child.pid,\n pty: false,\n exited,\n output: ring,\n write() {\n // Pipe mode has no stdin; the WebUI shows the pty-unavailable notice.\n },\n resize() {\n // Nothing to resize without a PTY.\n },\n kill: () => {\n killPromise ??= killProcessTree(child);\n return killPromise;\n },\n };\n};\n\nconst emptyRun = (\n options: CommandRunOptions,\n message: string,\n resolved?: { code: number | null; spawnError?: string },\n): CommandRun => {\n options.onEvent({ type: \"spawn-error\", message });\n return {\n pid: undefined,\n pty: false,\n exited: Promise.resolve(resolved ?? { code: null, spawnError: message }),\n output: [],\n write() {},\n resize() {},\n kill: async () => {},\n };\n};\n\n/** Kill a command run and every descendant it spawned. */\nexport const killProcessTree = async (child: ChildProcess): Promise<void> => {\n const pid = child.pid;\n if (pid === undefined) {\n return;\n }\n try {\n if (process.platform === \"win32\") {\n // taskkill /T walks the PPid tree natively. One bounded retry covers\n // transient ACCESS_DENIED during the child's own teardown (tree-kill\n // has no retry at all).\n let ok = false;\n for (let attempt = 0; attempt < 2 && !ok; attempt += 1) {\n try {\n await runExecFile(\"taskkill\", [\"/PID\", String(pid), \"/T\", \"/F\"]);\n ok = true;\n } catch (error) {\n if (attempt === 1) {\n throw error;\n }\n await new Promise((resolve) => {\n setTimeout(resolve, 200);\n });\n }\n }\n } else {\n // POSIX: signal the whole group (spawned detached) so children that\n // ignored the direct signal still terminate.\n try {\n process.kill(-pid, \"SIGTERM\");\n } catch {\n child.kill(\"SIGTERM\");\n }\n // Group signals miss descendants that escaped the group (setsid) —\n // sweep the PPid tree and signal stragglers individually (the\n // enumeration primitive tree-kill uses, applied AFTER the group\n // signal so the common path stays one syscall).\n await sweepDescendants(pid, \"SIGTERM\");\n await waitForExit(child, 3_000).then((exited) => {\n if (!exited) {\n try {\n process.kill(-pid, \"SIGKILL\");\n } catch {\n child.kill(\"SIGKILL\");\n }\n void sweepDescendants(pid, \"SIGKILL\");\n }\n });\n }\n } catch {\n // Best-effort teardown: a dead process is the goal state.\n }\n if (child.exitCode === null && child.signalCode === null) {\n child.kill(\"SIGKILL\");\n }\n};\n\n/**\n * Signal every living descendant of `pid` (PPid BFS via pgrep -P), skipping\n * processes that already exited. Best-effort: ESRCH races are expected while\n * the tree is tearing down.\n */\nconst sweepDescendants = async (pid: number, signal: NodeJS.Signals): Promise<void> => {\n const frontier = [pid];\n const seen = new Set<number>([pid]);\n while (frontier.length > 0) {\n const current = frontier.shift();\n if (current === undefined) {\n break;\n }\n const stdout = await runExecFileCapture(\"pgrep\", [\"-P\", String(current)]).then(\n (result) => result.stdout,\n ).catch(() => \"\");\n for (const line of stdout.split(\"\\n\")) {\n const childPid = Number.parseInt(line.trim(), 10);\n if (Number.isInteger(childPid) && childPid > 0 && !seen.has(childPid)) {\n seen.add(childPid);\n frontier.push(childPid);\n try {\n process.kill(childPid, signal);\n } catch {\n // raced with exit — the goal state is already reached\n }\n }\n }\n }\n};\n\nconst waitForExit = (child: ChildProcess, timeoutMs: number): Promise<boolean> =>\n new Promise((resolve) => {\n if (child.exitCode !== null || child.signalCode !== null) {\n resolve(true);\n return;\n }\n const timer = setTimeout(() => resolve(false), timeoutMs);\n child.once(\"exit\", () => {\n clearTimeout(timer);\n resolve(true);\n });\n });\n\nconst runExecFile = (command: string, args: readonly string[]): Promise<void> =>\n runExecFileCapture(command, args).then(() => undefined);\n\nconst runExecFileCapture = (command: string, args: readonly string[]): Promise<{ stdout: string }> =>\n new Promise((resolve, reject) => {\n execFile(command, [...args], { timeout: 5_000, windowsHide: true }, (error, stdout) => {\n if (error !== null) {\n reject(error);\n return;\n }\n resolve({ stdout: String(stdout) });\n });\n });\n","// Orthogonal intents (2026-08-16, updated 2026-08-19; owner round-9 demands:\n// startup terminal PTY streaming, shell window, tray icon wiring, multi-port\n// monitor with (detached) title marking; 2026-08-19 decisions D1–D6 in\n// openspec/changes/create-no-first-launch-force-terminal/plans/plan.md made\n// the PTY unconditional, removed the blocking service-port gate, made service\n// discovery an unbounded adaptive monitor, and turned the terminal window\n// into the abnormal-exit surface):\n// 1. Render the generated app entry from the frozen config as one real TS\n// template literal (compile-checked here; no string surgery at build time).\n// 2. The command ALWAYS runs through a PTY (preview-parity TTY environment);\n// a failed PTY load degrades to pipes and logs the degradation.\n// 3. Service windows are driven exclusively by the continuous adaptive port\n// monitor — one window per HTTP-verified port, no startup gate, no\n// deadline; polling cost is bounded by cadence (≈1s active, ≤5s quiet or\n// under load), never by a time limit.\n// 4. Terminal window: `showTerminal` controls initial visibility only; an\n// abnormal command exit (non-zero/signal code, or exit before any verified\n// service) force-reveals it with the retained output replay.\n// 5. Command teardown sweeps the whole process tree (group signal + PPid\n// walk, SIGTERM → bounded grace → SIGKILL).\n// 6. Any startup failure persists its stack to app.log before exit(1).\nimport type { ScaffoldAppConfig } from \"./scaffold\";\n\n/** The generated app entry: supervises the command, owns tray + window. */\nexport const createEntrySource = (config: ScaffoldAppConfig): string => {\n if (config.command === undefined) {\n throw new Error(\"command entry template requires a command source\");\n }\n return `#!/usr/bin/env node\n// Generated by create-opentray. Supervises the recorded command and hosts it\n// in an OpenTray tray + appMode window. Quit lives in the tray menu.\nimport { spawn, execFile, spawnSync } from \"node:child_process\";\nimport { appendFile, mkdir, readFile } from \"node:fs/promises\";\nimport http from \"node:http\";\nimport { cpus, loadavg } from \"node:os\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { createTray } from \"opentray\";\nimport { WebviewExt } from \"@opentray/ext-webview\";\n\nconst PROJECT_DIR = dirname(fileURLToPath(import.meta.url));\n\n// App Launch Law: persist the ABSOLUTE JS runtime. Under a Bun-hosted\n// wizard, execPath is bun — resolve node's real path once at startup\n// instead of persisting a bare PATH lookup (launchd's PATH is minimal).\nconst nodeRuntime = () => {\n if (process.versions.bun === undefined) return process.execPath;\n try {\n const found = spawnSync(\"which\", [\"node\"], { encoding: \"utf8\" }).stdout?.trim() ?? \"\";\n if (found.length > 0) return found;\n } catch { /* fall through */ }\n return \"node\";\n};\n\nconst config = ${JSON.stringify(config, null, 2)};\n\nconst appLogPath = resolve(PROJECT_DIR, \"app.log\");\nawait mkdir(dirname(appLogPath), { recursive: true });\nconst logSink = appendFile.bind(undefined, appLogPath);\nconst sleep = (ms) => new Promise((resolvePromise) => setTimeout(resolvePromise, ms));\n\nconst shellOptions = ${JSON.stringify(config.shell ?? null)};\nconst showTerminal = shellOptions !== null && shellOptions.showTerminal === true;\nconst showAddressBar = shellOptions !== null && shellOptions.showAddressBar === true;\n\n// Configured env overlay (advanced command options); empty by default.\nconst commandEnv = ${JSON.stringify(config.command.env ?? {})};\n\nconst httpAnswers = (port) => new Promise((resolvePromise) => {\n const request = http.get({ host: \"127.0.0.1\", port, path: \"/\", timeout: 1500 }, (response) => {\n response.resume();\n resolvePromise(response.statusCode !== undefined && response.statusCode > 0);\n });\n request.once(\"timeout\", () => { request.destroy(); resolvePromise(false); });\n request.once(\"error\", () => resolvePromise(false));\n});\n\nconst listProcessTreePids = async (rootPid) => {\n if (process.platform === \"win32\") return [rootPid];\n const pids = new Set([rootPid]);\n const frontier = [rootPid];\n while (frontier.length > 0) {\n const pid = frontier.pop();\n const children = await new Promise((resolvePromise) => {\n execFile(\"pgrep\", [\"-P\", String(pid)], (error, stdout) => {\n resolvePromise(error ? [] : stdout.split(\"\\\\n\").map((line) => Number(line)).filter((n) => Number.isInteger(n) && n > 0));\n });\n });\n for (const child of children) {\n if (!pids.has(child)) { pids.add(child); frontier.push(child); }\n }\n }\n return [...pids];\n};\n\nconst listOwnedListeningPorts = async (rootPid) => {\n if (process.platform === \"win32\") return [];\n const mine = new Set((await listProcessTreePids(rootPid)).map((pid) => String(pid)));\n const output = await new Promise((resolvePromise) => {\n execFile(\"lsof\", [\"-F\", \"pPn\", \"-nP\", \"-i\", \"TCP\", \"-sTCP:LISTEN\"], (error, stdout) => {\n resolvePromise(error ? \"\" : stdout);\n });\n });\n const ports = new Set();\n let currentPid = \"\";\n for (const line of output.split(\"\\\\n\")) {\n if (line.length === 0) continue;\n const tag = line[0];\n const value = line.slice(1);\n if (tag === \"p\") currentPid = value;\n else if (tag === \"n\" && currentPid !== \"\" && mine.has(currentPid)) {\n const port = Number(value.split(\":\").pop());\n if (Number.isInteger(port) && port > 0) ports.add(port);\n }\n }\n return [...ports];\n};\n\nconst main = async () => {\n let appIcon;\n try {\n const manifest = JSON.parse(await readFile(resolve(PROJECT_DIR, \"app-icon\", \"app-icon.json\"), \"utf8\"));\n // The manifest stores project-relative source paths; OpenTray validates file\n // sources against the caller's cwd, so canonicalize them to absolute paths\n // before dispatch (a reused broker cwd must never reinterpret App identity).\n appIcon = manifest.appIcon.map((asset) => (\n asset.source?.type === \"file\" && !asset.source.path.startsWith(\"/\")\n ? { ...asset, source: { ...asset.source, path: resolve(PROJECT_DIR, \"app-icon\", asset.source.path) } }\n : asset\n ));\n } catch {\n appIcon = undefined;\n }\n\n // Shell host (D2): unconditional — the terminal window is every app's\n // abnormal-exit surface, and the address bar consumes it too.\n const shellApi = await import(\"./app-shell-server.mjs\");\n const shellPort = await shellApi.listenShell();\n\n // Command supervision state shared by the exit note and teardown.\n let commandExited = false;\n let sawVerifiedService = false;\n\n // D4: the command ALWAYS runs through a PTY — the same TTY environment the\n // wizard preview used. A failed native-PTY load degrades to pipes.\n let ptyModule;\n try {\n ptyModule = await import(\"@lydell/node-pty\");\n } catch {\n ptyModule = null;\n }\n const cwd = resolve(PROJECT_DIR, config.command.cwd);\n let command;\n if (ptyModule !== null) {\n const pty = ptyModule.spawn(config.command.command, [...config.command.args], {\n name: \"xterm-256color\",\n cols: 100,\n rows: 30,\n cwd,\n env: { ...process.env, ...commandEnv, TERM: \"xterm-256color\" },\n });\n shellApi.registerPty(pty);\n pty.onData((chunk) => {\n void logSink(chunk, \"utf8\");\n shellApi.pushOutput(chunk);\n });\n const exited = new Promise((resolvePromise) => {\n pty.onExit(({ exitCode, signal }) => resolvePromise({ code: exitCode, signal }));\n });\n command = {\n pid: pty.pid,\n exited,\n killDirect: () => { try { pty.kill(); } catch { /* already dead */ } },\n };\n } else {\n await logSink(\"[create-opentray] @lydell/node-pty unavailable; command degraded to pipes (no TTY)\\\\n\", \"utf8\");\n const child = spawn(config.command.command, [...config.command.args], {\n cwd,\n // stdin stays an unwritten pipe: interactive commands must not see EOF.\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n env: { ...process.env, ...commandEnv },\n windowsHide: true,\n detached: process.platform !== \"win32\", // own process group → group teardown\n });\n child.stdout.setEncoding(\"utf8\");\n child.stderr.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk) => { void logSink(chunk, \"utf8\"); shellApi.pushOutput(chunk); });\n child.stderr.on(\"data\", (chunk) => { void logSink(chunk, \"utf8\"); shellApi.pushOutput(chunk); });\n const exited = new Promise((resolvePromise) => {\n child.once(\"exit\", (code, signal) => resolvePromise({ code, signal }));\n });\n command = {\n pid: child.pid,\n exited,\n killDirect: () => { try { child.kill(\"SIGTERM\"); } catch { /* already dead */ } },\n };\n }\n\n const trayIcon = ${JSON.stringify(config.trayIcon ?? null)};\n const trayIconCandidates = trayIcon === null\n ? {}\n : trayIcon.template && process.platform === \"darwin\"\n ? { \"darwin-icon-only\": { type: \"file\", path: resolve(PROJECT_DIR, trayIcon.path), isTemplate: true } }\n : { \"icon-only\": { type: \"file\", path: resolve(PROJECT_DIR, trayIcon.path) } };\n\n const tray = await createTray({\n id: config.appId,\n tooltip: { title: config.appName, description: \\`\\${config.appName} (OpenTray)\\` },\n icon: Object.keys(trayIconCandidates).length > 0\n ? trayIconCandidates\n : { \"text-only\": \"${config.appName.replace(/['\"\\\\]/gu, \"\").slice(0, 2) || \"A\"}\" },\n menu: { items: [\n { type: \"item\", id: 1, title: \\`Show \\${config.appName}\\`, primaryEvent: true },\n { type: \"separator\" },\n { type: \"item\", id: 2, title: \"Quit\" },\n ] },\n }, {\n appId: config.appId,\n appName: config.appName,\n ...(appIcon === undefined ? {} : { appIcon }),\n appLaunch: {\n // The generated entry embeds a native PTY (@lydell/node-pty), which\n // requires a Node host — cold launches must not inherit a Bun execPath.\n command: nodeRuntime(),\n args: [resolve(PROJECT_DIR, \"main.mjs\")],\n cwd: PROJECT_DIR,\n },\n });\n\n const baseTitle = config.appName;\n // v1 developerMode maps ONLY to per-window DevTools admission. When false it\n // must not request devtools at all — default windows are not inspectable.\n const devtools = config.developerMode === true ? { devtools: true } : {};\n\n // Dedicated windows: one terminal window (always available; initially\n // visible only under showTerminal), one window per listened port — an\n // address-bar wrapper page when enabled, the direct service URL otherwise.\n // Each window gets its OWN extension mount (tray.extend per window): one\n // mount owns exactly one native webview slot, so dedicated windows never\n // collide on content.\n const serviceWindows = new Map();\n let terminalWindow = null;\n\n const ensureTerminalWindow = async () => {\n if (terminalWindow !== null || shellPort === null) return terminalWindow;\n terminalWindow = tray.extend(WebviewExt).createWebviewWindow({\n url: \\`http://127.0.0.1:\\${shellPort}/terminal.html\\`,\n width: 900,\n height: 560,\n title: \\`\\${baseTitle} — Terminal\\`,\n style: { appMode: true, autoHide: false, keepOnTop: false },\n ...devtools,\n });\n await terminalWindow.show().catch(() => {});\n return terminalWindow;\n };\n\n // D2: abnormal exit force-reveals the terminal window regardless of the\n // showTerminal config. The shell host's output ring replays the full\n // history to a window opened here for the first time.\n const revealTerminalWindow = async () => {\n if (terminalWindow === null) {\n await ensureTerminalWindow();\n return;\n }\n await terminalWindow.toVisible().catch(() => {});\n await terminalWindow.focus().catch(() => {});\n };\n\n const ensureServiceWindow = async (port) => {\n if (serviceWindows.has(port)) return;\n const direct = \\`http://127.0.0.1:\\${port}\\`;\n const url = showAddressBar && shellPort !== null\n ? \\`http://127.0.0.1:\\${shellPort}/browse.html?url=\\${encodeURIComponent(direct)}\\`\n : direct;\n const win = tray.extend(WebviewExt).createWebviewWindow({\n url,\n width: config.window.width,\n height: config.window.height,\n title: baseTitle,\n style: { appMode: true, autoHide: false, keepOnTop: false },\n ...devtools,\n ...(showAddressBar || !titleFollows ? {} : { titleSync: { documentToWindow: true } }),\n ...(showAddressBar || !iconFollows ? {} : { iconSync: { faviconToWindow: true } }),\n });\n serviceWindows.set(port, { win, detached: false });\n await win.show().catch(() => {});\n };\n\n // D13 sync defaults (address-bar-less service windows): the title follows\n // the document one-way; runtime favicon following is opt-in only.\n const titleFollows = config.window.titleFollowsDocument !== false;\n const iconFollows = config.window.iconFollowsDocument === true;\n\n if (showTerminal) {\n await ensureTerminalWindow();\n }\n\n // D5: teardown sweeps the WHOLE process tree. POSIX pipe fallbacks run in\n // an owned process group (detached spawn) so the group signal reaches\n // children that ignored the direct one; setsid escapees fall to the PPid\n // walk. Escalation: SIGTERM (direct + group + tree) → 3s grace → SIGKILL.\n const killCommand = async () => {\n if (process.platform === \"win32\") {\n await new Promise((resolvePromise) => {\n execFile(\"taskkill\", [\"/PID\", String(command.pid), \"/T\", \"/F\"], () => resolvePromise());\n });\n return;\n }\n const tree = await listProcessTreePids(command.pid).catch(() => [command.pid]);\n if (!commandExited) command.killDirect();\n try { process.kill(-command.pid, \"SIGTERM\"); } catch { /* group gone */ }\n for (const pid of tree) { try { process.kill(pid, \"SIGTERM\"); } catch { /* raced exit */ } }\n if (!commandExited) await Promise.race([command.exited, sleep(3000)]);\n const survivors = [];\n for (const pid of tree) {\n try { process.kill(pid, 0); survivors.push(pid); } catch { /* dead */ }\n }\n if (survivors.length > 0 || !commandExited) {\n try { process.kill(-command.pid, \"SIGKILL\"); } catch { /* group gone */ }\n for (const pid of survivors) { try { process.kill(pid, \"SIGKILL\"); } catch { /* raced exit */ } }\n }\n await Promise.race([command.exited, sleep(1000)]);\n };\n\n // Abnormal-exit detection (D2): non-zero/signal code, or exit before ANY\n // verified service. The note enters app.log AND the shell output ring so a\n // force-revealed terminal window shows why it appeared.\n void command.exited.then(async ({ code, signal }) => {\n commandExited = true;\n // @lydell/node-pty reports signal 0 (not undefined) on normal exits.\n const hadSignal = signal !== undefined && signal !== null && signal !== 0;\n const detail = hadSignal ? \\`signal \\${signal}\\` : \\`code \\${code}\\`;\n const abnormal = code !== 0 || hadSignal || !sawVerifiedService;\n const why = abnormal ? (code === 0 && !hadSignal ? \" before any service appeared\" : \"\") : \"\";\n const note = \\`[create-opentray] command exited (\\${detail})\\${why}\\${abnormal ? \" — revealing terminal\" : \"\"}\\\\n\\`;\n await logSink(note, \"utf8\");\n shellApi.pushOutput(note);\n if (abnormal) await revealTerminalWindow();\n });\n\n {\n // D3: unbounded adaptive service monitor. Polling cost law: ≈1s while\n // anything changes, backing off to ≤5s when quiet or when 1-min load\n // exceeds the core count — 0.2–1Hz, never a hidden high-frequency loop,\n // never a deadline. Ports come EXCLUSIVELY from owned-tree sniffing plus\n // HTTP verification (dynamic ports behave like fixed ones).\n const FAST_INTERVAL_MS = 1000;\n const SLOW_INTERVAL_MS = 5000;\n const QUIET_TICKS_BEFORE_BACKOFF = 8;\n const cpuCount = cpus().length;\n const seenPorts = new Set();\n const verifiedPorts = new Set();\n let lastSignature = \"\";\n let quietTicks = 0;\n let stopped = false;\n const nextIntervalMs = () => {\n const loadBusy = (loadavg()[0] ?? 0) > cpuCount;\n return quietTicks >= QUIET_TICKS_BEFORE_BACKOFF || loadBusy ? SLOW_INTERVAL_MS : FAST_INTERVAL_MS;\n };\n const monitorTick = async () => {\n const owned = await listOwnedListeningPorts(command.pid).catch(() => []);\n const listening = owned.filter((port) => port > 0);\n for (const port of listening) {\n if (!verifiedPorts.has(port) && (await httpAnswers(port))) {\n verifiedPorts.add(port);\n }\n }\n if (verifiedPorts.size > 0) sawVerifiedService = true;\n for (const port of verifiedPorts) seenPorts.add(port);\n const services = [...seenPorts].map((port) => ({\n port,\n detached: !listening.includes(port),\n }));\n shellApi.setServices(services);\n for (const service of services) {\n if (!service.detached) await ensureServiceWindow(service.port);\n const entry = serviceWindows.get(service.port);\n if (entry !== undefined && Boolean(entry.detached) !== Boolean(service.detached)) {\n entry.detached = Boolean(service.detached);\n const title = service.detached ? \\`\\${baseTitle} (detached)\\` : baseTitle;\n await entry.win.setTitle(title).catch(() => {});\n }\n }\n const signature = JSON.stringify([services, listening]);\n const changed = signature !== lastSignature;\n lastSignature = signature;\n return changed;\n };\n const runMonitor = async () => {\n while (!stopped) {\n let changed = false;\n try {\n changed = await monitorTick();\n } catch {\n /* monitor tick */\n }\n quietTicks = changed ? 0 : quietTicks + 1;\n await sleep(nextIntervalMs());\n }\n };\n void runMonitor();\n process.once(\"exit\", () => { stopped = true; });\n }\n\n const quit = async () => {\n for (const { win } of serviceWindows.values()) {\n try { await win.destroy(); } catch {}\n }\n serviceWindows.clear();\n if (terminalWindow !== null) {\n try { await terminalWindow.destroy(); } catch {}\n }\n await tray.destroy();\n await killCommand();\n process.exit(0);\n };\n\n tray.onMenuClick(({ itemId }) => {\n if (itemId === 1) {\n const target = terminalWindow !== null\n ? terminalWindow\n : serviceWindows.size > 0\n ? [...serviceWindows.values()][0].win\n : null;\n if (target === null) return;\n void target.isVisible().then(async (visible) => {\n if (visible) { await target.close(); } else { await target.toVisible(); }\n }).catch(() => {});\n return;\n }\n if (itemId === 2) void quit();\n });\n\n process.on(\"SIGINT\", () => void quit());\n process.on(\"SIGTERM\", () => void quit());\n};\n\n// D6: no startup failure is silent — the stack lands in app.log (the entry's\n// only durable surface when the tray itself never came up) before exit(1).\nmain().catch(async (error) => {\n try {\n await logSink(\\`[create-opentray] startup failed: \\${error instanceof Error ? error.stack ?? error.message : String(error)}\\\\n\\`, \"utf8\");\n } catch { /* app.log unwritable; stderr below is the remaining surface */ }\n console.error(error);\n process.exit(1);\n});\n`;\n};\n","// Orthogonal intents (2026-09-09, openspec change add-create-url-apps; original\n// user request: create-opentray packages a URL directly as an application;\n// acceptance round 3 adds toolbar mode, tray reload, and durable sync\n// defaults D11–D13):\n// 1. Render the URL app entry from the frozen config as one real TS template\n// literal (compile-checked here; no string surgery at build time).\n// 2. Direct mode: one application-mode WebView window targets the frozen URL;\n// title follows the document one-way by default, icon following is opt-in\n// (D13). No PTY, no port monitor: a URL application supervises nothing.\n// 3. Toolbar mode (D12): the shell host serves the shared address-bar wrapper\n// and the window loads browse.html?url=<target> — still no PTY dependency.\n// Neither sync option is set: the wrapper document's metadata is not the\n// target page's (same law as command-mode address-bar windows).\n// 4. Tray menu offers Reload (D11): the page reloads through the WebView\n// evaluate channel without restarting the app.\n// 5. Quit destroys the window and tray session and exits; there is no child\n// process tree to sweep (D9).\n// 6. Any startup failure persists its stack to app.log before exit(1).\nimport type { ScaffoldAppConfig } from \"./scaffold\";\n\n/** The generated URL app entry: owns tray + one direct or wrapped window. */\nexport const createUrlEntrySource = (config: ScaffoldAppConfig): string => {\n if (config.url === undefined) {\n throw new Error(\"URL entry template requires a url source\");\n }\n return `#!/usr/bin/env node\n// Generated by create-opentray. Hosts the recorded URL in an OpenTray tray +\n// appMode window. Quit lives in the tray menu.\nimport { spawnSync } from \"node:child_process\";\nimport { appendFile, mkdir, readFile } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { createTray } from \"opentray\";\nimport { WebviewExt } from \"@opentray/ext-webview\";\n\nconst PROJECT_DIR = dirname(fileURLToPath(import.meta.url));\n\n// App Launch Law: persist the ABSOLUTE JS runtime. Under a Bun-hosted\n// wizard, execPath is bun — resolve node's real path once at startup\n// instead of persisting a bare PATH lookup (launchd's PATH is minimal).\nconst nodeRuntime = () => {\n if (process.versions.bun === undefined) return process.execPath;\n try {\n const found = spawnSync(\"which\", [\"node\"], { encoding: \"utf8\" }).stdout?.trim() ?? \"\";\n if (found.length > 0) return found;\n } catch { /* fall through */ }\n return \"node\";\n};\n\nconst config = ${JSON.stringify(config, null, 2)};\nconst toolbarMode = config.window.toolbar === true;\nconst titleFollows = config.window.titleFollowsDocument !== false;\nconst iconFollows = config.window.iconFollowsDocument === true;\n\nconst appLogPath = resolve(PROJECT_DIR, \"app.log\");\nawait mkdir(dirname(appLogPath), { recursive: true });\nconst logSink = appendFile.bind(undefined, appLogPath);\n\nconst main = async () => {\n let appIcon;\n try {\n const manifest = JSON.parse(await readFile(resolve(PROJECT_DIR, \"app-icon\", \"app-icon.json\"), \"utf8\"));\n // The manifest stores project-relative source paths; OpenTray validates file\n // sources against the caller's cwd, so canonicalize them to absolute paths\n // before dispatch (a reused broker cwd must never reinterpret App identity).\n appIcon = manifest.appIcon.map((asset) => (\n asset.source?.type === \"file\" && !asset.source.path.startsWith(\"/\")\n ? { ...asset, source: { ...asset.source, path: resolve(PROJECT_DIR, \"app-icon\", asset.source.path) } }\n : asset\n ));\n } catch {\n appIcon = undefined;\n }\n\n const trayIcon = ${JSON.stringify(config.trayIcon ?? null)};\n const trayIconCandidates = trayIcon === null\n ? {}\n : trayIcon.template && process.platform === \"darwin\"\n ? { \"darwin-icon-only\": { type: \"file\", path: resolve(PROJECT_DIR, trayIcon.path), isTemplate: true } }\n : { \"icon-only\": { type: \"file\", path: resolve(PROJECT_DIR, trayIcon.path) } };\n\n const tray = await createTray({\n id: config.appId,\n tooltip: { title: config.appName, description: \\`\\${config.appName} (OpenTray)\\` },\n icon: Object.keys(trayIconCandidates).length > 0\n ? trayIconCandidates\n : { \"text-only\": \"${config.appName.replace(/['\"\\\\]/gu, \"\").slice(0, 2) || \"A\"}\" },\n menu: { items: [\n { type: \"item\", id: 1, title: \\`Show \\${config.appName}\\`, primaryEvent: true },\n { type: \"item\", id: 3, title: \"Reload\" },\n { type: \"separator\" },\n { type: \"item\", id: 2, title: \"Quit\" },\n ] },\n }, {\n appId: config.appId,\n appName: config.appName,\n ...(appIcon === undefined ? {} : { appIcon }),\n appLaunch: {\n command: nodeRuntime(),\n args: [resolve(PROJECT_DIR, \"main.mjs\")],\n cwd: PROJECT_DIR,\n },\n });\n\n // v1 developerMode maps ONLY to per-window DevTools admission. When false it\n // must not request devtools at all — default windows are not inspectable.\n const devtools = config.developerMode === true ? { devtools: true } : {};\n\n // Toolbar mode (D12): the shell host serves the shared address-bar wrapper;\n // no PTY is registered because a URL app supervises nothing. The wrapper\n // carries neither sync option — its document metadata is not the target's.\n let shellPort = null;\n if (toolbarMode) {\n const shellApi = await import(\"./app-shell-server.mjs\");\n shellPort = await shellApi.listenShell();\n if (shellPort === null) {\n await logSink(\"[create-opentray] toolbar shell host failed to listen; falling back to the direct window\\\\n\", \"utf8\");\n }\n }\n const toolbarUrl = toolbarMode && shellPort !== null\n ? \\`http://127.0.0.1:\\${shellPort}/browse.html?url=\\${encodeURIComponent(config.url)}\\`\n : null;\n\n const window = tray.extend(WebviewExt).createWebviewWindow({\n url: toolbarUrl ?? config.url,\n width: config.window.width,\n height: config.window.height,\n title: config.appName,\n style: { appMode: true, autoHide: false, keepOnTop: false },\n ...devtools,\n // D13 sync defaults project only onto the DIRECT window (toolbar windows\n // set neither: one-way title following; icon following is opt-in).\n ...(toolbarUrl === null\n ? {\n ...(titleFollows ? { titleSync: { documentToWindow: true } } : {}),\n ...(iconFollows ? { iconSync: { faviconToWindow: true } } : {}),\n }\n : {}),\n });\n await window.show().catch(() => {});\n\n // Tray reload (D11): reload the page in place through the evaluate channel.\n const reload = async () => {\n try {\n await window.evaluate(\"location.reload()\");\n } catch { /* window gone */ }\n };\n\n const quit = async () => {\n try { await window.destroy(); } catch {}\n await tray.destroy();\n process.exit(0);\n };\n\n tray.onMenuClick(({ itemId }) => {\n if (itemId === 1) {\n void window.isVisible().then(async (visible) => {\n if (visible) { await window.close(); } else { await window.toVisible(); }\n }).catch(() => {});\n return;\n }\n if (itemId === 3) { void reload(); return; }\n if (itemId === 2) void quit();\n });\n\n process.on(\"SIGINT\", () => void quit());\n process.on(\"SIGTERM\", () => void quit());\n};\n\n// No startup failure is silent — the stack lands in app.log (the entry's only\n// durable surface when the tray itself never came up) before exit(1).\nmain().catch(async (error) => {\n try {\n await logSink(\\`[create-opentray] startup failed: \\${error instanceof Error ? error.stack ?? error.message : String(error)}\\\\n\\`, \"utf8\");\n } catch { /* app.log unwritable; stderr below is the remaining surface */ }\n console.error(error);\n process.exit(1);\n});\n\n`;\n};\n","// Orthogonal intents (2026-08-16; owner round-9 demand: the generated app may\n// embed the SAME terminal/iframe tab experience the wizard has):\n// 1. Render the generated app's shell-server entry source from a frozen config.\n// 2. Serve prebuilt shell UI statically + SSE state (command, PTY ring, ports).\n// 3. Accept terminal input routed to the PTY registered by main.mjs.\n// 4. Report owned-port lifecycles so the shell can auto-open tabs and mark\n// detached services; main.mjs owns detection and calls setServices.\n// Kept physically separate from scaffold.ts: the template's nested JS template\n// literals are hostile to inline embedding.\n\n/** The generated app's local shell host: static UI + PTY stream + port state. */\nexport const shellServerSource = (options: {\n readonly commandDisplay: string;\n}): string => `#!/usr/bin/env node\n// Generated by create-opentray. Local shell host: static UI + PTY stream + port state.\nimport { createServer } from \"node:http\";\nimport { readFile } from \"node:fs/promises\";\nimport { extname, join, normalize, resolve, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { dirname } from \"node:path\";\n\nconst PROJECT_DIR = dirname(fileURLToPath(import.meta.url));\nconst SHELL_DIR = resolve(PROJECT_DIR, \"app-shell\");\n\n// --- state shared with the shell UI ---\nconst state = {\n command: ${JSON.stringify(options.commandDisplay)},\n interactive: false, // main.mjs flips this when a PTY is attached\n output: [], // ring of PTY chunks\n services: [], // [{ port, detached }]\n listeners: new Set(), // SSE response streams\n};\nconst RING_LIMIT = 2000;\n\nconst emit = (event) => {\n const frame = \\`data: \\${JSON.stringify(event)}\\n\\n\\`;\n for (const res of state.listeners) {\n try {\n res.write(frame);\n } catch {\n /* dropped client */\n }\n }\n};\n\nconst snapshot = () => ({\n type: \"state\",\n command: state.command,\n interactive: state.interactive,\n services: state.services,\n output: state.output.slice(-400),\n});\n\n/** main.mjs registers the live PTY handle here. */\nexport const registerPty = (pty) => {\n state.pty = pty;\n state.interactive = pty !== null && pty !== undefined;\n};\n\n/** main.mjs forwards PTY output chunks here. */\nexport const pushOutput = (chunk) => {\n state.output.push(chunk);\n if (state.output.length > RING_LIMIT) {\n state.output.splice(0, state.output.length - RING_LIMIT);\n }\n emit({ type: \"log\", chunk });\n};\n\n/** main.mjs reports the owned-port snapshot; detached flags drive title marks. */\nexport const setServices = (services) => {\n const changed =\n services.length !== state.services.length ||\n services.some(\n (s, i) =>\n state.services[i] === undefined ||\n s.port !== state.services[i].port ||\n Boolean(s.detached) !== Boolean(state.services[i].detached),\n );\n state.services = services;\n if (changed) {\n emit({ type: \"services\", services });\n }\n};\n\nconst CT = {\n \".html\": \"text/html; charset=utf-8\",\n \".js\": \"text/javascript; charset=utf-8\",\n \".css\": \"text/css; charset=utf-8\",\n \".svg\": \"image/svg+xml\",\n \".png\": \"image/png\",\n \".wasm\": \"application/wasm\",\n \".json\": \"application/json\",\n};\n\nconst server = createServer(async (req, res) => {\n const url = new URL(req.url ?? \"/\", \"http://127.0.0.1\");\n if (url.pathname === \"/api/events\") {\n res.writeHead(200, {\n \"content-type\": \"text/event-stream\",\n \"cache-control\": \"no-store\",\n connection: \"keep-alive\",\n });\n res.write(\\`data: \\${JSON.stringify(snapshot())}\\n\\n\\`);\n state.listeners.add(res);\n req.on(\"close\", () => {\n state.listeners.delete(res);\n });\n return;\n }\n if (url.pathname === \"/api/terminal-input\" && req.method === \"POST\") {\n let body = \"\";\n for await (const chunk of req) {\n body += chunk;\n }\n try {\n const { data } = JSON.parse(body);\n if (state.pty !== null && state.pty !== undefined && typeof data === \"string\") {\n state.pty.write(data);\n }\n } catch {\n /* malformed body */\n }\n res.writeHead(200, { \"content-type\": \"application/json\" }).end('{\"ok\":true}');\n return;\n }\n // Static shell files with traversal containment; SPA fallback for routes.\n const relative = normalize(url.pathname).replace(/\\\\/(\\\\.\\\\.\\\\/?)*/, \"\");\n const target = resolve(\n SHELL_DIR,\n relative === \"\" || relative === \"/\" ? \"index.html\" : relative,\n );\n if (target !== SHELL_DIR && !target.startsWith(SHELL_DIR + sep)) {\n res.writeHead(404).end();\n return;\n }\n const bytes = await readFile(target).catch(() => undefined);\n if (bytes === undefined) {\n const index = await readFile(join(SHELL_DIR, \"index.html\")).catch(() => undefined);\n if (index === undefined) {\n res.writeHead(404).end();\n return;\n }\n res\n .writeHead(200, { \"content-type\": CT[\".html\"], \"cache-control\": \"no-store\" })\n .end(index);\n return;\n }\n res\n .writeHead(200, {\n \"content-type\": CT[extname(target).toLowerCase()] ?? \"application/octet-stream\",\n \"cache-control\": \"no-store\",\n })\n .end(bytes);\n});\n\n/** Start listening on an ephemeral loopback port; resolves the port. */\nexport const listenShell = () =>\n new Promise((resolvePort) => {\n server.listen(0, \"127.0.0.1\", () => {\n resolvePort(server.address().port);\n });\n });\n`;\n","// Orthogonal intents (maintained 2026-08-19; original user request: create a\n// locally hosted app from the frozen wizard form; 2026-08-19 the terminal\n// window became a first-class abnormal-exit surface in EVERY generated app —\n// decisions D2/D4 in\n// openspec/changes/create-no-first-launch-force-terminal/plans/plan.md):\n// 1. Write a self-contained consumer project that depends only on published packages.\n// 2. Persist the frozen identity, command vector, and service port as app config.\n// 3. Generate an entry that supervises the command and owns tray+window lifetime.\n// 4. Unconditionally scaffold the shell host (terminal window + address bar UI)\n// and the native PTY dependency — `shell` options only tune initial visibility.\n\nimport { access, cp, mkdir, writeFile } from \"node:fs/promises\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport type { LaunchVector } from \"./launch-vector\";\nimport { createEntrySource } from \"./entry-template\";\nimport { createUrlEntrySource } from \"./url-entry-template\";\nimport { shellServerSource } from \"./shell-server-template\";\n\nexport { createEntrySource };\nexport { createUrlEntrySource };\nimport { toProjectDirectoryName } from \"./app-id\";\n\nexport interface ScaffoldAppConfig {\n readonly schemaVersion: 1;\n readonly appId: string;\n readonly appName: string;\n /** Command source; exactly one of command/url is present (v1 XOR). */\n readonly command?: LaunchVector;\n /** URL source: the address the generated window opens directly. */\n readonly url?: string;\n readonly service: { readonly port: number };\n readonly window: {\n readonly width: number;\n readonly height: number;\n /** URL applications: host the address-bar wrapper (D12). */\n readonly toolbar?: boolean;\n readonly titleFollowsDocument: boolean;\n readonly iconFollowsDocument: boolean;\n };\n /** Tray icon asset (written by materialize); omitted → text-only tray. */\n readonly trayIcon?: { readonly path: string; readonly template: boolean };\n /** Generated-app shell (startup terminal / address-bar tabs). */\n readonly shell?: {\n readonly showTerminal: boolean;\n readonly showAddressBar: boolean;\n };\n /** v1 developerMode: only WebView DevTools admission; default false. */\n readonly developerMode?: boolean;\n}\n\nexport interface ScaffoldOptions {\n readonly config: ScaffoldAppConfig;\n readonly targetDir: string;\n /** opentray/@opentray/ext-webview version range written into package.json. */\n readonly dependencyRange: string;\n /** Whether install will be skipped; only affects README guidance text. */\n readonly skipInstall?: boolean;\n /** Directory holding the prebuilt shell UI (copied to app-shell/).\n * Defaults to the adapter-staged assets resolved from the running package\n * layout (published create-opentray/dist/shell, or the workspace build). */\n readonly shellAssetsDir?: string;\n}\n\nexport interface ScaffoldResult {\n readonly projectDir: string;\n readonly entryPath: string;\n readonly configPath: string;\n readonly appIconDir: string;\n readonly writtenFiles: readonly string[];\n}\n\n/** Filenames that identify a directory as a create-opentray project. */\nexport const SCAFFOLD_MARKER_FILES = [\n \"opentray.app.json\",\n \"main.mjs\",\n] as const;\n\nexport const writeScaffold = async (options: ScaffoldOptions): Promise<ScaffoldResult> => {\n const projectDir = resolve(options.targetDir);\n const isUrlApp = options.config.url !== undefined;\n // D12: a URL app hosts shell assets ONLY in toolbar mode; command apps\n // always do (terminal = abnormal-exit surface).\n const hostShell = !isUrlApp || options.config.window.toolbar === true;\n await mkdir(join(projectDir, \"app-icon\"), { recursive: true });\n\n const writtenFiles: string[] = [];\n const write = async (relative: string, content: string): Promise<void> => {\n const path = join(projectDir, relative);\n await mkdir(join(path, \"..\"), { recursive: true });\n await writeFile(path, content, \"utf8\");\n writtenFiles.push(relative);\n };\n\n await write(\"package.json\", createPackageJson(options));\n await write(\"opentray.app.json\", `${JSON.stringify(options.config, null, 2)}\\n`);\n await write(\"main.mjs\", isUrlApp ? createUrlEntrySource(options.config) : createEntrySource(options.config));\n if (hostShell) {\n await write(\"app-shell-server.mjs\", createShellServerSource(options.config));\n const shellAssetsDir = options.shellAssetsDir ?? (await resolveBundledShellAssetsDir());\n if (shellAssetsDir !== undefined) {\n await cp(shellAssetsDir, join(projectDir, \"app-shell\"), { recursive: true });\n writtenFiles.push(\"app-shell/\");\n }\n }\n await write(\"README.md\", createReadme(options));\n await write(\".gitignore\", [\"node_modules/\\n\", \"app.log\\n\", \"dist/\\n\"].join(\"\"));\n\n return {\n projectDir,\n entryPath: join(projectDir, \"main.mjs\"),\n configPath: join(projectDir, \"opentray.app.json\"),\n appIconDir: join(projectDir, \"app-icon\"),\n writtenFiles,\n };\n};\n\n/**\n * Locate the adapter-staged shell UI (terminal.html/browse.html + assets).\n * Layouts, in order:\n * - published create-opentray: `dist/shell` beside the package root (resolved\n * through the package self-reference; core is bundled into that dist);\n * - source checkout: `<create root>/dist/shell` (built) or the create-webui\n * vite output one workspace up.\n * Undefined means \"no staged assets found\" — the entry still runs; only the\n * optional terminal/address-bar pages would 404.\n */\nconst resolveBundledShellAssetsDir = async (): Promise<string | undefined> => {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = new Set<string>([\n join(moduleDir, \"shell\"),\n join(moduleDir, \"..\", \"dist\", \"shell\"),\n join(moduleDir, \"..\", \"..\", \"..\", \"dist\", \"shell\"),\n join(moduleDir, \"..\", \"..\", \"..\", \"create-webui\", \"dist\"),\n ]);\n try {\n const require = createRequire(import.meta.url);\n const createPkg = require.resolve(\"create-opentray/package.json\");\n candidates.add(join(dirname(createPkg), \"dist\", \"shell\"));\n } catch {\n // create-opentray is not resolvable from here (dev layouts rely on the\n // relative candidates above).\n }\n for (const candidate of candidates) {\n if (await access(join(candidate, \"index.html\")).then(() => true, () => false)) {\n return candidate;\n }\n }\n return undefined;\n};\n\nconst createPackageJson = (options: ScaffoldOptions): string => {\n const dependencies: Record<string, string> = {\n opentray: options.dependencyRange,\n \"@opentray/ext-webview\": options.dependencyRange,\n };\n if (options.config.url === undefined) {\n // D4: the command ALWAYS runs through a PTY (preview-parity TTY\n // environment); the optional startup-terminal window is only one consumer.\n // URL apps supervise nothing — no PTY dependency (D3 of add-create-url-apps).\n dependencies[\"@lydell/node-pty\"] = \"^1.1.0\";\n }\n return `${JSON.stringify(\n {\n name: toProjectDirectoryName(options.config.appId),\n version: \"0.1.0\",\n private: true,\n type: \"module\",\n description: `${options.config.appName} — OpenTray-hosted app generated by create-opentray`,\n scripts: {\n start: \"node main.mjs\",\n },\n dependencies,\n },\n null,\n 2,\n )}\\n`;\n};\n\nconst createReadme = (options: ScaffoldOptions): string => {\n if (options.config.url !== undefined) {\n return `# ${options.config.appName}\n\nGenerated by \\`create-opentray\\`. This app hosts the recorded URL in an\nOpenTray tray + application window and can be pinned to the taskbar\n(Windows) or Dock (macOS).\n\n## Run\n\n${options.skipInstall === true ? \"Install dependencies first, then:\" : \"\"}\n\\`\\`\\`bash\nnpm run start\n\\`\\`\\`\n\n- Address: ${options.config.url}\n- Logs: \\`app.log\\`\n\n## Files\n\n- \\`opentray.app.json\\` — frozen identity and address\n- \\`app-icon/\\` — generated platform icon catalog (ICNS/ICO/PNG)\n- \\`main.mjs\\` — app entry: owns the tray session and the direct window\n`;\n }\n return `# ${options.config.appName}\n\nGenerated by \\`create-opentray\\`. This app supervises the recorded start\ncommand, hosts it in an OpenTray tray + application window, and can be pinned\nto the taskbar (Windows) or Dock (macOS).\n\n## Run\n\n${options.skipInstall === true ? \"Install dependencies first, then:\" : \"\"}\n\\`\\`\\`bash\nnpm run start\n\\`\\`\\`\n\n- Service: ${options.config.service.port > 0 ? `http://127.0.0.1:${options.config.service.port} (preview hint; re-sniffed at runtime)` : \"sniffed at runtime from the command's owned listening ports\"}\n- Command: \\`${options.config.command?.command ?? \"\"} ${options.config.command?.args.join(\" \") ?? \"\"}\\`\n- Logs: \\`app.log\\`\n\n## Files\n\n- \\`opentray.app.json\\` — frozen identity and launch vector\n- \\`app-icon/\\` — generated platform icon catalog (ICNS/ICO/PNG)\n- \\`main.mjs\\` — app entry: supervises the command and owns the tray session\n`;\n};\n\n/** Shell server entry source: static UI + PTY stream + port state (round 9). */\nexport const createShellServerSource = (config: ScaffoldAppConfig): string =>\n shellServerSource({\n commandDisplay: `${config.command?.command ?? \"\"} ${config.command?.args.join(\" \") ?? \"\"}`.trim(),\n });\n","// Orthogonal intents (maintained 2026-08-19; original user requests: after the\n// frozen dialog confirms generation, run a pending pipeline with live logs and\n// end in a success state that can open the app; 2026-08-19 the wizard panel's\n// own command preview already validates commands, so generation must NOT\n// re-run the command — decision D1 in\n// openspec/changes/create-no-first-launch-force-terminal/plans/plan.md):\n// 1. Guard the target directory before writing anything.\n// 2. Generate the strict AppIcon catalog through the sanctioned vite-plugin generator.\n// 3. Install dependencies. Install completion IS generation success; the\n// command's first real run happens when the user opens the app.\n\nimport { spawn } from \"node:child_process\";\nimport { mkdir, readFile, readdir, rm, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\n\nimport {\n composeAppIcon,\n containImage,\n decodeImageFile,\n encodeImagePng,\n generateOpenTrayAppIcon,\n} from \"@opentray/icon\";\nimport type { IconBackground } from \"@opentray/icon\";\nimport {\n resolveDefaultDarwinAppBundlePath,\n sanitizeAppBundleName,\n} from \"@opentray/packaging\";\n\nimport { generateDefaultAppIcon } from \"@opentray/icon\";\n\nconst errorMessage = (error: unknown): string =>\n error instanceof Error ? error.message : String(error);\nimport { toProjectDirectoryName } from \"./app-id\";\nimport { writeScaffold, type ScaffoldAppConfig, type ScaffoldResult } from \"./scaffold\";\n\nexport type MaterializeLogEvent =\n | { readonly type: \"step\"; readonly step: string; readonly message: string }\n | { readonly type: \"log\"; readonly message: string };\n\nexport interface MaterializeInput {\n readonly config: ScaffoldAppConfig;\n readonly targetDir: string;\n readonly dependencyRange: string;\n readonly iconSourcePath: string | undefined;\n /** True when the tray source is a solid silhouette (darwin template). */\n readonly trayIconIsSolid?: boolean;\n /** Icon composition (owner round-12): background + foreground scale. */\n readonly iconBackground?: IconBackground;\n readonly iconScale?: number;\n /** Nearest-neighbor sampling for pixel-art sources (v1 imageSmoothingEnabled). */\n readonly imageSmoothingEnabled?: boolean;\n /** Tray icon source; defaults to the app icon source when omitted. */\n readonly trayIconSourcePath?: string;\n /** Generated-app shell options (startup terminal / address bar). */\n readonly shell?: { showTerminal: boolean; showAddressBar: boolean };\n /** Adapter-owned prebuilt shell UI directory (copied to app-shell/). */\n readonly shellAssetsDir?: string;\n readonly packageManager: \"npm\" | \"pnpm\" | \"bun\";\n readonly skipInstall: boolean;\n readonly force: boolean;\n}\n\nexport interface MaterializeResult {\n readonly scaffold: ScaffoldResult;\n readonly projectDir: string;\n}\n\nexport interface MaterializeContext {\n readonly log: (event: MaterializeLogEvent) => void;\n readonly generateIcon?: typeof generateOpenTrayAppIcon;\n /** Same seam for the glyph default catalog (wizard tests stub both). */\n readonly generateDefaultIcon?: typeof generateDefaultAppIcon;\n readonly runInstall?: (options: RunInstallOptions) => Promise<void>;\n}\n\nexport interface RunInstallOptions {\n readonly projectDir: string;\n readonly packageManager: \"npm\" | \"pnpm\" | \"bun\";\n readonly log: (message: string) => void;\n}\n\n/** True when the directory exists and contains anything beyond ignorable files. */\nexport const isDirectoryOccupied = async (dir: string): Promise<boolean> => {\n let entries: readonly string[];\n try {\n entries = await readdir(dir);\n } catch {\n return false;\n }\n const ignorable = new Set([\".DS_Store\", \"Thumbs.db\"]);\n return entries.some((entry) => !ignorable.has(entry));\n};\n\n/** Detect package manager from lockfiles then npm_config_user_agent. */\nexport const detectPackageManager = (\n files: readonly string[],\n userAgent: string | undefined,\n): \"npm\" | \"pnpm\" | \"bun\" => {\n if (files.includes(\"pnpm-lock.yaml\")) return \"pnpm\";\n if (files.includes(\"bun.lockb\") || files.includes(\"bun.lock\")) return \"bun\";\n if (files.includes(\"package-lock.json\")) return \"npm\";\n const agent = (userAgent ?? \"\").toLowerCase();\n if (agent.includes(\"pnpm\")) return \"pnpm\";\n if (agent.includes(\"bun\")) return \"bun\";\n return \"npm\";\n};\n\n/** Expected stable Darwin bundle path for the generated project's identity. */\nexport const expectedDarwinBundlePath = (config: {\n appName: string;\n appId: string;\n}): string =>\n resolveDefaultDarwinAppBundlePath({\n homeDir: homedir(),\n packageName: toProjectDirectoryName(config.appId),\n appName: sanitizeAppBundleName(config.appName),\n });\n\nexport interface PayloadPhaseResult {\n readonly scaffold: ScaffoldResult;\n readonly projectDir: string;\n}\n\n/**\n * Payload phase: guard → tray icon → composed app icon → scaffold → icon\n * catalog → dependency install. This is the WHOLE pipeline: install completion\n * is generation success. Core apply swaps the payload into place\n * transactionally; the command's first real run belongs to the user's first\n * open of the generated app.\n */\nexport const materializePayload = async (\n input: MaterializeInput,\n context: MaterializeContext,\n): Promise<PayloadPhaseResult> => {\n const step = (name: string, message: string): void =>\n context.log({ type: \"step\", step: name, message });\n\n const targetDir = resolve(input.targetDir);\n const smoothing = input.imageSmoothingEnabled !== false; // v1 default: true\n step(\"scaffold\", `checking target directory ${targetDir}`);\n if (await isDirectoryOccupied(targetDir)) {\n if (input.force !== true) {\n throw new Error(\n `target directory is not empty: ${targetDir} (pass --force or choose another directory)`,\n );\n }\n // Force is a TRUE overwrite: the generated project is fully wizard-owned\n // and regenerable, so clear the stale tree instead of layering over it.\n step(\"scaffold\", \"force: clearing existing target directory\");\n await rm(targetDir, { recursive: true, force: true });\n }\n\n // Tray icon FIRST (owner law: the tray defaults to the app icon): the PNG\n // is written into the target's app-icon dir (created here) so the value is\n // part of the config the entry template renders with — main.mjs previously\n // baked a stale null because the config was amended only AFTER scaffolding.\n const appIconDir = join(targetDir, \"app-icon\");\n await mkdir(appIconDir, { recursive: true });\n const traySource = input.trayIconSourcePath ?? input.iconSourcePath;\n let trayIconConfig: { path: string; template: boolean } | undefined;\n if (traySource !== undefined) {\n const trayPath = join(appIconDir, \"tray-icon.png\");\n try {\n const source = await decodeImageFile(traySource);\n // Transparent letterbox containment: the tray source keeps its own\n // shape on the 128px canvas instead of gaining opaque padding.\n const tray = await containImage(\n source,\n 128,\n 128,\n // v1 imageSmoothingEnabled=false keeps pixel-art edges discrete on\n // the tray projection too, not just the app-icon foreground.\n smoothing ? \"lanczos3\" : \"nearest\",\n );\n await writeFile(trayPath, await encodeImagePng(tray));\n // Solid-silhouette sources are single-color art: darwin templates let\n // macOS tint them for light/dark menu bars.\n const template = input.trayIconIsSolid === true;\n trayIconConfig = { path: \"app-icon/tray-icon.png\", template };\n context.log({\n type: \"log\",\n message: `tray icon: app-icon/tray-icon.png${template ? \" (template)\" : \"\"}${smoothing ? \"\" : \" (nearest-neighbor)\"}`,\n });\n } catch (error) {\n context.log({\n type: \"log\",\n message: `tray icon unavailable (${errorMessage(error)}); falling back to text tray`,\n });\n }\n }\n\n // Owner round-12: compose the app icon (foreground over the chosen\n // background) BEFORE the catalog so ICNS encodes from the best-practice\n // 824-in-1024 variant while Windows/Linux use the full 1024 composite.\n let composedIcon:\n | { compositePath: string; macOSPath: string; background: IconBackground }\n | undefined;\n if (input.iconSourcePath !== undefined) {\n try {\n composedIcon = await composeAppIcon({\n foregroundPath: input.iconSourcePath,\n background: input.iconBackground ?? \"transparent\",\n scale: input.iconScale ?? 0.8,\n imageSmoothingEnabled: smoothing,\n outputDir: join(targetDir, \"app-icon\"),\n });\n context.log({\n type: \"log\",\n message: `composed app icon (${composedIcon.background} background, macOS 824 / windows 1024${smoothing ? \"\" : \", nearest-neighbor\"})`,\n });\n } catch (error) {\n context.log({\n type: \"log\",\n message: `icon composition unavailable (${errorMessage(error)}); using source directly`,\n });\n }\n }\n\n step(\"scaffold\", \"writing project files\");\n const shell = input.shell;\n const scaffold = await writeScaffold({\n config: {\n ...input.config,\n ...(shell === undefined ? {} : { shell }),\n ...(trayIconConfig === undefined ? {} : { trayIcon: trayIconConfig }),\n },\n targetDir,\n dependencyRange: input.dependencyRange,\n skipInstall: input.skipInstall,\n ...(input.shellAssetsDir === undefined ? {} : { shellAssetsDir: input.shellAssetsDir }),\n });\n context.log({ type: \"log\", message: `wrote ${scaffold.writtenFiles.join(\", \")}` });\n\n step(\"icon\", \"generating platform icon catalog\");\n // Glyph defaults share ONE generator with the runtime's omitted-appIcon\n // materialization (the accent-squircle standard). The brand re-tiling path\n // is only for real source art; a glyph drawn through it would render a\n // second, smaller tile — a divergent default standard.\n const generateDefault = context.generateDefaultIcon ?? generateDefaultAppIcon;\n const glyphCatalogIntoScaffold = async () => {\n const generated = await generateDefault({\n appName: input.config.appName,\n outputDir: scaffold.appIconDir,\n fileStem: \"app-icon\",\n cachePath: join(scaffold.appIconDir, \".cache.json\"),\n });\n return { ...generated, linuxPngOutputPaths: generated.linuxPngPaths };\n };\n const generate = context.generateIcon ?? generateOpenTrayAppIcon;\n const generateIntoScaffold = async (sourcePath: string) =>\n generate({\n sourcePath,\n // Composed art carries its own background + squircle mask: pass\n // through instead of glyph re-tiling, and give macOS its 824 variant.\n ...(composedIcon === undefined\n ? {}\n : {\n composed: true,\n macosSourcePath: composedIcon.macOSPath,\n }),\n icnsOutputPath: join(scaffold.appIconDir, \"app-icon.icns\"),\n icoOutputPath: join(scaffold.appIconDir, \"app-icon.ico\"),\n linuxOutputDirectory: join(scaffold.appIconDir, \"linux\"),\n manifestOutputPath: join(scaffold.appIconDir, \"app-icon.json\"),\n outputPath: join(scaffold.appIconDir, \"app-icon.png\"),\n cachePath: join(scaffold.appIconDir, \".cache.json\"),\n });\n\n const catalogSource =\n composedIcon !== undefined && composedIcon.compositePath !== undefined\n ? composedIcon.compositePath\n : input.iconSourcePath;\n let iconMetadata;\n if (catalogSource === undefined) {\n iconMetadata = await glyphCatalogIntoScaffold();\n } else {\n try {\n iconMetadata = await generateIntoScaffold(catalogSource);\n } catch (error) {\n // An undecodable or unencodable source degrades to the glyph default —\n // never to a failed materialization (asymmetric rethrow was flagged in\n // review).\n context.log({\n type: \"log\",\n message: `icon source unusable (${errorMessage(error)}); falling back to glyph icon`,\n });\n iconMetadata = await glyphCatalogIntoScaffold();\n }\n }\n context.log({\n type: \"log\",\n message: `icon assets: icns + ico + ${iconMetadata.linuxPngOutputPaths.length} linux pngs`,\n });\n\n if (!input.skipInstall) {\n step(\"install\", `installing dependencies with ${input.packageManager}`);\n const runInstall = context.runInstall ?? runPackageManagerInstall;\n await runInstall({\n projectDir: scaffold.projectDir,\n packageManager: input.packageManager,\n log: (message) => context.log({ type: \"log\", message }),\n });\n } else {\n step(\"install\", \"skipping dependency install (--skip-install)\");\n }\n\n return { scaffold, projectDir: scaffold.projectDir };\n};\n\n/**\n * Backward-compatible composition used by the wizard adapter: generation is\n * the payload phase. There is no first-launch validation — the wizard panel's\n * command preview is the validator (decision D1).\n */\nexport const materialize = async (\n input: MaterializeInput,\n context: MaterializeContext,\n): Promise<MaterializeResult> => materializePayload(input, context);\n\nexport const runPackageManagerInstall = async (options: RunInstallOptions): Promise<void> => {\n const commands: Record<\"npm\" | \"pnpm\" | \"bun\", { cmd: string; args: readonly string[] }> = {\n npm: { cmd: \"npm\", args: [\"install\", \"--no-fund\", \"--no-audit\"] },\n pnpm: { cmd: \"pnpm\", args: [\"install\"] },\n bun: { cmd: \"bun\", args: [\"install\"] },\n };\n const { cmd, args } = commands[options.packageManager];\n await new Promise<void>((resolvePromise, rejectPromise) => {\n const child = spawn(cmd, [...args], {\n cwd: options.projectDir,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n windowsHide: true,\n });\n child.stdout?.setEncoding(\"utf8\");\n child.stderr?.setEncoding(\"utf8\");\n child.stdout?.on(\"data\", (chunk: string) => {\n for (const line of chunk.split(\"\\n\").filter(Boolean)) {\n options.log(line);\n }\n });\n child.stderr?.on(\"data\", (chunk: string) => {\n for (const line of chunk.split(\"\\n\").filter(Boolean)) {\n options.log(line);\n }\n });\n child.once(\"error\", rejectPromise);\n child.once(\"exit\", (code) => {\n if (code === 0) {\n resolvePromise();\n return;\n }\n rejectPromise(new Error(`${cmd} ${args.join(\" \")} exited with ${code ?? \"signal\"}`));\n });\n });\n};\n","// Orthogonal intents (maintained 2026-08-19; original user request: the Success\n// dialog offers an open-app action and a taskbar/Dock pinning hint; 2026-08-19\n// generation no longer first-launches the app, so the first open must also be\n// able to cold-start through the entry — decision D1 in\n// openspec/changes/create-no-first-launch-force-terminal/plans/plan.md):\n// 1. Open the materialized app per platform: macOS via the stable .app bundle\n// when it exists, else a detached cold start of the generated entry.\n// 2. Launch the entry with a real Node runtime (a Bun-hosted wizard must not\n// persist its own execPath into the spawned app).\n// 3. Keep the hint platform-truthful: no Windows shortcut persistence claims\n// and no Dock-pin claim before the bundle exists.\n\nimport { spawn, spawnSync } from \"node:child_process\";\nimport { stat } from \"node:fs/promises\";\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport { expectedDarwinBundlePath } from \"./materialize\";\n\nexport interface OpenAppInput {\n readonly projectDir: string;\n readonly bundlePath: string | undefined;\n readonly platform?: NodeJS.Platform | undefined;\n}\n\nexport interface OpenAppResult {\n readonly ok: boolean;\n readonly detail: string;\n}\n\n/** The generated entry embeds a native PTY: it needs Node, never a Bun host. */\nconst nodeExecutable = (): string => {\n if (process.versions.bun === undefined && process.execPath.includes(\"node\")) {\n return process.execPath;\n }\n try {\n const found = spawnSync(\"which\", [\"node\"], { encoding: \"utf8\" }).stdout?.trim() ?? \"\";\n if (found.length > 0) return found;\n } catch {\n /* fall through */\n }\n return \"node\";\n};\n\n/** Expected bundle path for a project's frozen opentray.app.json identity. */\nconst expectedBundleForProject = async (projectDir: string): Promise<string | undefined> => {\n try {\n const raw = JSON.parse(await readFile(join(projectDir, \"opentray.app.json\"), \"utf8\")) as {\n appId?: unknown;\n appName?: unknown;\n };\n if (typeof raw.appId !== \"string\" || typeof raw.appName !== \"string\") {\n return undefined;\n }\n return expectedDarwinBundlePath({ appId: raw.appId, appName: raw.appName });\n } catch {\n return undefined;\n }\n};\n\nconst spawnEntryCold = (projectDir: string): OpenAppResult => {\n const child = spawn(nodeExecutable(), [join(projectDir, \"main.mjs\")], {\n cwd: projectDir,\n stdio: \"ignore\",\n detached: true,\n windowsHide: true,\n });\n // A detached launcher must not surface async spawn errors on the wizard.\n child.once(\"error\", () => {});\n child.unref();\n if (child.pid === undefined) {\n return { ok: false, detail: `failed to spawn ${projectDir}/main.mjs` };\n }\n return { ok: true, detail: `launched app entry (pid ${child.pid})` };\n};\n\nexport const openMaterializedApp = async (input: OpenAppInput): Promise<OpenAppResult> => {\n const platform = input.platform ?? process.platform;\n if (platform === \"darwin\") {\n const bundlePath =\n input.bundlePath ?? (await expectedBundleForProject(input.projectDir));\n if (bundlePath === undefined) {\n // No identity to derive a bundle from: cold-start through the entry.\n return spawnEntryCold(input.projectDir);\n }\n try {\n await stat(bundlePath);\n } catch {\n // Never launched → no materialized bundle yet: the entry's first run\n // creates it, after which Dock pinning becomes available.\n return spawnEntryCold(input.projectDir);\n }\n const child = spawn(\"open\", [bundlePath], {\n stdio: \"ignore\",\n windowsHide: true,\n });\n const status = await new Promise<number | null>((resolve) => {\n child.once(\"error\", () => resolve(null));\n child.once(\"exit\", (code) => resolve(code));\n });\n if (status === 0) {\n return { ok: true, detail: `opened ${bundlePath}` };\n }\n return {\n ok: false,\n detail: `open ${bundlePath} failed with ${status ?? \"spawn error\"}`,\n };\n }\n return spawnEntryCold(input.projectDir);\n};\n\n/** Platform-truthful pinning hint; makes no persistence claim before first open. */\nexport const pinningHint = (platform: NodeJS.Platform = process.platform): string => {\n if (platform === \"darwin\") {\n return \"首次打开应用后,右键点击 Dock 中的应用图标,选择“选项 → 在程序坞中保留”,即可固定到 Dock。\";\n }\n if (platform === \"win32\") {\n return \"右键点击任务栏中的应用图标,选择“固定到任务栏”即可固定。(OpenTray 尚未生成开始菜单快捷方式)\";\n }\n return \"可将应用窗口固定到任务栏/收藏夹;Linux 桌面快捷方式生成尚未提供。\";\n};\n","// Typed result/error model for create-opentray Core (openspec change\n// unify-create-opentray-core). Core procedures return typed results instead\n// of throwing so CLI and WebUI adapters can map failures to stable exit\n// categories and rendered states without string matching.\n\nexport type CreateErrorCode =\n | \"invalid_config\"\n | \"incompatible_version\"\n | \"identity_mismatch\"\n | \"already_exists\"\n | \"not_found\"\n | \"not_empty\"\n | \"ownership_unverified\"\n | \"resource_invalid\"\n | \"resource_fetch_failed\"\n | \"path_escape\"\n | \"app_running\"\n | \"pid_reused\"\n | \"process_unverified\"\n | \"link_unsupported\"\n | \"registry_io\"\n | \"capability_unavailable\"\n | \"export_unsafe\"\n | \"env_ack_required\"\n | \"internal\";\n\nexport interface CreateError {\n readonly code: CreateErrorCode;\n readonly message: string;\n /** Stable machine-readable details (paths, keys); never environment values. */\n readonly details?: Readonly<Record<string, string | number | boolean>>;\n}\n\nexport type Result<T> = { readonly ok: true; readonly value: T } | {\n readonly ok: false;\n readonly error: CreateError;\n};\n\nexport const ok = <T>(value: T): Result<T> => ({ ok: true, value });\n\nexport const err = (\n code: CreateErrorCode,\n message: string,\n details?: Readonly<Record<string, string | number | boolean>>,\n): Result<never> => ({ ok: false, error: { code, message, ...(details === undefined ? {} : { details }) } });\n\nexport const isCreateError = (value: unknown): value is CreateError =>\n typeof value === \"object\" &&\n value !== null &&\n \"code\" in value &&\n \"message\" in value &&\n typeof (value as { code: unknown }).code === \"string\" &&\n typeof (value as { message: unknown }).message === \"string\";\n\n/** Wrap a throwing procedure into a typed internal result. */\nexport const attempt = async <T>(\n code: CreateErrorCode,\n run: () => Promise<T> | T,\n): Promise<Result<T>> => {\n try {\n return ok(await run());\n } catch (error) {\n if (isCreateError(error)) {\n return { ok: false, error };\n }\n return {\n ok: false,\n error: {\n code,\n message: error instanceof Error ? error.message : String(error),\n },\n };\n }\n};\n","var _a;\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","import { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const ratio = val / step;\n const roundedRatio = Math.round(ratio);\n // Use a relative epsilon scaled to the magnitude of the result\n const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1);\n if (Math.abs(ratio - roundedRatio) < tolerance)\n return 0;\n return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n // Skip the probe under `jitless`: strict CSPs report the caught `new Function`\n // as a `securitypolicyviolation` even though the throw is swallowed.\n if (globalConfig.jitless) {\n return false;\n }\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n if (o instanceof Map)\n return new Map(o);\n if (o instanceof Set)\n return new Set(o);\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n \"string\",\n \"number\",\n \"bigint\",\n \"boolean\",\n \"symbol\",\n \"undefined\",\n]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nexport function merge(a, b) {\n if (a._zod.def.checks?.length) {\n throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n }\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: b._zod.def.checks ?? [],\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined).\n// Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue === false) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const message = iss.message\n ? iss.message\n : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\");\n const { inst: _inst, continue: _continue, input: _input, ...rest } = iss;\n rest.path ?? (rest.path = []);\n rest.message = message;\n if (ctx?.reportInput) {\n rest.input = _input;\n }\n return rest;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error, path = []) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const cuid = /^[cC][0-9a-z]{6,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\nexport const httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = regexes.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export class Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n","export const version = {\n major: 4,\n minor: 4,\n patch: 3,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n if (util.explicitlyAborted(payload))\n continue;\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n util.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = safeParse(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // When normalize is off, require :// for http/https URLs\n // This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source) {\n if (!/^https?:\\/\\//i.test(trimmed)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid URL format\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n return;\n }\n }\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.nanoid);\n $ZodStringFormat.init(inst, def);\n});\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link $ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n // atob ignores whitespace, so reject it up front.\n if (/\\s/.test(data))\n return false;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64URL(data) {\n if (!regexes.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalIn, isOptionalOut) {\n const isPresent = key in input;\n if (result.issues.length) {\n // For optional-in/out schemas, ignore errors on absent keys.\n if (isOptionalIn && isOptionalOut && !isPresent) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (!isPresent && !isOptionalIn) {\n if (!result.issues.length) {\n final.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: undefined,\n path: [key],\n });\n }\n return;\n }\n if (result.value === undefined) {\n if (isPresent) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalIn = _catchall.optin === \"optional\";\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n // skip __proto__ so it can't replace the result prototype via the\n // assignment setter on the plain {} we build into\n if (key === \"__proto__\")\n continue;\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalIn = el._zod.optin === \"optional\";\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = util.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = util.esc(key);\n const schema = shape[key];\n const isOptionalIn = schema?._zod?.optin === \"optional\";\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalIn && isOptionalOut) {\n // For optional-in/out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else if (!isOptionalIn) {\n doc.write(`\n const ${id}_present = ${k} in input;\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n if (!${id}_present && !${id}.issues.length) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: undefined,\n path: [${k}]\n });\n }\n\n if (${id}_present) {\n if (${id}.value === undefined) {\n newResult[${k}] = undefined;\n } else {\n newResult[${k}] = ${id}.value;\n }\n }\n\n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n inst._zod.parse = (payload, ctx) => {\n if (first) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n inst._zod.parse = (payload, ctx) => {\n if (first) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = util.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n // Fall back to union matching when the fast discriminator path fails:\n // - explicitly enabled via unionFallback, or\n // - during backward direction (encode), since codec-based discriminators\n // have different values in forward vs backward directions\n if (def.unionFallback || ctx.direction === \"backward\") {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n options: Array.from(disc.value.keys()),\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (util.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const optinStart = getTupleOptStart(items, \"optin\");\n const optoutStart = getTupleOptStart(items, \"optout\");\n if (!def.rest) {\n if (input.length < optinStart) {\n payload.issues.push({\n code: \"too_small\",\n minimum: optinStart,\n inclusive: true,\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n if (input.length > items.length) {\n payload.issues.push({\n code: \"too_big\",\n maximum: items.length,\n inclusive: true,\n input,\n inst,\n origin: \"array\",\n });\n }\n }\n // Run every item in parallel, collecting results into an indexed\n // array. The post-processing in `handleTupleResults` walks them in\n // order so it can decide whether an absent optional-output error can\n // truncate the tail or must be reported to preserve required output.\n const itemResults = new Array(items.length);\n for (let i = 0; i < items.length; i++) {\n const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((rr) => {\n itemResults[i] = rr;\n }));\n }\n else {\n itemResults[i] = r;\n }\n }\n if (def.rest) {\n let i = items.length - 1;\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({ value: el, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((r) => handleTupleResult(r, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart));\n }\n return handleTupleResults(itemResults, payload, items, input, optoutStart);\n };\n});\nfunction getTupleOptStart(items, key) {\n for (let i = items.length - 1; i >= 0; i--) {\n if (items[i]._zod[key] !== \"optional\")\n return i + 1;\n }\n return 0;\n}\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nfunction handleTupleResults(itemResults, final, items, input, optoutStart) {\n // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional\n // rule, but only after `optoutStart`: the first index where the output\n // tuple tail can be absent.\n for (let i = 0; i < items.length; i++) {\n const r = itemResults[i];\n const isPresent = i < input.length;\n if (r.issues.length) {\n if (!isPresent && i >= optoutStart) {\n final.value.length = i;\n break;\n }\n final.issues.push(...util.prefixIssues(i, r.issues));\n }\n final.value[i] = r.value;\n }\n // Drop trailing slots that produced `undefined` for absent input\n // (the array analog of an absent optional key on an object). The\n // `i >= input.length` floor is critical: an explicit `undefined`\n // *inside* the input must be preserved even when the schema is\n // optional-out (e.g. `z.string().or(z.undefined())` accepting an\n // explicit undefined value).\n for (let i = final.value.length - 1; i >= input.length; i--) {\n if (items[i]._zod.optout === \"optional\" && final.value[i] === undefined) {\n final.value.length = i;\n }\n else {\n break;\n }\n }\n return final;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (keyResult.issues.length) {\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n continue;\n }\n const outKey = keyResult.value;\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n if (!Object.prototype.propertyIsEnumerable.call(input, key))\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => util.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n payload.fallback = true;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n payload.fallback = true;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (input === undefined && (result.issues.length || result.fallback)) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const input = payload.value;\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, input));\n return handleOptionalResult(result, input);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n payload.fallback = true;\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n payload.fallback = true;\n }\n return payload;\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues, fallback: left.fallback }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodPreprocess = /*@__PURE__*/ core.$constructor(\"$ZodPreprocess\", (inst, def) => {\n $ZodPipe.init(inst, def);\n});\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n util.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n util.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // Cache the resolved inner type on the shared `def` so all clones of this\n // lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance,\n // preserving identity for cycle detection on recursive schemas.\n util.defineLazy(inst._zod, \"innerType\", () => {\n const d = def;\n if (!d._cachedInner)\n d._cachedInner = def.getter();\n return d._cachedInner;\n });\n util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","var _a;\nexport const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class({\n type: \"string\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn, params) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n }, params);\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n ...util.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nexport function process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && \"_prefault\" in result.schema)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // The `id` in `.meta()` is a Zod-specific registration tag used to extract\n // schemas into $defs — it is not user-facing JSON Schema metadata. Strip it\n // from the output body where it would otherwise leak. The id is preserved\n // implicitly via the $defs key (and via $ref paths).\n const rootMetaId = ctx.metadataRegistry.get(schema)?.id;\n if (rootMetaId !== undefined && result.id === rootMetaId)\n delete result.id;\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n if (seen.def.id === seen.defId)\n delete seen.def.id;\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n if (_schema._zod.traits.has(\"$ZodCodec\"))\n return true;\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n","import { extractDefs, finalize, initializeContext, process, } from \"./to-json-schema.js\";\nimport { getEnumValues } from \"./util.js\";\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n // when both minimum and exclusiveMinimum exist, pick the more restrictive one\n const exMin = typeof exclusiveMinimum === \"number\" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);\n const exMax = typeof exclusiveMaximum === \"number\" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);\n const legacy = ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\";\n if (exMin) {\n if (legacy) {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n else if (typeof minimum === \"number\") {\n json.minimum = minimum;\n }\n if (exMax) {\n if (legacy) {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n else if (typeof maximum === \"number\") {\n json.maximum = maximum;\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nexport const symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nexport const voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nexport const functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nexport const transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nexport const mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nexport const setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = process(def.element, ctx, {\n ...params,\n path: [...params.path, \"items\"],\n });\n};\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = process(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = process(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = process(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = process(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => process(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? process(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = process(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = process(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const inIsTransform = def.in._zod.traits.has(\"$ZodTransform\");\n const innerType = ctx.io === \"input\" ? (inIsTransform ? def.out : def.in) : def.out;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n process(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n process(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n process(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n schemas[key] = finalize(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n process(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => core.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => core.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nexport const ZodError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\n// Lazy-bind builder methods.\n//\n// Builder methods (`.optional`, `.array`, `.refine`, ...) live as\n// non-enumerable getters on each concrete schema constructor's\n// prototype. On first access from an instance the getter allocates\n// `fn.bind(this)` and caches it as an own property on that instance,\n// so detached usage (`const m = schema.optional; m()`) still works\n// and the per-instance allocation only happens for methods actually\n// touched.\n//\n// One install per (prototype, group), memoized by `_installedGroups`.\nconst _installedGroups = /* @__PURE__ */ new WeakMap();\nfunction _installLazyMethods(inst, group, methods) {\n const proto = Object.getPrototypeOf(inst);\n let installed = _installedGroups.get(proto);\n if (!installed) {\n installed = new Set();\n _installedGroups.set(proto, installed);\n }\n if (installed.has(group))\n return;\n installed.add(group);\n for (const key in methods) {\n const fn = methods[key];\n Object.defineProperty(proto, key, {\n configurable: true,\n enumerable: false,\n get() {\n const bound = fn.bind(this);\n Object.defineProperty(this, key, {\n configurable: true,\n writable: true,\n enumerable: true,\n value: bound,\n });\n return bound;\n },\n set(v) {\n Object.defineProperty(this, key, {\n configurable: true,\n writable: true,\n enumerable: true,\n value: v,\n });\n },\n });\n }\n}\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n core.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: createStandardJSONSchemaMethod(inst, \"input\"),\n output: createStandardJSONSchemaMethod(inst, \"output\"),\n },\n });\n inst.toJSONSchema = createToJSONSchemaMethod(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // Parse-family is intentionally kept as per-instance closures: these are\n // the hot path AND the most-detached methods (`arr.map(schema.parse)`,\n // `const { parse } = schema`, etc.). Eager closures here mean callers pay\n // ~12 closure allocations per schema but get monomorphic call sites and\n // detached usage that \"just works\".\n inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n inst.encode = (data, params) => parse.encode(inst, data, params);\n inst.decode = (data, params) => parse.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n // All builder methods are placed on the internal prototype as lazy-bind\n // getters. On first access per-instance, a bound thunk is allocated and\n // cached as an own property; subsequent accesses skip the getter. This\n // means: no per-instance allocation for unused methods, full\n // detachability preserved (`const m = schema.optional; m()` works), and\n // shared underlying function references across all instances.\n _installLazyMethods(inst, \"ZodType\", {\n check(...chks) {\n const def = this.def;\n return this.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...chks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), { parent: true });\n },\n with(...chks) {\n return this.check(...chks);\n },\n clone(def, params) {\n return core.clone(this, def, params);\n },\n brand() {\n return this;\n },\n register(reg, meta) {\n reg.add(this, meta);\n return this;\n },\n refine(check, params) {\n return this.check(refine(check, params));\n },\n superRefine(refinement, params) {\n return this.check(superRefine(refinement, params));\n },\n overwrite(fn) {\n return this.check(checks.overwrite(fn));\n },\n optional() {\n return optional(this);\n },\n exactOptional() {\n return exactOptional(this);\n },\n nullable() {\n return nullable(this);\n },\n nullish() {\n return optional(nullable(this));\n },\n nonoptional(params) {\n return nonoptional(this, params);\n },\n array() {\n return array(this);\n },\n or(arg) {\n return union([this, arg]);\n },\n and(arg) {\n return intersection(this, arg);\n },\n transform(tx) {\n return pipe(this, transform(tx));\n },\n default(d) {\n return _default(this, d);\n },\n prefault(d) {\n return prefault(this, d);\n },\n catch(params) {\n return _catch(this, params);\n },\n pipe(target) {\n return pipe(this, target);\n },\n readonly() {\n return readonly(this);\n },\n describe(description) {\n const cl = this.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n },\n meta(...args) {\n // overloaded: meta() returns the registered metadata, meta(data)\n // returns a clone with `data` registered. The mapped type picks\n // up the second overload, so we accept variadic any-args and\n // return `any` to satisfy both at runtime.\n if (args.length === 0)\n return core.globalRegistry.get(this);\n const cl = this.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n },\n isOptional() {\n return this.safeParse(undefined).success;\n },\n isNullable() {\n return this.safeParse(null).success;\n },\n apply(fn) {\n return fn(this);\n },\n });\n Object.defineProperty(inst, \"description\", {\n get() {\n return core.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n _installLazyMethods(inst, \"_ZodString\", {\n regex(...args) {\n return this.check(checks.regex(...args));\n },\n includes(...args) {\n return this.check(checks.includes(...args));\n },\n startsWith(...args) {\n return this.check(checks.startsWith(...args));\n },\n endsWith(...args) {\n return this.check(checks.endsWith(...args));\n },\n min(...args) {\n return this.check(checks.minLength(...args));\n },\n max(...args) {\n return this.check(checks.maxLength(...args));\n },\n length(...args) {\n return this.check(checks.length(...args));\n },\n nonempty(...args) {\n return this.check(checks.minLength(1, ...args));\n },\n lowercase(params) {\n return this.check(checks.lowercase(params));\n },\n uppercase(params) {\n return this.check(checks.uppercase(params));\n },\n trim() {\n return this.check(checks.trim());\n },\n normalize(...args) {\n return this.check(checks.normalize(...args));\n },\n toLowerCase() {\n return this.check(checks.toLowerCase());\n },\n toUpperCase() {\n return this.check(checks.toUpperCase());\n },\n slugify() {\n return this.check(checks.slugify());\n },\n });\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(core._email(ZodEmail, params));\n inst.url = (params) => inst.check(core._url(ZodURL, params));\n inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(iso.datetime(params));\n inst.date = (params) => inst.check(iso.date(params));\n inst.time = (params) => inst.check(iso.time(params));\n inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: core.regexes.httpProtocol,\n hostname: core.regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\n/**\n * Validates a CUID v1 string.\n *\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n _installLazyMethods(inst, \"ZodNumber\", {\n gt(value, params) {\n return this.check(checks.gt(value, params));\n },\n gte(value, params) {\n return this.check(checks.gte(value, params));\n },\n min(value, params) {\n return this.check(checks.gte(value, params));\n },\n lt(value, params) {\n return this.check(checks.lt(value, params));\n },\n lte(value, params) {\n return this.check(checks.lte(value, params));\n },\n max(value, params) {\n return this.check(checks.lte(value, params));\n },\n int(params) {\n return this.check(int(params));\n },\n safe(params) {\n return this.check(int(params));\n },\n positive(params) {\n return this.check(checks.gt(0, params));\n },\n nonnegative(params) {\n return this.check(checks.gte(0, params));\n },\n negative(params) {\n return this.check(checks.lt(0, params));\n },\n nonpositive(params) {\n return this.check(checks.lte(0, params));\n },\n multipleOf(value, params) {\n return this.check(checks.multipleOf(value, params));\n },\n step(value, params) {\n return this.check(checks.multipleOf(value, params));\n },\n finite() {\n return this;\n },\n });\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.gt = (value, params) => inst.check(checks.gt(value, params));\n inst.gte = (value, params) => inst.check(checks.gte(value, params));\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.lt = (value, params) => inst.check(checks.lt(value, params));\n inst.lte = (value, params) => inst.check(checks.lte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n _installLazyMethods(inst, \"ZodArray\", {\n min(n, params) {\n return this.check(checks.minLength(n, params));\n },\n nonempty(params) {\n return this.check(checks.minLength(1, params));\n },\n max(n, params) {\n return this.check(checks.maxLength(n, params));\n },\n length(n, params) {\n return this.check(checks.length(n, params));\n },\n unwrap() {\n return this.element;\n },\n });\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n _installLazyMethods(inst, \"ZodObject\", {\n keyof() {\n return _enum(Object.keys(this._zod.def.shape));\n },\n catchall(catchall) {\n return this.clone({ ...this._zod.def, catchall: catchall });\n },\n passthrough() {\n return this.clone({ ...this._zod.def, catchall: unknown() });\n },\n loose() {\n return this.clone({ ...this._zod.def, catchall: unknown() });\n },\n strict() {\n return this.clone({ ...this._zod.def, catchall: never() });\n },\n strip() {\n return this.clone({ ...this._zod.def, catchall: undefined });\n },\n extend(incoming) {\n return util.extend(this, incoming);\n },\n safeExtend(incoming) {\n return util.safeExtend(this, incoming);\n },\n merge(other) {\n return util.merge(this, other);\n },\n pick(mask) {\n return util.pick(this, mask);\n },\n omit(mask) {\n return util.omit(this, mask);\n },\n partial(...args) {\n return util.partial(ZodOptional, this, args[0]);\n },\n required(...args) {\n return util.required(ZodNonOptional, this, args[0]);\n },\n });\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n // v3-compat: z.record(valueType, params?) — defaults keyType to z.string()\n if (!valueType || !valueType._zod) {\n return new ZodRecord({\n type: \"record\",\n keyType: string(),\n valueType: keyType,\n ...util.normalizeParams(valueType),\n });\n }\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n const k = core.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n payload.fallback = true;\n return payload;\n });\n }\n payload.value = output;\n payload.fallback = true;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport function invertCodec(codec) {\n const def = codec._zod.def;\n return new ZodCodec({\n type: \"pipe\",\n in: def.out,\n out: def.in,\n transform: def.reverseTransform,\n reverseTransform: def.transform,\n });\n}\nexport const ZodPreprocess = /*@__PURE__*/ core.$constructor(\"ZodPreprocess\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodPreprocess.init(inst, def);\n});\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn, params) {\n return core._superRefine(fn, params);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\nexport function preprocess(fn, schema) {\n return new ZodPreprocess({\n type: \"pipe\",\n in: transform(fn),\n out: schema,\n });\n}\n","// V1 configuration authority (openspec change unify-create-opentray-core).\n//\n// `create-opentray.json` is the SOLE editable desired-state authority. Every\n// generated file (entry, package manifest, icon catalogs, runtime\n// descriptors) is derived output and never a competing authority.\n\nimport { isAbsolute, join, normalize, sep } from \"node:path\";\n\nimport { z } from \"zod\";\n\nimport { isValidAppId } from \"./app-id\";\nimport { err, ok, type Result } from \"./errors\";\n\nexport const CONFIG_SCHEMA_VERSION = 1 as const;\nexport const CONFIG_FILENAME = \"create-opentray.json\";\n\nexport type PackageManagerName = \"npm\" | \"pnpm\" | \"bun\";\nexport type ImageFormat = \"png\" | \"jpeg\" | \"webp\" | \"gif\" | \"svg\";\nexport type IconBackgroundName = \"black\" | \"white\" | \"transparent\";\n\n/** Provenance of a committed registration resource. */\nexport interface ResourceSource {\n readonly kind: \"file\" | \"http\" | \"data\";\n /** Original path or URL as supplied by the caller (provenance only). */\n readonly ref: string;\n}\n\n/** Relative stable reference to a registration-owned resource file. */\nexport interface IconResourceRef {\n /** Path relative to the registration directory (e.g. \"app-icon.png\"). */\n readonly path: string;\n readonly format: ImageFormat;\n /** SHA-256 hex digest of the committed bytes. */\n readonly sha256: string;\n readonly source: ResourceSource;\n}\n\nexport interface IconsConfig {\n /** Application icon source; omitted → glyph fallback at apply time. */\n readonly appIcon?: IconResourceRef;\n /** Tray icon source; omission explicitly follows the app icon source. */\n readonly trayIcon?: IconResourceRef;\n /** v1 sampling intent; default true. Governs every Core resize path. */\n readonly imageSmoothingEnabled: boolean;\n readonly background: IconBackgroundName;\n readonly scale: number;\n /** Tray source is a solid silhouette (darwin template tinting). */\n readonly trayTemplate?: boolean;\n}\n\n/** Exact process vector — never an implicitly interpreted shell string. */\nexport interface CommandConfig {\n readonly executable: string;\n readonly args: readonly string[];\n /** Absolute working directory. */\n readonly cwd: string;\n /** Overlay merged over the runtime environment. */\n readonly env?: Readonly<Record<string, string>>;\n}\n\nexport interface WindowConfig {\n readonly width: number;\n readonly height: number;\n /** URL applications: host the address-bar wrapper page (D12). */\n readonly toolbar?: boolean;\n /** Window title follows document.title (document→window one-way); D13 default true. */\n readonly titleFollowsDocument: boolean;\n /** Runtime favicon→window-icon following; D13 default false (opt-in). */\n readonly iconFollowsDocument: boolean;\n}\n\nexport interface CreateConfigV1 {\n readonly schemaVersion: typeof CONFIG_SCHEMA_VERSION;\n readonly appId: string;\n readonly appName: string;\n /** Command source; exactly one of command/url is present (v1 XOR, D1). */\n readonly command?: CommandConfig;\n /** URL source: the http(s) address the generated window opens directly. */\n readonly url?: string;\n readonly packageManager: PackageManagerName;\n readonly icons: IconsConfig;\n readonly window: WindowConfig;\n /** Maps only to WebView `devtools` admission; default false. */\n readonly developerMode: boolean;\n}\n\n/** Discriminated application source of a parsed v1 document. */\nexport type AppSource =\n | { readonly kind: \"command\"; readonly command: CommandConfig }\n | { readonly kind: \"url\"; readonly url: string };\n\n/** Narrow a parsed v1 document to its single source (invariant: XOR held). */\nexport const appSourceOf = (config: CreateConfigV1): AppSource => {\n if (config.url !== undefined && config.command === undefined) {\n return { kind: \"url\", url: config.url };\n }\n if (config.command !== undefined && config.url === undefined) {\n return { kind: \"command\", command: config.command };\n }\n throw new Error(\n `invalid v1 configuration for ${config.appId}: exactly one of command/url must be present`,\n );\n};\n\nexport const DEFAULT_WINDOW: WindowConfig = {\n width: 1_200,\n height: 800,\n titleFollowsDocument: true,\n iconFollowsDocument: false,\n};\nexport const DEFAULT_ICON_SCALE = 0.8;\nexport const ICON_SCALE_MIN = 0.5;\nexport const ICON_SCALE_MAX = 0.95;\n\nconst IMAGE_FORMATS: readonly ImageFormat[] = [\"png\", \"jpeg\", \"webp\", \"gif\", \"svg\"];\nconst PACKAGE_MANAGERS: readonly PackageManagerName[] = [\"npm\", \"pnpm\", \"bun\"];\nconst BACKGROUNDS: readonly IconBackgroundName[] = [\"black\", \"white\", \"transparent\"];\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst isStringArray = (value: unknown): value is readonly string[] =>\n Array.isArray(value) && value.every((entry) => typeof entry === \"string\");\n\n/** True when `path` stays inside `parent` (both may be relative or absolute). */\nexport const isContainedPath = (parent: string, path: string): boolean => {\n const resolved = isAbsolute(path) ? normalize(path) : normalize(join(parent, path));\n const base = normalize(parent);\n if (resolved === base) {\n return false; // the parent itself is not a contained child\n }\n return resolved.startsWith(base.endsWith(sep) ? base : `${base}${sep}`);\n};\n\n/** Validate a resource path relative to the registration directory. */\nconst validateRelativeResourcePath = (\n path: unknown,\n): { ok: true; path: string } | { ok: false; message: string } => {\n if (typeof path !== \"string\" || path.length === 0) {\n return { ok: false, message: \"resource path must be a non-empty string\" };\n }\n if (isAbsolute(path)) {\n return { ok: false, message: `resource path must be relative, got absolute: ${path}` };\n }\n if (path.split(/[\\\\/]/u).some((segment) => segment === \"..\")) {\n return { ok: false, message: `resource path must not escape the registration: ${path}` };\n }\n const normalized = normalize(path);\n if (normalized === \"..\" || normalized.startsWith(\"..\")) {\n return { ok: false, message: `resource path escapes the registration: ${path}` };\n }\n return { ok: true, path: normalized.split(sep).join(\"/\") };\n};\n\nconst parseResourceSource = (value: unknown): ResourceSource | { message: string } => {\n if (!isRecord(value)) {\n return { message: \"resource source must be an object\" };\n }\n const kind = value.kind;\n const ref = value.ref;\n if (kind !== \"file\" && kind !== \"http\" && kind !== \"data\") {\n return { message: \"resource source kind must be file, http, or data\" };\n }\n if (typeof ref !== \"string\" || ref.length === 0) {\n return { message: \"resource source ref must be a non-empty string\" };\n }\n return { kind, ref };\n};\n\n// ─── zod schema (declarative v1 authority) ─────────────────────────────────\n// The imperative field-by-field parser is replaced by a zod@v4 schema with\n// refinements for the v1 laws: exact schema version (futures surface as\n// incompatible_version, never invalid_config), contained resource paths,\n// reverse-dotted appId, absolute cwd, and per-field error paths.\n\nconst sha256Field = z\n .string()\n .regex(/^[0-9a-f]{64}$/u, \"sha256 must be a 64-char hex digest\");\n\nconst resourceSourceSchema = z.object({\n kind: z.union([z.literal(\"file\"), z.literal(\"http\"), z.literal(\"data\")]),\n ref: z.string().min(1),\n});\n\nconst iconResourceRefSchema = z\n .object({\n path: z.string().superRefine((value, ctx) => {\n const check = validateRelativeResourcePath(value);\n if (!check.ok) {\n ctx.addIssue({ code: \"custom\", message: check.message });\n }\n }),\n format: z.enum([\"png\", \"jpeg\", \"webp\", \"gif\", \"svg\"]),\n sha256: sha256Field,\n source: resourceSourceSchema,\n })\n .strict();\n\nconst commandSchema = z\n .object({\n executable: z.string().trim().min(1, \"command.executable must be a non-empty string\"),\n args: z.array(z.string()),\n cwd: z.string().refine((value) => value.length > 0 && isAbsolute(value), {\n message: \"command.cwd must be an absolute path\",\n }),\n env: z.record(z.string().min(1, \"command.env keys must be non-empty\"), z.string()).optional(),\n })\n .strict();\n\n// URL source (D4): http(s) only; the address text is the whole source — no\n// fetch, no liveness probe, no synthesized command semantics.\nconst urlSchema = z.string().trim().superRefine((value, ctx) => {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch {\n ctx.addIssue({ code: \"custom\", message: `url must be a valid absolute address, got: ${value}` });\n return;\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n ctx.addIssue({\n code: \"custom\",\n message: `url must use http or https, got protocol ${parsed.protocol}`,\n });\n }\n});\n\nconst iconsSchema = z\n .object({\n appIcon: iconResourceRefSchema.optional(),\n trayIcon: iconResourceRefSchema.optional(),\n imageSmoothingEnabled: z.boolean().default(true),\n background: z.enum([\"black\", \"white\", \"transparent\"]).default(\"transparent\"),\n scale: z\n .number()\n .refine(\n (value) =>\n Number.isFinite(value) && value >= ICON_SCALE_MIN && value <= ICON_SCALE_MAX,\n { message: `icons.scale must be a number between ${ICON_SCALE_MIN} and ${ICON_SCALE_MAX}` },\n )\n .default(DEFAULT_ICON_SCALE),\n trayTemplate: z.boolean().optional(),\n })\n .strict();\n\nconst windowSchema = z\n .object({\n width: z.number().int().positive().default(DEFAULT_WINDOW.width),\n height: z.number().int().positive().default(DEFAULT_WINDOW.height),\n toolbar: z.boolean().optional(),\n titleFollowsDocument: z.boolean().default(true),\n iconFollowsDocument: z.boolean().default(false),\n })\n .strict()\n .default(DEFAULT_WINDOW);\n\nconst createConfigObject = z.object({\n schemaVersion: z.number().int(),\n appId: z.string().refine((value) => isValidAppId(value), {\n message: \"appId must be a reverse-dotted identity\",\n }),\n appName: z.string().trim().min(1, \"appName must be a non-empty string\"),\n command: commandSchema.optional(),\n url: urlSchema.optional(),\n packageManager: z.enum([\"npm\", \"pnpm\", \"bun\"]),\n icons: iconsSchema.optional(),\n window: windowSchema,\n developerMode: z.boolean().default(false),\n});\n\n// v1 XOR law (D1): exactly one application source — command vector or URL.\nconst exactlyOneSource = (\n value: { command?: unknown; url?: unknown },\n ctx: z.RefinementCtx,\n): void => {\n const hasCommand = value.command !== undefined;\n const hasUrl = value.url !== undefined;\n if (hasCommand && hasUrl) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"url\"],\n message: \"configuration must carry exactly one source: command and url are both present\",\n });\n } else if (!hasCommand && !hasUrl) {\n ctx.addIssue({\n code: \"custom\",\n path: [\"command\"],\n message: \"configuration must carry exactly one source: neither command nor url is present\",\n });\n }\n};\n\n/**\n * Strict v1 parse. Unknown future schema versions are reported as\n * `incompatible_version` read-only evidence; every other structural problem\n * is an `invalid_config` typed failure with the offending field path in\n * details. No mutation ever results from parse.\n */\nexport const parseCreateConfig = (raw: unknown): Result<CreateConfigV1> => {\n // schemaVersion negotiation happens BEFORE the schema so a future document\n // gets the typed incompatible_version error, not a field-level one.\n const versionProbe = z.object({ schemaVersion: z.number().int() }).loose().safeParse(raw);\n if (!versionProbe.success) {\n return err(\"invalid_config\", \"schemaVersion must be an integer\");\n }\n const found = versionProbe.data.schemaVersion;\n if (found > CONFIG_SCHEMA_VERSION) {\n return err(\n \"incompatible_version\",\n `configuration schema version ${found} is newer than supported version ${CONFIG_SCHEMA_VERSION}; refusing to modify or apply it`,\n { found, supported: CONFIG_SCHEMA_VERSION },\n );\n }\n if (found !== CONFIG_SCHEMA_VERSION) {\n return err(\"invalid_config\", `unsupported schemaVersion ${String(found)}`);\n }\n const parsed = createConfigObject.loose().superRefine(exactlyOneSource).safeParse(raw);\n if (!parsed.success) {\n const first = parsed.error.issues[0];\n const path = first === undefined ? \"\" : first.path.join(\".\");\n return err(\n \"invalid_config\",\n first?.message ?? \"configuration is structurally invalid\",\n path.length > 0 ? { field: path } : undefined,\n );\n }\n const value = parsed.data as CreateConfigV1;\n return ok({\n schemaVersion: CONFIG_SCHEMA_VERSION,\n appId: value.appId,\n appName: value.appName,\n ...(value.command === undefined ? {} : { command: value.command }),\n ...(value.url === undefined ? {} : { url: value.url }),\n packageManager: value.packageManager,\n icons: value.icons ?? iconsSchema.parse({}),\n window: value.window,\n developerMode: value.developerMode,\n });\n};\n\n/** Serialize a v1 configuration deterministically (trailing newline). */\nexport const serializeCreateConfig = (config: CreateConfigV1): string =>\n `${JSON.stringify(config, null, 2)}\\n`;\n\n/** True when two v1 documents describe the same immutable identity. */\nexport const sameIdentity = (a: CreateConfigV1, b: CreateConfigV1): boolean =>\n a.appId === b.appId;\n","// Fixed-root registration scanning (openspec change unify-create-opentray-core).\n//\n// The create registry has ONE physical root: `~/.opentray/create/`. A\n// registration is a physical directory keyed by the encoded immutable\n// appId containing `create-opentray.json` plus a managed `app/` payload\n// (physical directory or directory link). Legacy `opentray.app.json`\n// projects are outside the v1 registry: never listed, never mutated.\n\nimport { access, lstat, readdir, readFile, readlink } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\n\nimport { toProjectDirectoryName } from \"./app-id\";\nimport { CONFIG_FILENAME, parseCreateConfig, type CreateConfigV1 } from \"./config\";\nimport { err, ok, type CreateError, type Result } from \"./errors\";\n\nexport const REGISTRY_ROOT_SEGMENTS = [\".opentray\", \"create\"] as const;\nexport const APP_DIRNAME = \"app\";\n\n/** Resolve the fixed registry root under a home directory (test seam). */\nexport const registryRoot = (homeDir: string = homedir()): string =>\n join(homeDir, ...REGISTRY_ROOT_SEGMENTS);\n\n/** Encode an immutable appId into its stable registration key. */\nexport const registrationKey = (appId: string): string => toProjectDirectoryName(appId);\n\nexport interface RegistrationPaths {\n /** Fixed registry root. */\n readonly root: string;\n /** Encoded directory key. */\n readonly key: string;\n /** Physical registration directory. */\n readonly dir: string;\n readonly configPath: string;\n /** `<dir>/app` — managed directory or directory link/junction. */\n readonly appDir: string;\n}\n\nexport const registrationPaths = (appId: string, homeDir?: string): RegistrationPaths => {\n const root = registryRoot(homeDir);\n const key = registrationKey(appId);\n const dir = join(root, key);\n return {\n root,\n key,\n dir,\n configPath: join(dir, CONFIG_FILENAME),\n appDir: join(dir, APP_DIRNAME),\n };\n};\n\nexport type RegistrationStatus =\n | \"healthy\"\n | \"invalid-config\"\n | \"incompatible-version\"\n | \"missing-payload\"\n | \"broken-link\"\n | \"running\";\n\nexport interface RegistrationRecord {\n readonly key: string;\n readonly dir: string;\n readonly configPath: string;\n readonly appDir: string;\n readonly status: RegistrationStatus;\n /** Parsed v1 configuration when readable. */\n readonly config?: CreateConfigV1;\n /** Resolved payload path (link target or the physical app dir). */\n readonly payloadPath?: string;\n /** True when `app/` is a directory link/junction to an external target. */\n readonly isLink: boolean;\n readonly error?: CreateError;\n}\n\nexport const readRegistrationRecord = async (\n key: string,\n dir: string,\n): Promise<RegistrationRecord> => { const configPath = join(dir, CONFIG_FILENAME);\n const appDir = join(dir, APP_DIRNAME);\n const base = { key, dir, configPath, appDir, isLink: false };\n\n let raw: string;\n try {\n raw = await readFile(configPath, \"utf8\");\n } catch (error) {\n return {\n ...base,\n status: \"invalid-config\",\n error: {\n code: \"registry_io\",\n message: `cannot read ${CONFIG_FILENAME}: ${error instanceof Error ? error.message : String(error)}`,\n },\n };\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n return {\n ...base,\n status: \"invalid-config\",\n error: {\n code: \"invalid_config\",\n message: `${CONFIG_FILENAME} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`,\n },\n };\n }\n const config = parseCreateConfig(parsed);\n if (!config.ok) {\n return {\n ...base,\n status: config.error.code === \"incompatible_version\" ? \"incompatible-version\" : \"invalid-config\",\n error: config.error,\n };\n }\n\n // Payload classification: physical dir, valid link, broken link, or absent.\n let appStat: Awaited<ReturnType<typeof lstat>>;\n try {\n appStat = await lstat(appDir);\n } catch {\n return {\n ...base,\n status: \"missing-payload\",\n config: config.value,\n error: {\n code: \"not_found\",\n message: `managed payload directory is absent: ${appDir}`,\n },\n };\n }\n if (appStat.isSymbolicLink()) {\n let target: string;\n try {\n target = await readlink(appDir);\n } catch (error) {\n return {\n ...base,\n status: \"broken-link\",\n isLink: true,\n config: config.value,\n error: {\n code: \"registry_io\",\n message: `cannot read app link target: ${error instanceof Error ? error.message : String(error)}`,\n },\n };\n }\n // Resolve the target through the registration directory.\n const resolved = resolve(dir, target);\n try {\n const targetStat = await lstat(resolved);\n if (!targetStat.isDirectory()) {\n return {\n ...base,\n status: \"broken-link\",\n isLink: true,\n config: config.value,\n payloadPath: resolved,\n error: { code: \"not_found\", message: `app link target is not a directory: ${resolved}` },\n };\n }\n } catch {\n return {\n ...base,\n status: \"broken-link\",\n isLink: true,\n config: config.value,\n payloadPath: resolved,\n error: { code: \"not_found\", message: `app link target no longer exists: ${resolved}` },\n };\n }\n return { ...base, status: \"healthy\", config: config.value, isLink: true, payloadPath: resolved };\n }\n if (!appStat.isDirectory()) {\n return {\n ...base,\n status: \"missing-payload\",\n config: config.value,\n error: { code: \"not_found\", message: `app payload is not a directory: ${appDir}` },\n };\n }\n return { ...base, status: \"healthy\", config: config.value, payloadPath: appDir };\n};\n\nconst hasV1Config = async (dir: string): Promise<boolean> => {\n try {\n await access(join(dir, CONFIG_FILENAME));\n return true;\n } catch {\n return false;\n }\n};\n\n/** Load one registration by encoded key; not_found when absent or legacy. */\nexport const loadRegistration = async (\n key: string,\n homeDir?: string,\n): Promise<Result<RegistrationRecord>> => {\n const dir = join(registryRoot(homeDir), key);\n if (!(await hasV1Config(dir))) {\n return err(\"not_found\", `no v1 registration at ${dir}`, { key });\n }\n return ok(await readRegistrationRecord(key, dir));\n};\n\n/**\n * Scan the fixed registry root. Only physical directories containing\n * `create-opentray.json` are v1 registrations; legacy marker-only\n * directories are neither listed nor mutated.\n */\nexport const listRegistrations = async (\n homeDir?: string,\n): Promise<readonly RegistrationRecord[]> => {\n const root = registryRoot(homeDir);\n let entries: readonly import(\"node:fs\").Dirent[];\n try {\n entries = await readdir(root, { withFileTypes: true });\n } catch {\n return []; // absent registry root = empty registry, not an error\n }\n const records: RegistrationRecord[] = [];\n for (const entry of entries) {\n if (!entry.isDirectory() && !entry.isSymbolicLink()) {\n continue;\n }\n const dir = join(root, entry.name);\n if (!(await hasV1Config(dir))) {\n continue; // legacy or foreign directory: outside the v1 registry\n }\n records.push(await readRegistrationRecord(entry.name, dir));\n }\n records.sort((a, b) => a.key.localeCompare(b.key));\n return records;\n};\n","// Generated-runtime ownership records (openspec change\n// unify-create-opentray-core).\n//\n// Generated applications publish a caller-owned runtime record (PID + unique\n// ownership token + process start fingerprint) under the registration's\n// authority. Stop/restart target ONLY a process whose live identity and\n// token still match; Core never kills by process name or appId alone, and a\n// reused PID can never authorize termination.\n\nimport { execFile } from \"node:child_process\";\nimport { randomBytes } from \"node:crypto\";\nimport { readFile, rm, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { promisify } from \"node:util\";\n\nimport { err, ok, type Result } from \"./errors\";\n\nconst execFileAsync = promisify(execFile);\n\nexport const RUNTIME_FILENAME = \"runtime.json\";\n\nexport interface RuntimeRecord {\n readonly pid: number;\n /** Unique per-launch ownership token (hex). */\n readonly token: string;\n /** Process start fingerprint (epoch ms) when the platform can report it. */\n readonly startedAt: number | null;\n readonly launchedAt: number;\n}\n\nexport const newRuntimeToken = (): string => randomBytes(16).toString(\"hex\");\n\nexport const readRuntimeRecord = async (\n registrationDir: string,\n): Promise<RuntimeRecord | undefined> => {\n try {\n const raw = JSON.parse(await readFile(join(registrationDir, RUNTIME_FILENAME), \"utf8\")) as\n | RuntimeRecord\n | { [key: string]: unknown };\n if (\n typeof raw === \"object\" &&\n raw !== null &&\n typeof (raw as { pid?: unknown }).pid === \"number\" &&\n typeof (raw as { token?: unknown }).token === \"string\"\n ) {\n const record = raw as RuntimeRecord;\n return {\n pid: record.pid,\n token: record.token,\n startedAt: typeof record.startedAt === \"number\" ? record.startedAt : null,\n launchedAt: typeof record.launchedAt === \"number\" ? record.launchedAt : Date.now(),\n };\n }\n return undefined;\n } catch {\n return undefined;\n }\n};\n\nexport const writeRuntimeRecord = async (\n registrationDir: string,\n record: RuntimeRecord,\n): Promise<void> => {\n await writeFile(join(registrationDir, RUNTIME_FILENAME), `${JSON.stringify(record, null, 2)}\\n`, \"utf8\");\n};\n\nexport const clearRuntimeRecord = async (registrationDir: string): Promise<void> => {\n await rm(join(registrationDir, RUNTIME_FILENAME), { force: true });\n};\n\nexport type ProcessState = \"live\" | \"dead\" | \"reused\" | \"unverified\";\n\nconst isPidAlive = (pid: number): boolean => {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return (error as NodeJS.ErrnoException).code === \"EPERM\";\n }\n};\n\n/** Linux: /proc/<pid>/stat field 22 (starttime in clock ticks since boot). */\nconst linuxStartTicks = async (pid: number): Promise<number | undefined> => {\n try {\n const stat = await readFile(`/proc/${pid}/stat`, \"utf8\");\n // Comm may contain spaces; fields after the closing ')' are stable.\n const close = stat.lastIndexOf(\")\");\n if (close < 0) return undefined;\n const fields = stat.slice(close + 2).split(\" \");\n const ticks = Number.parseInt(fields[19] ?? \"\", 10); // field 22 overall\n return Number.isInteger(ticks) ? ticks : undefined;\n } catch {\n return undefined;\n }\n};\n\nconst bootEpochMs = async (): Promise<number | undefined> => {\n try {\n const stat = await readFile(\"/proc/stat\", \"utf8\");\n const btime = /btime (\\d+)/u.exec(stat);\n return btime === null ? undefined : Number.parseInt(btime[1]!, 10) * 1_000;\n } catch {\n return undefined;\n }\n};\n\n/** macOS: `ps -o lstart= -p <pid>` prints the absolute start timestamp. */\nconst macosStartEpochMs = async (pid: number): Promise<number | undefined> => {\n try {\n // Force the C locale: localized month/day names would break Date.parse.\n const { stdout } = await execFileAsync(\"ps\", [\"-o\", \"lstart=\", \"-p\", String(pid)], {\n timeout: 5_000,\n env: { ...process.env, LC_ALL: \"C\", LANG: \"C\" },\n });\n const parsed = Date.parse(stdout.trim());\n return Number.isNaN(parsed) ? undefined : parsed;\n } catch {\n return undefined;\n }\n};\n\n/** Windows: PowerShell Get-Process StartTime for the pid. */\nconst windowsStartEpochMs = async (pid: number): Promise<number | undefined> => {\n try {\n const { stdout } = await execFileAsync(\n \"powershell.exe\",\n [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n `(Get-CimInstance Win32_Process -Filter \"ProcessId=${pid}\").CreationDate`,\n ],\n { timeout: 10_000, windowsHide: true },\n );\n // CIM returns e.g. \"20260818120000.123456+480\" (DMTF) or a DateTime string.\n const trimmed = stdout.trim();\n const dmtf = /^(\\d{14})(?:\\.(\\d+))?(?:([+-]\\d+))?$/u.exec(trimmed);\n if (dmtf !== null) {\n const stamp = dmtf[1] ?? \"\";\n const fraction = dmtf[2];\n const offset = dmtf[3];\n const iso = `${stamp.slice(0, 4)}-${stamp.slice(4, 6)}-${stamp.slice(6, 8)}T${stamp.slice(8, 10)}:${stamp.slice(10, 12)}:${stamp.slice(12, 14)}${fraction === undefined ? \"\" : `.${fraction.slice(0, 3)}`}${offset ?? \"Z\"}`;\n const parsed = Date.parse(iso);\n if (!Number.isNaN(parsed)) {\n // DMTF timestamps without an explicit offset are UTC.\n return parsed;\n }\n }\n const parsed = Date.parse(trimmed);\n return Number.isNaN(parsed) ? undefined : parsed;\n } catch {\n return undefined;\n }\n};\n\n/**\n * Read a process's start fingerprint (epoch ms) on the current platform;\n * undefined when the platform cannot report it.\n */\nexport const readProcessStartEpochMs = async (\n pid: number,\n platform: NodeJS.Platform = process.platform,\n): Promise<number | undefined> => {\n if (platform === \"linux\") {\n const [ticks, boot] = await Promise.all([linuxStartTicks(pid), bootEpochMs()]);\n if (ticks !== undefined && boot !== undefined) {\n const hz = 100; // USER_HZ on all mainstream Linux builds\n return boot + Math.floor((ticks / hz) * 1_000);\n }\n return undefined;\n }\n if (platform === \"darwin\") {\n return macosStartEpochMs(pid);\n }\n if (platform === \"win32\") {\n return windowsStartEpochMs(pid);\n }\n return undefined;\n};\n\n/**\n * Inspect a recorded PID against its recorded start fingerprint.\n *\n * - `dead`: the process does not exist (stale record).\n * - `reused`: a different process now owns the PID (start mismatch).\n * - `live`: alive and (when the platform reports start times) the same launch.\n * - `unverified`: alive but identity cannot be verified on this platform.\n */\nexport const inspectProcess = async (\n pid: number,\n expectedStartedAt: number | null,\n platform: NodeJS.Platform = process.platform,\n): Promise<ProcessState> => {\n if (!isPidAlive(pid)) {\n return \"dead\";\n }\n if (expectedStartedAt === null) {\n // No recorded fingerprint: aliveness alone can never authorize a kill.\n return \"unverified\";\n }\n const toleranceMs = 2_000;\n const observed = await readProcessStartEpochMs(pid, platform);\n if (observed === undefined) {\n return \"unverified\";\n }\n return Math.abs(observed - expectedStartedAt) <= toleranceMs ? \"live\" : \"reused\";\n};\n\n/** Terminate a verified process tree (never called for unverified PIDs). */\nexport const killProcessTree = async (\n pid: number,\n platform: NodeJS.Platform = process.platform,\n): Promise<Result<{ readonly pid: number }>> => {\n try {\n if (platform === \"win32\") {\n await execFileAsync(\"taskkill\", [\"/PID\", String(pid), \"/T\", \"/F\"], {\n timeout: 15_000,\n windowsHide: true,\n });\n } else {\n // Collect descendants first (SIGTERM races re-parenting).\n const { stdout } = await execFileAsync(\"pgrep\", [\"-P\", String(pid)], { timeout: 5_000 }).catch(() => ({ stdout: \"\" }));\n const children = stdout.split(\"\\n\").map((line) => Number.parseInt(line.trim(), 10)).filter((value) => Number.isInteger(value) && value > 0);\n process.kill(pid, \"SIGTERM\");\n for (const child of children) {\n try {\n process.kill(child, \"SIGTERM\");\n } catch {\n // already gone\n }\n }\n await new Promise((resolve) => setTimeout(resolve, 300));\n for (const target of [pid, ...children]) {\n if (isPidAlive(target)) {\n try {\n process.kill(target, \"SIGKILL\");\n } catch {\n // already gone\n }\n }\n }\n }\n return ok({ pid });\n } catch (error) {\n return err(\n \"process_unverified\",\n `failed to terminate process tree for pid ${pid}: ${error instanceof Error ? error.message : String(error)}`,\n { pid },\n );\n }\n};\n","// Create-root discovery scan + wizard-project uninstall (openspec change\n// wizard-share-and-list-scan).\n//\n// The workbench application list needs BOTH layouts that live under the fixed\n// create root `~/.opentray/create/`: v1 registrations (envelope directory\n// with create-opentray.json, interpreted exclusively by registry.ts) and\n// wizard projects (scaffold markers opentray.app.json + main.mjs directly in\n// the keyed directory, no envelope). Discovery itself is a read-only\n// projection. Uninstall (user requirement #11, 2026-08-19 revision D6) is\n// the one deliberate writer: it deletes a VERIFIED wizard project after\n// ownership checks and authorized process teardown — the registry's older\n// \"legacy never mutated\" stance yields to this explicit contract.\n\nimport { createHash } from \"node:crypto\";\nimport { execFile } from \"node:child_process\";\nimport { access, readdir, readFile, rm } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\nimport { detectPackageManager } from \"./materialize\";\nimport { CONFIG_FILENAME, type PackageManagerName } from \"./config\";\nimport { registryRoot, readRegistrationRecord, type RegistrationRecord } from \"./registry\";\nimport { killProcessTree } from \"./runtime-record\";\nimport { SCAFFOLD_MARKER_FILES } from \"./scaffold\";\nimport {\n resolveDefaultDarwinAppBundlePath,\n sanitizeAppBundleName,\n} from \"@opentray/packaging\";\nimport { toProjectDirectoryName } from \"./app-id\";\n\nconst exists = async (path: string): Promise<boolean> => {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n};\n\n/** Edit/export-ready projection of a wizard project's frozen opentray.app.json. */\nexport interface WizardProjectConfig {\n readonly appId: string;\n readonly appName: string;\n /** Command projection; absent for URL projects (source is the url below). */\n readonly command?: {\n readonly executable: string;\n readonly args: readonly string[];\n readonly cwd: string;\n readonly env?: Readonly<Record<string, string>>;\n };\n /** URL source projection (add-create-url-apps D7): undefined for command projects. */\n readonly url?: string;\n readonly window: { readonly width: number; readonly height: number };\n readonly developerMode: boolean;\n /** Inferred from the project's lockfile (scaffold package.json records pm nowhere). */\n readonly packageManager: PackageManagerName;\n /** Informational preview-port hint from the frozen wizard state. */\n readonly servicePort: number;\n /** Stable in-project icon asset used as the share/export icon source. */\n readonly iconSourcePath: string | undefined;\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\n/**\n * Read one wizard project's opentray.app.json into the projection the edit\n * and share flows consume. Undefined when the file is absent or not a\n * recognizable wizard config (the caller decides how to surface that).\n */\nexport const readWizardProjectConfig = async (\n projectDir: string,\n): Promise<WizardProjectConfig | undefined> => {\n let raw: unknown;\n try {\n raw = JSON.parse(await readFile(join(projectDir, \"opentray.app.json\"), \"utf8\"));\n } catch {\n return undefined;\n }\n if (!isRecord(raw) || typeof raw.appId !== \"string\" || typeof raw.appName !== \"string\") {\n return undefined;\n }\n const command = isRecord(raw.command)\n ? raw.command\n : undefined;\n const executable = typeof command?.command === \"string\" ? command.command : \"\";\n const args = Array.isArray(command?.args) && command.args.every((a) => typeof a === \"string\")\n ? (command.args as readonly string[])\n : [];\n const cwd = typeof command?.cwd === \"string\" ? command.cwd : projectDir;\n const env = isRecord(command?.env)\n ? Object.fromEntries(\n Object.entries(command.env).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\",\n ),\n )\n : undefined;\n // URL projects carry the address instead of a command; the projection never\n // synthesizes command defaults for them (add-create-url-apps D7).\n const url = typeof raw.url === \"string\" ? raw.url : undefined;\n const window = isRecord(raw.window)\n ? {\n width: Number.isFinite(raw.window.width) ? Number(raw.window.width) : 1_200,\n height: Number.isFinite(raw.window.height) ? Number(raw.window.height) : 800,\n }\n : { width: 1_200, height: 800 };\n const service = isRecord(raw.service) && Number.isFinite(raw.service.port)\n ? Number(raw.service.port)\n : 0;\n const files = await readdir(projectDir).catch(() => [] as string[]);\n const iconSourcePath = join(projectDir, \"app-icon\", \"app-icon.png\");\n const base = {\n appId: raw.appId,\n appName: raw.appName,\n window,\n developerMode: raw.developerMode === true,\n packageManager: detectPackageManager(files, undefined),\n servicePort: service,\n iconSourcePath: (await exists(iconSourcePath)) ? iconSourcePath : undefined,\n };\n if (command !== undefined) {\n return {\n ...base,\n command: { executable, args, cwd, ...(env === undefined ? {} : { env }) },\n };\n }\n if (url !== undefined) {\n // URL projects carry the address instead of a command; the projection\n // never synthesizes command defaults for them (add-create-url-apps D7).\n return { ...base, url };\n }\n return undefined;\n};\n\nexport interface WizardProjectIcon {\n readonly bytes: Uint8Array;\n readonly sha256: string;\n /** Absolute provenance path (replaced by the script's embedded temp file). */\n readonly path: string;\n}\n\n/** Read the wizard project's stable icon asset for share/export embedding. */\nexport const readWizardProjectIcon = async (\n projectDir: string,\n): Promise<WizardProjectIcon | undefined> => {\n const config = await readWizardProjectConfig(projectDir);\n if (config?.iconSourcePath === undefined) return undefined;\n try {\n const bytes = new Uint8Array(await readFile(config.iconSourcePath));\n return {\n bytes,\n sha256: createHash(\"sha256\").update(bytes).digest(\"hex\"),\n path: config.iconSourcePath,\n };\n } catch {\n return undefined;\n }\n};\n\n/** One discovered entry under the create root. */\nexport type CreateRootEntry =\n | {\n readonly source: \"registered\";\n readonly key: string;\n readonly record: RegistrationRecord;\n }\n | {\n readonly source: \"wizard\";\n readonly key: string;\n readonly dir: string;\n readonly config: WizardProjectConfig | undefined;\n };\n\nconst hasScaffoldMarkers = async (dir: string): Promise<boolean> => {\n for (const marker of SCAFFOLD_MARKER_FILES) {\n if (!(await exists(join(dir, marker)))) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Scan the fixed create root and project BOTH layouts (decision D2 in\n * openspec/changes/wizard-share-and-list-scan/plans/plan.md). Envelope\n * directories stay owned by registry.ts; wizard marker directories project\n * read-only; everything else stays invisible.\n */\nexport const listCreateEntries = async (\n homeDir?: string,\n): Promise<readonly CreateRootEntry[]> => {\n const root = registryRoot(homeDir);\n let dirents: readonly import(\"node:fs\").Dirent[];\n try {\n dirents = await readdir(root, { withFileTypes: true });\n } catch {\n return []; // absent root = empty list, not an error\n }\n const entries: CreateRootEntry[] = [];\n for (const dirent of dirents) {\n if (!dirent.isDirectory() && !dirent.isSymbolicLink()) {\n continue;\n }\n const dir = join(root, dirent.name);\n if (await exists(join(dir, CONFIG_FILENAME))) {\n entries.push({\n source: \"registered\",\n key: dirent.name,\n record: await readRegistrationRecord(dirent.name, dir),\n });\n continue;\n }\n if (await hasScaffoldMarkers(dir)) {\n entries.push({\n source: \"wizard\",\n key: dirent.name,\n dir,\n config: await readWizardProjectConfig(dir),\n });\n }\n // Neither shape: foreign directory, outside both projections.\n }\n entries.sort((a, b) => a.key.localeCompare(b.key));\n return entries;\n};\n\n/** Resolve one entry by its directory key (workbench endpoints are key-addressed). */\nexport const findCreateEntry = async (\n key: string,\n homeDir?: string,\n): Promise<CreateRootEntry | undefined> => {\n const root = registryRoot(homeDir);\n const dir = join(root, key);\n if (await exists(join(dir, CONFIG_FILENAME))) {\n return { source: \"registered\", key, record: await readRegistrationRecord(key, dir) };\n }\n if (await hasScaffoldMarkers(dir)) {\n return { source: \"wizard\", key, dir, config: await readWizardProjectConfig(dir) };\n }\n return undefined;\n};\n\n// ─── Wizard-project uninstall (requirement #11 revision D6) ────────────────\n\nexport interface WizardUninstallOptions {\n /** Encoded directory key under the create root. */\n readonly key: string;\n readonly homeDir?: string;\n /** Explicitly authorize stopping a verified running entry. */\n readonly stopRunning?: boolean;\n readonly platform?: NodeJS.Platform;\n /** Test seams: pid discovery and tree kill. */\n readonly findPids?: (projectDir: string) => Promise<readonly number[]>;\n readonly killTree?: (pid: number) => Promise<unknown>;\n}\n\nexport interface WizardUninstallResult {\n readonly projectPath: string;\n readonly projectRemoved: boolean;\n /** OpenTray-home Darwin bundle removed for this identity (darwin only). */\n readonly bundlePath?: string;\n readonly bundleRemoved: boolean;\n readonly stoppedPids: readonly number[];\n readonly manualPinCleanupHint: string;\n}\n\n/**\n * Live entry pids for one wizard project: the entry is `node <projectDir>/\n * main.mjs` (absolute vector persisted by open-app/appLaunch), so argv\n * matching against the absolute script path is exact identity — never a\n * name-based guess. POSIX only; win32 reports none (host UIs surface the\n * limitation instead of guessing).\n */\nconst defaultFindProjectEntryPids = async (projectDir: string): Promise<readonly number[]> => {\n if (process.platform === \"win32\") return [];\n return await new Promise((resolve) => {\n execFile(\"pgrep\", [\"-f\", `${projectDir}/main.mjs`], (error, stdout) => {\n if (error) {\n resolve([]);\n return;\n }\n resolve(\n stdout\n .split(\"\\n\")\n .map((line) => Number.parseInt(line.trim(), 10))\n .filter((pid) => Number.isInteger(pid) && pid > 0),\n );\n });\n });\n};\n\n/**\n * Uninstall one wizard project. Ownership is proven by the scaffold markers\n * (anything else under the key refuses removal); a running entry blocks with\n * a typed failure unless stopping is authorized, in which case each matched\n * pid is torn down as a whole tree before the directories are removed.\n */\nexport const uninstallWizardProject = async (\n options: WizardUninstallOptions,\n): Promise<\n | { readonly ok: true; readonly value: WizardUninstallResult }\n | { readonly ok: false; readonly error: { readonly code: string; readonly message: string; readonly pids?: readonly number[] } }\n> => {\n const entry = await findCreateEntry(options.key, options.homeDir);\n if (entry === undefined || entry.source !== \"wizard\") {\n return {\n ok: false,\n error: {\n code: \"not_found\",\n message: `no wizard project at key ${options.key} (refusing to remove a non-wizard directory)`,\n },\n };\n }\n const findPids = options.findPids ?? defaultFindProjectEntryPids;\n const killTree = options.killTree ?? ((pid: number) => killProcessTree(pid));\n const pids = [...(await findPids(entry.dir))];\n if (pids.length > 0 && options.stopRunning !== true) {\n return {\n ok: false,\n error: {\n code: \"app_running\",\n message: `application is running (pid ${pids.join(\", \")}); stop it or authorize stop-running`,\n pids,\n },\n };\n }\n for (const pid of pids) {\n await killTree(pid);\n }\n\n await rm(entry.dir, { recursive: true, force: true });\n\n // The OpenTray-home Darwin bundle is derived state of this identity;\n // remove it when present (non-darwin hosts have no bundle).\n let bundlePath: string | undefined;\n let bundleRemoved = false;\n const platform = options.platform ?? process.platform;\n if (platform === \"darwin\" && entry.config !== undefined) {\n const expected = resolveDefaultDarwinAppBundlePath({\n homeDir: options.homeDir ?? homedir(),\n packageName: toProjectDirectoryName(entry.config.appId),\n appName: sanitizeAppBundleName(entry.config.appName),\n });\n if (await exists(expected)) {\n await rm(expected, { recursive: true, force: true });\n bundlePath = expected;\n bundleRemoved = true;\n }\n }\n\n return {\n ok: true,\n value: {\n projectPath: entry.dir,\n projectRemoved: true,\n ...(bundlePath === undefined ? {} : { bundlePath }),\n bundleRemoved,\n stoppedPids: pids,\n manualPinCleanupHint:\n \"macOS Dock pins and Windows taskbar pins are user-managed; remove them manually if present.\",\n },\n };\n};\n","// Platform-truthful directory links (openspec change unify-create-opentray-core).\n//\n// External payloads keep the registration directory PHYSICAL; only `app/`\n// becomes a directory link. POSIX uses a directory symlink; Windows uses a\n// junction (no privilege required) or a directory symlink, and reports a\n// typed unsupported error when neither can be created — never a silent copy.\n\nimport { lstat, mkdir, rm, symlink } from \"node:fs/promises\";\nimport { dirname, resolve } from \"node:path\";\n\nimport { err, ok, type Result } from \"./errors\";\n\nexport interface LinkCapabilities {\n readonly platform: NodeJS.Platform;\n /** Windows junction creation through `fs.symlink(target, path, \"junction\")`. */\n readonly junction: boolean;\n}\n\nexport const linkCapabilities = (platform: NodeJS.Platform = process.platform): LinkCapabilities => ({\n platform,\n junction: platform === \"win32\",\n});\n\n/**\n * Create a directory link at `linkPath` pointing at `target`.\n * - POSIX: relative-or-absolute symlink (caller supplies the raw target string).\n * - Windows: junction first, then directory symlink; typed failure otherwise.\n */\nexport const createDirectoryLink = async (\n linkPath: string,\n target: string,\n options: { readonly platform?: NodeJS.Platform } = {},\n): Promise<Result<{ readonly linkPath: string; readonly target: string }>> => {\n const platform = options.platform ?? process.platform;\n await mkdir(dirname(linkPath), { recursive: true });\n // Remove a stale link/file at the path (never a physical directory).\n try {\n const existing = await lstat(linkPath);\n if (existing.isDirectory() && !existing.isSymbolicLink()) {\n return err(\n \"not_empty\",\n `cannot replace physical directory with a link: ${linkPath}`,\n { linkPath },\n );\n }\n await rm(linkPath, { force: true });\n } catch {\n // absent: nothing to clear\n }\n if (platform === \"win32\") {\n // Junctions need no developer mode and accept absolute targets; the\n // stored target string may be either form.\n try {\n await symlink(resolve(dirname(linkPath), target), linkPath, \"junction\");\n return ok({ linkPath, target });\n } catch {\n // Fall through to a directory symlink (requires developer mode or\n // SeCreateSymbolicLinkPrivilege).\n }\n try {\n await symlink(resolve(dirname(linkPath), target), linkPath, \"dir\");\n return ok({ linkPath, target });\n } catch (error) {\n return err(\n \"link_unsupported\",\n `cannot create a directory link on this Windows system for ${linkPath} (junction and symlink both failed): ${error instanceof Error ? error.message : String(error)}`,\n { linkPath },\n );\n }\n }\n try {\n await symlink(target, linkPath, \"dir\");\n return ok({ linkPath, target });\n } catch (error) {\n return err(\n \"link_unsupported\",\n `cannot create directory symlink at ${linkPath}: ${error instanceof Error ? error.message : String(error)}`,\n { linkPath },\n );\n }\n};\n","// Source-resource import (openspec change unify-create-opentray-core).\n//\n// Uploaded files, HTTP URLs, and Data URLs normalize into validated sibling\n// files inside the registration directory. `create-opentray.json` references\n// them relatively and records provenance plus a content hash. An unchanged\n// remote source reuses its committed local snapshot — URL drift can never\n// silently change an icon during an unrelated edit.\n\nimport { createHash } from \"node:crypto\";\nimport { readFile, rename, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nimport type { IconResourceRef, ImageFormat } from \"./config\";\nimport { err, ok, type Result } from \"./errors\";\nimport { ensureLoopbackNoProxy } from \"./port-scan\";\n\nexport type ResourceInput =\n | { readonly kind: \"file\"; readonly path: string }\n | { readonly kind: \"http\"; readonly url: string }\n | { readonly kind: \"data\"; readonly dataUrl: string }\n | { readonly kind: \"bytes\"; readonly bytes: Uint8Array; readonly name?: string };\n\nexport type IconRole = \"appIcon\" | \"trayIcon\";\n\nconst FORMAT_EXTENSIONS: Record<ImageFormat, string> = {\n png: \"png\",\n jpeg: \"jpg\",\n webp: \"webp\",\n gif: \"gif\",\n svg: \"svg\",\n};\n\n/** Sniff the true image format from magic bytes (never trust extensions). */\nexport const detectImageFormat = (bytes: Uint8Array): ImageFormat | undefined => {\n if (bytes.length >= 8 && bytes[0] === 0x89 && bytes[1] === 0x50 && bytes[2] === 0x4e && bytes[3] === 0x47) {\n return \"png\";\n }\n if (bytes.length >= 3 && bytes[0] === 0xff && bytes[1] === 0xd8 && bytes[2] === 0xff) {\n return \"jpeg\";\n }\n if (\n bytes.length >= 12 &&\n bytes[0] === 0x52 && bytes[1] === 0x49 && bytes[2] === 0x46 && bytes[3] === 0x46 &&\n bytes[8] === 0x57 && bytes[9] === 0x45 && bytes[10] === 0x42 && bytes[11] === 0x50\n ) {\n return \"webp\";\n }\n if (bytes.length >= 6 && bytes[0] === 0x47 && bytes[1] === 0x49 && bytes[2] === 0x46) {\n return \"gif\";\n }\n // SVG sniffing: leading BOM/whitespace, then `<` (with optional xml decl).\n const head = new TextDecoder(\"utf-8\", { fatal: false })\n .decode(bytes.slice(0, 512))\n .trimStart()\n .toLowerCase();\n // Allow an XML declaration, doctype, or leading comments before the root\n // <svg> (favicon SVGs in the wild carry license comments up front).\n if (head.startsWith(\"<\") && head.includes(\"<svg\")) {\n return \"svg\";\n }\n return undefined;\n};\n\nconst DATA_URL_PATTERN = /^data:image\\/(png|jpeg|jpg|webp|gif|svg\\+xml);base64,([a-z0-9+/=]+)$/iu;\n\nexport interface ParsedDataUrl {\n readonly bytes: Uint8Array;\n readonly format: ImageFormat;\n}\n\n/** Parse a strict `data:image/<format>;base64,<payload>` URL. */\nexport const parseDataImageUrl = (dataUrl: string): Result<ParsedDataUrl> => {\n const match = DATA_URL_PATTERN.exec(dataUrl.trim());\n if (match === null) {\n return err(\n \"resource_invalid\",\n \"data URL must be data:image/(png|jpeg|webp|gif|svg+xml);base64,<payload>\",\n );\n }\n const rawFormat = match[1]!.toLowerCase();\n const format: ImageFormat = rawFormat === \"jpg\" ? \"jpeg\" : rawFormat === \"svg+xml\" ? \"svg\" : (rawFormat as ImageFormat);\n let bytes: Uint8Array;\n try {\n bytes = Buffer.from(match[2]!, \"base64\");\n } catch (error) {\n return err(\"resource_invalid\", `data URL payload is not valid base64: ${error instanceof Error ? error.message : String(error)}`);\n }\n return ok({ bytes, format });\n};\n\nconst fetchHttpBytes = async (url: string): Promise<Result<Uint8Array>> => {\n if (!/^https?:\\/\\//iu.test(url)) {\n return err(\"resource_invalid\", `HTTP icon source must be an http(s) URL: ${url}`);\n }\n ensureLoopbackNoProxy();\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 20_000);\n try {\n const response = await fetch(url, { signal: controller.signal, redirect: \"follow\" });\n if (!response.ok) {\n return err(\"resource_fetch_failed\", `fetching ${url} failed with HTTP ${response.status}`);\n }\n const buffer = new Uint8Array(await response.arrayBuffer());\n return ok(buffer);\n } catch (error) {\n return err(\n \"resource_fetch_failed\",\n `fetching ${url} failed: ${error instanceof Error ? error.message : String(error)}`,\n );\n } finally {\n clearTimeout(timer);\n }\n};\n\nexport interface ImportResourceOptions {\n /** Registration directory receiving the committed snapshot. */\n readonly registrationDir: string;\n /** Stable sibling filename prefix, e.g. \"app-icon\". */\n readonly filename: string;\n}\n\nexport interface ImportedResource {\n readonly ref: IconResourceRef;\n readonly bytesHash: string;\n /** True when an identical committed snapshot was reused unchanged. */\n readonly reused: boolean;\n}\n\n/**\n * Import one source resource into the registration directory.\n *\n * Byte-format validation always runs against magic bytes (declared format\n * is never trusted). The snapshot is committed through a sibling temp file\n * so a failed write can never publish a truncated resource.\n */\nexport const importResource = async (\n input: ResourceInput,\n options: ImportResourceOptions,\n): Promise<Result<ImportedResource>> => {\n let bytes: Uint8Array;\n let source: IconResourceRef[\"source\"];\n if (input.kind === \"file\") {\n try {\n bytes = new Uint8Array(await readFile(input.path));\n } catch (error) {\n return err(\"resource_invalid\", `cannot read icon file ${input.path}: ${error instanceof Error ? error.message : String(error)}`);\n }\n source = { kind: \"file\", ref: input.path };\n } else if (input.kind === \"http\") {\n const fetched = await fetchHttpBytes(input.url);\n if (!fetched.ok) {\n return fetched;\n }\n bytes = fetched.value;\n source = { kind: \"http\", ref: input.url };\n } else if (input.kind === \"data\") {\n const parsed = parseDataImageUrl(input.dataUrl);\n if (!parsed.ok) {\n return parsed;\n }\n bytes = parsed.value.bytes;\n source = { kind: \"data\", ref: input.dataUrl.slice(0, 64) };\n } else {\n bytes = input.bytes;\n source = { kind: \"data\", ref: input.name === undefined ? \"upload\" : `upload:${input.name}` };\n }\n\n const sniffed = detectImageFormat(bytes);\n if (sniffed === undefined) {\n return err(\n \"resource_invalid\",\n `icon bytes are not a recognized raster/SVG image (sniff failed) for ${options.filename}`,\n );\n }\n const format = sniffed;\n const bytesHash = createHash(\"sha256\").update(bytes).digest(\"hex\");\n const path = `${options.filename}.${FORMAT_EXTENSIONS[format]}`;\n\n // Stable-snapshot reuse: identical committed bytes keep the existing file.\n const committed = join(options.registrationDir, path);\n try {\n const existing = new Uint8Array(await readFile(committed));\n const existingHash = createHash(\"sha256\").update(existing).digest(\"hex\");\n if (existingHash === bytesHash) {\n return ok({\n ref: { path, format, sha256: bytesHash, source },\n bytesHash,\n reused: true,\n });\n }\n } catch {\n // no committed snapshot yet\n }\n\n const temp = `${committed}.tmp-${bytesHash.slice(0, 8)}`;\n try {\n await writeFile(temp, bytes);\n await rename(temp, committed);\n } catch (error) {\n return err(\n \"registry_io\",\n `cannot commit icon snapshot ${committed}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n return ok({\n ref: { path, format, sha256: bytesHash, source },\n bytesHash,\n reused: false,\n });\n};\n\n/**\n * Resolve the committed snapshot referenced by a config resource, verifying\n * its bytes still match the recorded hash (drift detection).\n */\nexport const readResourceBytes = async (\n registrationDir: string,\n ref: IconResourceRef,\n): Promise<Result<Uint8Array>> => {\n try {\n const bytes = new Uint8Array(await readFile(join(registrationDir, ref.path)));\n const hash = createHash(\"sha256\").update(bytes).digest(\"hex\");\n if (hash !== ref.sha256) {\n return err(\n \"resource_invalid\",\n `committed resource ${ref.path} no longer matches its recorded hash (expected ${ref.sha256}, found ${hash})`,\n { path: ref.path },\n );\n }\n return ok(bytes);\n } catch (error) {\n return err(\n \"resource_invalid\",\n `cannot read committed resource ${ref.path}: ${error instanceof Error ? error.message : String(error)}`,\n { path: ref.path },\n );\n }\n};\n","// Deterministic Plan/Apply lifecycle kernel (openspec change\n// unify-create-opentray-core).\n//\n// Plan performs every non-mutating check needed to describe the ordered\n// effect set; Apply consumes a validated plan (or revalidates equivalent\n// preconditions) before mutation. CLI and WebUI therefore cannot implement\n// divergent creation semantics. Force requires VERIFIED create-opentray\n// ownership — it can never adopt or clear an unknown non-empty directory.\n\nimport { lstat, mkdir, readdir, rename, rm, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\n\nimport {\n CONFIG_FILENAME,\n parseCreateConfig,\n serializeCreateConfig,\n type CreateConfigV1,\n type IconResourceRef,\n} from \"./config\";\nimport { err, ok, type Result } from \"./errors\";\nimport {\n materializePayload,\n type MaterializeContext,\n type MaterializeInput,\n type MaterializeResult,\n} from \"./materialize\";\nimport { createDirectoryLink } from \"./links\";\nimport {\n loadRegistration,\n readRegistrationRecord,\n registrationKey,\n registrationPaths,\n type RegistrationRecord,\n} from \"./registry\";\nimport { importResource, readResourceBytes, type ResourceInput } from \"./resources\";\nimport {\n clearRuntimeRecord,\n inspectProcess,\n killProcessTree,\n readRuntimeRecord,\n} from \"./runtime-record\";\n\nexport interface DesiredIconInput {\n readonly source: ResourceInput | undefined;\n}\n\n/** Structural equality for resource inputs (reference identity is not stable). */\nconst isSameResourceInput = (a: ResourceInput | undefined, b: ResourceInput | undefined): boolean => {\n if (a === undefined || b === undefined) {\n return a === b;\n }\n if (a.kind !== b.kind) {\n return false;\n }\n if (a.kind === \"file\" && b.kind === \"file\") {\n return a.path === b.path;\n }\n if (a.kind === \"http\" && b.kind === \"http\") {\n return a.url === b.url;\n }\n if (a.kind === \"data\" && b.kind === \"data\") {\n return a.dataUrl === b.dataUrl;\n }\n if (a.kind === \"bytes\" && b.kind === \"bytes\") {\n return a.bytes === b.bytes && a.name === b.name;\n }\n return false;\n};\n\nexport interface DesiredState {\n readonly config: CreateConfigV1;\n /** App icon source input; undefined → glyph fallback. */\n readonly appIconSource: ResourceInput | undefined;\n /** Tray icon source input; undefined follows the app icon. */\n readonly trayIconSource: ResourceInput | undefined;\n}\n\nexport type PlanEffect =\n | { readonly type: \"create-registration\"; readonly dir: string }\n | { readonly type: \"commit-config\"; readonly path: string }\n | { readonly type: \"import-resource\"; readonly role: \"appIcon\" | \"trayIcon\"; readonly filename: string }\n | { readonly type: \"replace-payload\"; readonly dir: string; readonly retainedPaths: readonly string[] }\n | { readonly type: \"link-payload\"; readonly link: string; readonly target: string }\n | { readonly type: \"install-dependencies\" }\n | { readonly type: \"stop-running\"; readonly pid: number }\n | { readonly type: \"warning\"; readonly message: string };\n\nexport interface LifecyclePlan {\n readonly effects: readonly PlanEffect[];\n readonly warnings: readonly string[];\n /** Registration paths the plan touches. */\n readonly registrationDir: string;\n readonly appId: string;\n /** True when an existing verified payload will be replaced. */\n readonly replacesExisting: boolean;\n /** Non-empty env overlay → adapters must collect acknowledgement. */\n readonly requiresEnvAcknowledgement: boolean;\n /** True when a verified running process blocks apply without stop-running. */\n readonly blockedByRunningProcess: { readonly pid: number } | undefined;\n}\n\nexport interface PlanOptions {\n readonly desired: DesiredState;\n /** Apply-time controls; never persisted. */\n readonly force?: boolean;\n readonly stopRunning?: boolean;\n readonly skipInstall?: boolean;\n /** External payload target: `app/` becomes a directory link. */\n readonly externalPayloadDir?: string;\n readonly homeDir?: string;\n}\n\nconst listFiles = async (dir: string): Promise<readonly string[]> => {\n try {\n return await readdir(dir);\n } catch {\n return [];\n }\n};\n\nconst isDirectoryOccupied = async (dir: string): Promise<boolean> => {\n const entries = await listFiles(dir);\n const ignorable = new Set([\".DS_Store\", \"Thumbs.db\"]);\n return entries.some((entry) => !ignorable.has(entry));\n};\n\n/** Verified create-opentray ownership: v1 config + immutable identity match. */\nconst verifyOwnership = async (\n dir: string,\n expectedAppId: string,\n homeDir: string | undefined,\n): Promise<{ verified: boolean; record?: RegistrationRecord; reason?: string }> => {\n const record = await readRegistrationRecord(registrationKey(expectedAppId), dir);\n if (record.config === undefined) {\n return { verified: false, record, reason: record.error?.message ?? \"no readable v1 configuration\" };\n }\n if (record.config.appId !== expectedAppId) {\n return { verified: false, record, reason: `identity mismatch: registration holds ${record.config.appId}, plan targets ${expectedAppId}` };\n }\n return { verified: true, record };\n};\n\n/** Plan the effects for a desired state. Pure read; performs no mutation. */\nexport const planCreate = async (options: PlanOptions): Promise<Result<LifecyclePlan>> => {\n const { desired } = options;\n const home = options.homeDir ?? homedir();\n const paths = registrationPaths(desired.config.appId, home);\n const effects: PlanEffect[] = [];\n const warnings: string[] = [];\n\n // Existing registration?\n const exists = await lstat(paths.dir).then(\n (info) => info.isDirectory(),\n () => false,\n );\n let replacesExisting = false;\n if (exists) {\n const occupied = await isDirectoryOccupied(paths.dir);\n const ownership = await verifyOwnership(paths.dir, desired.config.appId, home);\n if (!ownership.verified) {\n if (!options.force) {\n return err(\n \"ownership_unverified\",\n `target registration ${paths.dir} exists but is not a verified create-opentray v1 registration (${ownership.reason ?? \"unknown\"})`,\n { dir: paths.dir },\n );\n }\n // Force may only replace VERIFIED ownership; an unknown non-empty\n // directory can never be adopted or cleared.\n if (occupied) {\n return err(\n \"ownership_unverified\",\n `force cannot adopt a non-empty directory without a matching v1 registration: ${paths.dir}`,\n { dir: paths.dir },\n );\n }\n warnings.push(`existing directory ${paths.dir} is not a v1 registration but is empty; claiming it`);\n } else if (ownership.record!.status === \"broken-link\" || ownership.record!.status === \"missing-payload\") {\n warnings.push(`existing registration payload is unhealthy (${ownership.record!.status}); regenerating`);\n replacesExisting = true;\n } else {\n replacesExisting = true;\n }\n }\n\n // Identity immutability: an edit cannot migrate appId (checked above via\n // verifyOwnership mismatch), and healthy registrations carry the same key.\n\n // Running-process conservation.\n let blockedByRunningProcess: { readonly pid: number } | undefined;\n const runtime = await readRuntimeRecord(paths.dir);\n if (runtime !== undefined) {\n const state = await inspectProcess(runtime.pid, runtime.startedAt);\n if (state === \"live\" || state === \"unverified\") {\n if (options.stopRunning !== true) {\n blockedByRunningProcess = { pid: runtime.pid };\n } else {\n effects.push({ type: \"stop-running\", pid: runtime.pid });\n }\n } else if (state === \"reused\") {\n warnings.push(\n `recorded pid ${runtime.pid} was reused by an unrelated process; the stale record will be cleared, nothing will be terminated`,\n );\n }\n }\n\n // Resource imports.\n if (desired.appIconSource !== undefined) {\n effects.push({ type: \"import-resource\", role: \"appIcon\", filename: \"app-icon\" });\n }\n if (\n desired.trayIconSource !== undefined &&\n !isSameResourceInput(desired.trayIconSource, desired.appIconSource)\n ) {\n effects.push({ type: \"import-resource\", role: \"trayIcon\", filename: \"tray-icon\" });\n }\n effects.push({ type: \"commit-config\", path: paths.configPath });\n\n // Payload: external link or managed regeneration.\n if (options.externalPayloadDir !== undefined) {\n const target = resolve(options.externalPayloadDir);\n const targetStat = await lstat(target).then(\n (info) => info,\n () => null,\n );\n if (targetStat === null || !targetStat.isDirectory()) {\n return err(\"not_found\", `external payload target is not a directory: ${target}`, { target });\n }\n effects.push({ type: \"link-payload\", link: paths.appDir, target });\n } else {\n // Retained registration resources survive payload replacement.\n const retained = [\n CONFIG_FILENAME,\n ...((desired.appIconSource !== undefined ? [\"app-icon\"] : []) as string[]),\n ...((desired.trayIconSource !== undefined &&\n !isSameResourceInput(desired.trayIconSource, desired.appIconSource)\n ? [\"tray-icon\"]\n : []) as string[]),\n \"runtime.json\",\n ];\n const existingEntries = await listFiles(paths.appDir);\n const retainedPaths = existingEntries.filter((entry) => !retained.includes(entry));\n if (retainedPaths.length > 0) {\n effects.push({ type: \"replace-payload\", dir: paths.appDir, retainedPaths });\n }\n }\n\n if (!exists) {\n effects.unshift({ type: \"create-registration\", dir: paths.dir });\n }\n if (options.skipInstall !== true) {\n effects.push({ type: \"install-dependencies\" });\n }\n\n const envCount = Object.keys(desired.config.command?.env ?? {}).length;\n return ok({\n effects,\n warnings,\n registrationDir: paths.dir,\n appId: desired.config.appId,\n replacesExisting,\n requiresEnvAcknowledgement: envCount > 0,\n blockedByRunningProcess,\n });\n};\n\nexport interface ApplyOptions extends PlanOptions {\n readonly log?: (message: string) => void;\n readonly materializeContext?: Partial<MaterializeContext>;\n /** Range written into the generated app's package.json. */\n readonly dependencyRange: string;\n /** Adapter-owned prebuilt shell UI assets (copied into app-shell/). */\n readonly shellAssetsDir?: string;\n /** opentray package-manager helper reused by adapters. */\n readonly detectPackageManager?: (files: readonly string[], userAgent: string | undefined) => \"npm\" | \"pnpm\" | \"bun\";\n}\n\nexport interface ApplyResult {\n readonly registrationDir: string;\n readonly payloadDir: string;\n readonly isLink: boolean;\n readonly materialize: MaterializeResult | undefined;\n readonly warnings: readonly string[];\n /** Env values are never echoed here. */\n}\n\nconst buildMaterializeInput = (\n desired: DesiredState,\n options: ApplyOptions,\n config: CreateConfigV1,\n iconPaths: { appIcon?: string; trayIcon?: string },\n): MaterializeInput => ({\n config: {\n schemaVersion: 1,\n appId: config.appId,\n appName: config.appName,\n // Scaffold config persists the source projection of the v1 document: the\n // launch vector for command apps (executable/args/cwd/env share the same\n // names), or the URL for URL apps (add-create-url-apps D1/D2).\n ...(config.command === undefined\n ? {}\n : {\n command: {\n command: config.command.executable,\n args: config.command.args,\n cwd: config.command.cwd,\n ...(config.command.env === undefined ? {} : { env: config.command.env }),\n },\n }),\n ...(config.url === undefined ? {} : { url: config.url }),\n service: { port: 0 },\n window: config.window,\n ...(config.developerMode === true ? { developerMode: true } : {}),\n },\n targetDir: registrationPaths(config.appId, options.homeDir).appDir,\n dependencyRange: options.dependencyRange,\n iconSourcePath: iconPaths.appIcon,\n ...(iconPaths.trayIcon === undefined ? {} : { trayIconSourcePath: iconPaths.trayIcon }),\n ...(config.icons.trayTemplate === true ? { trayIconIsSolid: true } : {}),\n iconBackground: config.icons.background,\n iconScale: config.icons.scale,\n ...(config.icons.imageSmoothingEnabled === false ? { imageSmoothingEnabled: false } : {}),\n packageManager: config.packageManager,\n skipInstall: options.skipInstall === true,\n force: true, // ownership was verified during plan\n});\n\n/**\n * Apply a desired state. Revalidates the plan's preconditions immediately\n * before mutation, so a stale plan cannot clear a directory whose ownership\n * changed between plan and apply.\n */\nexport const applyCreate = async (options: ApplyOptions): Promise<Result<ApplyResult>> => {\n const plan = await planCreate(options);\n if (!plan.ok) {\n return plan;\n }\n if (plan.value.blockedByRunningProcess !== undefined) {\n return err(\n \"app_running\",\n `application is running (pid ${plan.value.blockedByRunningProcess.pid}); stop it or authorize stop-running`,\n { pid: plan.value.blockedByRunningProcess.pid },\n );\n }\n const log = options.log ?? ((): void => undefined);\n const home = options.homeDir ?? homedir();\n const paths = registrationPaths(options.desired.config.appId, home);\n\n // ---- Phase 1: registration envelope (physical, never linked). ----\n await mkdir(paths.dir, { recursive: true });\n\n // Stop the verified running process when authorized.\n for (const effect of plan.value.effects) {\n if (effect.type === \"stop-running\") {\n log(`stopping verified running application (pid ${effect.pid})`);\n const killed = await killProcessTree(effect.pid);\n if (!killed.ok) {\n return killed;\n }\n await clearRuntimeRecord(paths.dir);\n }\n }\n\n // ---- Phase 2: resource snapshots (transactional, hash-verified). ----\n const iconPaths: { appIcon?: string; trayIcon?: string } = {};\n let appIconRef: IconResourceRef | undefined;\n let trayIconRef: IconResourceRef | undefined;\n if (options.desired.appIconSource !== undefined) {\n const imported = await importResource(options.desired.appIconSource, {\n registrationDir: paths.dir,\n filename: \"app-icon\",\n });\n if (!imported.ok) {\n return imported;\n }\n appIconRef = imported.value.ref;\n iconPaths.appIcon = join(paths.dir, imported.value.ref.path);\n log(`app icon snapshot: ${imported.value.ref.path}${imported.value.reused ? \" (reused)\" : \"\"}`);\n }\n if (options.desired.trayIconSource !== undefined) {\n if (\n isSameResourceInput(options.desired.trayIconSource, options.desired.appIconSource) &&\n appIconRef !== undefined\n ) {\n trayIconRef = appIconRef; // explicit follow: no second mutable copy\n iconPaths.trayIcon = join(paths.dir, appIconRef.path);\n } else {\n const imported = await importResource(options.desired.trayIconSource, {\n registrationDir: paths.dir,\n filename: \"tray-icon\",\n });\n if (!imported.ok) {\n return imported;\n }\n trayIconRef = imported.value.ref;\n iconPaths.trayIcon = join(paths.dir, imported.value.ref.path);\n }\n }\n\n // ---- Phase 3: commit the v1 authority LAST-in-envelope (payload may\n // still fail; a committed config without payload is recoverable state). ----\n const finalConfig: CreateConfigV1 = {\n ...options.desired.config,\n icons: {\n ...options.desired.config.icons,\n ...(appIconRef === undefined ? {} : { appIcon: appIconRef }),\n ...(trayIconRef === undefined ? {} : { trayIcon: trayIconRef }),\n },\n };\n const configTemp = `${paths.configPath}.tmp`;\n await writeFile(configTemp, serializeCreateConfig(finalConfig), \"utf8\");\n await rename(configTemp, paths.configPath);\n\n // ---- Phase 4: payload — external link or managed regeneration. ----\n let isLink = false;\n let materializeResult: MaterializeResult | undefined;\n if (options.externalPayloadDir !== undefined) {\n const target = resolve(options.externalPayloadDir);\n const linked = await createDirectoryLink(paths.appDir, target);\n if (!linked.ok) {\n return linked;\n }\n isLink = true;\n log(`payload linked to external target: ${target}`);\n } else {\n // Managed regeneration into a sibling staging directory, then an atomic\n // swap: a failed apply leaves the prior payload usable.\n const stagingDir = join(dirname(paths.appDir), `${paths.key}.staging`);\n await rm(stagingDir, { recursive: true, force: true });\n const input = buildMaterializeInput(options.desired, options, finalConfig, iconPaths);\n const context: MaterializeContext = {\n log: (event) => log(event.message),\n ...(options.shellAssetsDir === undefined ? {} : {}),\n ...(options.materializeContext ?? {}),\n };\n const payload = await materializePayload(\n { ...input, targetDir: stagingDir, ...(options.shellAssetsDir === undefined ? {} : { shellAssetsDir: options.shellAssetsDir }) },\n context,\n );\n // Swap: old → .old, staging → app, remove .old.\n const oldDir = `${paths.appDir}.old`;\n await rm(oldDir, { recursive: true, force: true });\n let hadOld = false;\n try {\n await lstat(paths.appDir);\n hadOld = true;\n await rename(paths.appDir, oldDir);\n } catch {\n // no existing payload\n }\n try {\n await rename(stagingDir, paths.appDir);\n } catch (error) {\n if (hadOld) {\n await rename(oldDir, paths.appDir); // roll back to the prior payload\n }\n return err(\n \"registry_io\",\n `failed to install the generated payload: ${error instanceof Error ? error.message : String(error)}`,\n { dir: paths.appDir },\n );\n }\n await rm(oldDir, { recursive: true, force: true });\n log(`payload regenerated at ${paths.appDir}`);\n // Install already ran inside the staging payload; generation is complete.\n // The command's first real run belongs to the user's first open\n // (decision D1 — no first-launch validation during apply).\n materializeResult = { scaffold: payload.scaffold, projectDir: paths.appDir };\n }\n\n return ok({\n registrationDir: paths.dir,\n payloadDir: isLink ? resolve(options.externalPayloadDir!) : paths.appDir,\n isLink,\n materialize: materializeResult,\n warnings: plan.value.warnings,\n });\n};\n\nexport interface StopOptions {\n readonly appId: string;\n readonly homeDir?: string;\n}\n\n/** Stop a verified running application; never kills by name or appId alone. */\nexport const stopRunningApp = async (\n options: StopOptions,\n): Promise<Result<{ readonly stopped: boolean; readonly pid?: number }>> => {\n const paths = registrationPaths(options.appId, options.homeDir);\n const record = await readRuntimeRecord(paths.dir);\n if (record === undefined) {\n return ok({ stopped: false });\n }\n const state = await inspectProcess(record.pid, record.startedAt);\n if (state === \"dead\") {\n await clearRuntimeRecord(paths.dir);\n return ok({ stopped: false });\n }\n if (state === \"reused\" || state === \"unverified\") {\n return err(\n \"pid_reused\",\n `refusing to terminate pid ${record.pid}: live identity could not be verified (${state})`,\n { pid: record.pid, state },\n );\n }\n const killed = await killProcessTree(record.pid);\n if (!killed.ok) {\n return killed;\n }\n await clearRuntimeRecord(paths.dir);\n return ok({ stopped: true, pid: record.pid });\n};\n\nexport interface UninstallOptions {\n readonly appId: string;\n readonly homeDir?: string;\n /** Explicitly authorize stopping a verified running app first. */\n readonly stopRunning?: boolean;\n /** Explicitly authorize deleting an EXTERNAL link target. */\n readonly purgeTarget?: boolean;\n}\n\nexport interface UninstallResult {\n readonly registrationPath: string;\n readonly payloadPath: string;\n readonly linkRemoved: boolean;\n readonly targetRetained: boolean;\n /** True when the external target was deleted under purge-target. */\n readonly targetDeleted: boolean;\n readonly manualPinCleanupHint: string;\n}\n\n/**\n * Uninstall distinguishes registration removal from target purge: a linked\n * external payload is unlinked and RETAINED unless purge-target explicitly\n * authorizes deletion after a second identity validation.\n */\nexport const uninstallApp = async (options: UninstallOptions): Promise<Result<UninstallResult>> => {\n const home = options.homeDir ?? homedir();\n const key = registrationKey(options.appId);\n const loaded = await loadRegistration(key, home);\n if (!loaded.ok) {\n return loaded;\n }\n const record = loaded.value;\n const manualPinCleanupHint =\n \"macOS Dock pins and Windows taskbar pins are user-managed; remove them manually if present.\";\n\n // Running-process conservation.\n const runtime = await readRuntimeRecord(record.dir);\n if (runtime !== undefined) {\n const state = await inspectProcess(runtime.pid, runtime.startedAt);\n if (state === \"live\" || state === \"unverified\") {\n if (options.stopRunning !== true) {\n return err(\n \"app_running\",\n `application is running (pid ${runtime.pid}); stop it or authorize stop-running`,\n { pid: runtime.pid },\n );\n }\n if (state === \"live\") {\n const killed = await killProcessTree(runtime.pid);\n if (!killed.ok) {\n return killed;\n }\n }\n await clearRuntimeRecord(record.dir);\n }\n }\n\n let linkRemoved = false;\n let targetRetained = true;\n let targetDeleted = false;\n const payloadPath = record.payloadPath ?? record.appDir;\n\n if (record.isLink && record.payloadPath !== undefined) {\n if (options.purgeTarget === true) {\n // Second identity validation immediately BEFORE any deletion.\n const recheck = await readRegistrationRecord(record.key, record.dir);\n if (recheck.payloadPath !== record.payloadPath || !recheck.isLink) {\n return err(\n \"ownership_unverified\",\n `external target changed during uninstall; refusing to purge ${record.payloadPath}`,\n );\n }\n await rm(record.payloadPath, { recursive: true, force: true });\n targetRetained = false;\n targetDeleted = true;\n }\n // Linked payload: unlink only; the external target survives by default.\n await rm(record.appDir, { force: true });\n linkRemoved = true;\n }\n\n // Remove the registration envelope (config, snapshots, runtime record).\n await rm(record.dir, { recursive: true, force: true });\n\n return ok({\n registrationPath: record.dir,\n payloadPath,\n linkRemoved,\n targetRetained,\n targetDeleted,\n manualPinCleanupHint,\n });\n};\n","// Adapter-neutral command/script export (openspec change\n// unify-create-opentray-core).\n//\n// Export serializes the EXACT argv command vector plus every create option\n// with shell-appropriate quoting. It never translates the meaning of an\n// explicitly selected shell; POSIX sh scripts use LF and single-quote\n// escaping, PowerShell scripts use CRLF and native quoting. Uploaded\n// resources embed as heredocs/base64 so script export is self-contained,\n// while direct command copy defaults to file export and requires an explicit\n// force-copy choice. Environment risk uses NO heuristics: any non-empty env\n// overlay sets an acknowledgement requirement, and values are never echoed.\n\nimport type { CreateConfigV1, IconResourceRef } from \"./config\";\nimport type { Result } from \"./errors\";\nimport { ok } from \"./errors\";\n\nexport type ExportShell = \"sh\" | \"powershell\";\n\nexport interface ExportPlanInput {\n readonly config: CreateConfigV1;\n /** Resource bytes to embed (uploads without a stable external path/URL). */\n readonly embeddedResources?: readonly EmbeddedResource[];\n /** Adapter recorded an explicit force-copy choice for direct command copy. */\n readonly forceCopy?: boolean;\n}\n\nexport interface EmbeddedResource {\n /** CLI flag the bytes feed, e.g. \"app-icon\". */\n readonly flag: string;\n readonly filename: string;\n readonly bytes: Uint8Array;\n}\n\nexport interface ExportPlan {\n /**\n * Direct command copy availability. `null` means uploaded bytes are\n * present without an explicit force-copy choice: script export is the\n * default and direct copy requires the recorded override.\n */\n readonly directCommand: { readonly command: readonly string[]; readonly forced: boolean } | null;\n readonly directCommandBlockedReason: string | undefined;\n /** Non-empty env overlay → adapter must collect acknowledgement first. */\n readonly requiresEnvAcknowledgement: boolean;\n}\n\n/** Invocation prefix: npx makes the shared command runnable everywhere. */\nexport const EXPORT_COMMAND_PREFIX = [\"npx\", \"create-opentray\", \"create\"] as const;\n\n/** POSIX single-quote escaping: '…' → '\\'' inside a single-quoted string. */\nexport const quotePosix = (value: string): string =>\n `'${value.replaceAll(\"'\", `'\\\\''`)}'`;\n\n/**\n * Words that need NO quoting in POSIX sh: no globbing (`*?[`), field\n * splitting (whitespace), or expansion (`$`/backtick) metacharacters.\n */\nconst POSIX_BARE_TOKEN = /^[A-Za-z0-9_@%+=:,./-]+$/;\n\n/** On-demand POSIX quoting: bare-safe words stay unquoted. */\nexport const bareOrQuotePosix = (value: string): string =>\n POSIX_BARE_TOKEN.test(value) ? value : quotePosix(value);\n\n/** Render an argv vector as a copy-paste-safe POSIX command line. */\nexport const formatPosixCommandLine = (tokens: readonly string[]): string =>\n tokens.map(bareOrQuotePosix).join(\" \");\n\n/**\n * PowerShell native quoting. A bare word needs no quotes; anything else uses\n * single quotes with doubled internal quotes (the only escape PowerShell\n * single-quoted strings support).\n */\nexport const quotePowerShell = (value: string): string => {\n if (value.length === 0) {\n return \"''\";\n }\n // `@` is deliberately NOT bare-word safe: a leading @name is PowerShell\n // splatting syntax and changes the argument's meaning entirely.\n if (/^[A-Za-z0-9_%+=:,./-]+$/.test(value)) {\n return value;\n }\n return `'${value.replaceAll(\"'\", \"''\")}'`;\n};\n\nconst base64 = (bytes: Uint8Array): string => Buffer.from(bytes).toString(\"base64\");\n\nconst toCliFlags = (config: CreateConfigV1): readonly string[] => {\n const flags: string[] = [\n \"--app-id\",\n config.appId,\n \"--app-name\",\n config.appName,\n ];\n // Source serialization (add-create-url-apps D6): a URL app carries --url and\n // no command flags; a command app carries the exact argv vector.\n if (config.url !== undefined) {\n flags.push(\"--url\", config.url);\n } else if (config.command !== undefined) {\n flags.push(\n \"--exec\",\n config.command.executable,\n ...config.command.args.flatMap((arg) => [\"--arg\", arg]),\n \"--cwd\",\n config.command.cwd,\n );\n for (const [key, value] of Object.entries(config.command.env ?? {})) {\n flags.push(\"--env\", `${key}=${value}`);\n }\n }\n flags.push(\"--pm\", config.packageManager);\n if (config.icons.appIcon !== undefined) {\n flags.push(\"--app-icon\", config.icons.appIcon.source.ref);\n }\n if (config.icons.trayIcon !== undefined) {\n flags.push(\"--tray-icon\", config.icons.trayIcon.source.ref);\n }\n if (!config.icons.imageSmoothingEnabled) {\n flags.push(\"--no-image-smoothing\");\n }\n if (config.icons.background !== \"transparent\") {\n flags.push(\"--icon-background\", config.icons.background);\n }\n if (config.icons.scale !== 0.8) {\n flags.push(\"--icon-scale\", String(config.icons.scale));\n }\n if (config.icons.trayTemplate === true) {\n flags.push(\"--tray-template\");\n }\n if (config.developerMode) {\n flags.push(\"--developer-mode\");\n }\n if (config.window.width !== 1_200 || config.window.height !== 800) {\n flags.push(\"--window\", `${config.window.width}x${config.window.height}`);\n }\n // Window behavior facts (D12/D13): serialize only deviations from defaults.\n if (config.window.toolbar === true) {\n flags.push(\"--toolbar\");\n }\n if (config.window.titleFollowsDocument === false) {\n flags.push(\"--no-title-follow\");\n }\n if (config.window.iconFollowsDocument === true) {\n flags.push(\"--icon-follow\");\n }\n return flags;\n};\n\n/** Build the export plan. Env acknowledgement is computed WITHOUT heuristics. */\nexport const buildExportPlan = (input: ExportPlanInput): Result<ExportPlan> => {\n const envEntries = Object.entries(input.config.command?.env ?? {});\n const requiresEnvAcknowledgement = envEntries.length > 0;\n const hasEmbedded = (input.embeddedResources ?? []).length > 0;\n\n if (hasEmbedded && input.forceCopy !== true) {\n return ok({\n directCommand: null,\n directCommandBlockedReason:\n \"uploaded icon bytes have no stable external path; direct command copy would embed very long data — script export is the default, and direct copy requires an explicit force-copy choice\",\n requiresEnvAcknowledgement,\n });\n }\n\n // Direct command copy: exact argv vector, embedded bytes as data URLs.\n const command: string[] = [...EXPORT_COMMAND_PREFIX, ...toCliFlags(input.config)];\n for (const resource of input.embeddedResources ?? []) {\n command.push(`--${resource.flag}`, `data:image/png;base64,${base64(resource.bytes)}`);\n }\n return ok({\n directCommand: { command, forced: input.forceCopy === true },\n directCommandBlockedReason: undefined,\n requiresEnvAcknowledgement,\n });\n};\n\nconst scriptHeader = (shell: ExportShell): string =>\n shell === \"sh\"\n ? [\n \"#!/bin/sh\",\n \"# Generated by create-opentray export. Exact argv vector; no shell reinterpretation.\",\n \"set -eu\",\n \"\",\n ].join(\"\\n\")\n : [\n \"# Generated by create-opentray export. Exact argv vector; no shell reinterpretation.\",\n \"$ErrorActionPreference = 'Stop'\",\n \"\",\n ].join(\"\\n\");\n\nconst writeTempFileSh = (varName: string, name: string, bytes: Uint8Array): string =>\n [\n `${varName}=\"\\$(mktemp -t ${name}.XXXXXX)\"`,\n `printf '%s' '${base64(bytes)}' | base64 -d > \"\\$${varName}\"`,\n ].join(\"\\n\");\n\nconst writeTempFilePwsh = (varName: string, name: string, bytes: Uint8Array): string =>\n [\n `$${varName} = Join-Path ([System.IO.Path]::GetTempPath()) '${name}.png'`,\n `[System.IO.File]::WriteAllBytes($${varName}, [System.Convert]::FromBase64String('${base64(bytes)}'))`,\n ].join(\"\\n\");\n\nconst safeName = (name: string): string => name.replace(/[^\\w.-]/gu, \"_\");\n\n/** Serialize a complete self-contained script for the target shell. */\nexport const buildScriptExport = (\n input: ExportPlanInput,\n shell: ExportShell,\n): Result<{\n readonly filename: string;\n readonly content: string;\n /** The core invocation line alone (no comments/scaffolding) for copy actions. */\n readonly commandLine: string;\n readonly requiresEnvAcknowledgement: boolean;\n}> => {\n const envEntries = Object.entries(input.config.command?.env ?? {});\n const requiresEnvAcknowledgement = envEntries.length > 0;\n const lines: string[] = [scriptHeader(shell)];\n\n // Embedded resources reconstruct validated temp files BEFORE invocation.\n // Each embedded flag gets its own temp variable (never a shared one).\n const flagValues = new Map<string, string>();\n for (const resource of input.embeddedResources ?? []) {\n const varName = `${resource.flag.replaceAll(\"-\", \"_\")}_tmp`;\n if (shell === \"sh\") {\n lines.push(writeTempFileSh(varName, safeName(resource.filename), resource.bytes));\n flagValues.set(resource.flag, `\"\\$${varName}\"`);\n } else {\n lines.push(writeTempFilePwsh(varName, safeName(resource.filename), resource.bytes));\n flagValues.set(resource.flag, `$${varName}`);\n }\n }\n\n // Token-level command assembly with ON-DEMAND quoting: bare-safe words\n // (npx, flags, plain paths, KEY=VALUE) stay unquoted; only tokens with\n // shell metacharacters get quoted. Dynamic temp-var tokens are emitted\n // AS-IS so the shell expands them — blanket quoting previously froze\n // \"$app_icon_tmp\" into a literal string and broke embedded icons.\n const rendered: string[] = [];\n const quoteToken = (value: string): string =>\n shell === \"sh\" ? bareOrQuotePosix(value) : quotePowerShell(value);\n rendered.push(...[\"npx\", \"create-opentray\", \"create\"].map(quoteToken));\n const flags = toCliFlags(input.config);\n for (let i = 0; i < flags.length; i += 1) {\n const flag = flags[i]!;\n const booleanFlags = new Set([\n \"--no-image-smoothing\",\n \"--tray-template\",\n \"--developer-mode\",\n ]);\n if (booleanFlags.has(flag)) {\n rendered.push(flag);\n continue;\n }\n const value = flags[i + 1] ?? \"\";\n i += 1;\n if (flag === \"--app-icon\" && flagValues.has(\"app-icon\")) {\n rendered.push(flag, flagValues.get(\"app-icon\")!); // dynamic var token\n continue;\n }\n if (flag === \"--tray-icon\" && flagValues.has(\"tray-icon\")) {\n rendered.push(flag, flagValues.get(\"tray-icon\")!); // dynamic var token\n continue;\n }\n rendered.push(quoteToken(flag), quoteToken(value));\n }\n\n const commandLine = rendered.join(\" \");\n lines.push(commandLine);\n lines.push(\"\");\n\n // POSIX scripts use LF; PowerShell scripts use CRLF deterministically.\n // POSIX scripts use LF; PowerShell scripts use CRLF deterministically\n // (normalize first so no helper-embedded LF can leak through).\n const content =\n shell === \"sh\"\n ? lines.join(\"\\n\")\n : lines.join(\"\\n\").replaceAll(\"\\r\\n\", \"\\n\").replaceAll(\"\\n\", \"\\r\\n\");\n return ok({\n filename: shell === \"sh\" ? \"create-opentray.sh\" : \"create-opentray.ps1\",\n content,\n commandLine,\n requiresEnvAcknowledgement,\n });\n};\n\nexport interface ExportReview {\n /** Every env entry, editable by the adapter before acknowledgement. */\n readonly envEntries: readonly { readonly key: string; readonly value: string }[];\n readonly requiresAcknowledgement: boolean;\n}\n\n/** Present env entries for review. No classification of any name/value. */\nexport const reviewEnvironment = (config: CreateConfigV1): ExportReview => {\n const envEntries = Object.entries(config.command?.env ?? {}).map(([key, value]) => ({ key, value }));\n return {\n envEntries,\n requiresAcknowledgement: envEntries.length > 0,\n };\n};\n\n/** Re-export helper for adapters that carry refs, not raw bytes. */\nexport const embeddedFromRef = (\n flag: string,\n ref: IconResourceRef,\n bytes: Uint8Array,\n): EmbeddedResource => ({\n flag,\n filename: ref.path.split(\"/\").pop() ?? \"icon.png\",\n bytes,\n});\n","// Orthogonal intents (maintained 2026-07-22; original user request: the WebUI\n// wizard collects OpenTray's required parameters while scraping only assists):\n// 1. Own the wizard state machine: idle → running → discovered → frozen →\n// materializing → success/failed.\n// 2. Keep scrapes from overwriting user-edited fields, and freeze the form at\n// confirmation so no later poll can mutate it.\n// 3. Coordinate preview run, discovery polling, scrape polling, and teardown.\n\nimport { createHash } from \"node:crypto\";\nimport { mkdtemp, readFile, realpath, stat, writeFile } from \"node:fs/promises\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { basename, join, resolve } from \"node:path\";\nimport { deriveUrlIdentity, scrapeUrl, toProjectDirectoryName } from \"@create-opentray/core\";\nimport type { FamilyFormState } from \"@create-opentray/core\";\nimport {\n deriveFamily,\n parseCommandTokens,\n} from \"@create-opentray/core\";\nimport {\n startCommandRun,\n type CommandRun,\n type CommandRunEvent,\n} from \"@create-opentray/core\";\nimport {\n collectProcessTreePids,\n createPortDiscovery,\n listListeningPorts,\n type DiscoveredService,\n} from \"@create-opentray/core\";\nimport {\n autoBackground,\n compositionCacheKey,\n composeAppIcon,\n foregroundStats,\n} from \"@create-opentray/core\";\nimport {\n scrapeService,\n writeGlyphIconTemp,\n renderSolidSilhouette,\n SOLID_SIZE,\n type ScrapedIcon,\n} from \"@create-opentray/core\";\nimport { tokenizeCommandLine } from \"@create-opentray/core\";\nimport {\n buildExportPlan,\n buildScriptExport,\n detectImageFormat,\n formatPosixCommandLine,\n type CreateConfigV1,\n type EmbeddedResource,\n type IconResourceRef,\n} from \"@create-opentray/core\";\nimport {\n detectPackageManager,\n materialize,\n type MaterializeContext,\n type MaterializeResult,\n} from \"@create-opentray/core\";\nimport type { LaunchVector } from \"@create-opentray/core\";\nimport { resolveLaunchVector } from \"@create-opentray/core\";\nimport { resolveOnPath } from \"@create-opentray/core\";\nimport { pinningHint } from \"@create-opentray/core\";\n\nexport interface WizardEnvEntry {\n readonly key: string;\n readonly value: string;\n}\n\n/** App-icon composition (owner round-12): foreground over black/white/\n * transparent background; the wizard derives the auto suggestion. */\nexport type WizardIconBackground = \"black\" | \"white\" | \"transparent\";\n\nexport const DEFAULT_ICON_SCALE = 0.8;\n\nexport interface WizardIconComposition {\n readonly key: string;\n readonly compositePath: string;\n readonly macOSPath: string;\n readonly background: WizardIconBackground;\n}\n\nexport interface WizardIconAnalysis {\n readonly luminance: number | undefined;\n readonly coverage: number;\n readonly suggested: WizardIconBackground;\n}\n\n/** Command execution options (advanced): working directory, custom env, and\n * the input mode — array mode takes argv elements verbatim (no string\n * splitting), string mode tokenizes one command line. */\nexport interface WizardCommandOptions {\n /** Empty = the wizard's working directory. */\n readonly cwd: string;\n readonly env: readonly WizardEnvEntry[];\n readonly argsMode: \"string\" | \"array\";\n /**\n * 系列作者状态(plan.md D11 / Codex B1):显式投影是系列/appId 推导的\n * 服务端权威(Rust 的 crate/binary 无法从命令串恢复);null = 按命令串派生。\n * 命令串始终是执行/持久化向量。env 预设(npm_config_yes 等)不再有隐形\n * 注入开关——env 行是唯一可信源(R10 用户拍板)。\n */\n readonly family: FamilyFormState | null;\n}\n\nexport const DEFAULT_COMMAND_OPTIONS: WizardCommandOptions = {\n cwd: \"\",\n env: [],\n argsMode: \"string\",\n family: null,\n};\n\n/**\n * 外部输入(HTTP body / 草稿 JSON)的系列作者状态归一(D11):显式 null =\n * 清空投影回到命令派生;合法投影返回 FamilyFormState;缺失/畸形返回\n * undefined(不产生 patch)。server 白名单与 bin 草稿恢复共用,保证两个\n * 入口接受/拒绝同一集合(Codex R2 非阻塞 2)。\n */\nexport const normalizeFamilyProjection = (\n raw: unknown,\n): FamilyFormState | null | undefined => {\n if (raw === null) {\n return null;\n }\n if (typeof raw !== \"object\" || raw === null) {\n return undefined;\n }\n const projection = raw as Record<string, unknown>;\n const familyValue = projection.family;\n if (\n familyValue !== \"npm\" && familyValue !== \"go\" && familyValue !== \"rust\" &&\n familyValue !== \"python\" && familyValue !== \"dotnet\" && familyValue !== \"custom\"\n ) {\n return undefined;\n }\n const str = (value: unknown): string => (typeof value === \"string\" ? value : \"\");\n return {\n family: familyValue,\n runner: str(projection.runner),\n runnerFlags: str(projection.runnerFlags),\n pkg: str(projection.pkg),\n version: str(projection.version),\n args: str(projection.args),\n binary: str(projection.binary),\n raw: str(projection.raw),\n };\n};\n\nexport type WizardState =\n | \"idle\"\n | \"running\"\n | \"discovered\"\n | \"failed\"\n | \"frozen\"\n | \"materializing\"\n | \"success\";\n\nexport interface WizardFormValues {\n readonly appId: string;\n readonly appName: string;\n readonly iconPath: string;\n /** Icon composition (owner round-12). */\n readonly iconBackground: WizardIconBackground;\n readonly iconScale: number;\n /** Empty = follow the app icon choice (default). */\n readonly trayIconPath: string;\n readonly pm: \"npm\" | \"pnpm\" | \"bun\";\n /** Wipe an existing non-empty target directory before materializing. */\n readonly force: boolean;\n /** Advanced: render the command PTY in the generated app (default false). */\n readonly showStartupTerminal: boolean;\n /** Advanced: address-bar service tabs in the generated app (default false). */\n readonly showAddressBar: boolean;\n /** Advanced v1 sampling intent: false keeps pixel-art edges (default true). */\n readonly imageSmoothingEnabled: boolean;\n /** Advanced v1 developer mode: only WebView DevTools admission (default false). */\n readonly developerMode: boolean;\n}\n\n/** Placeholder suggestions shown in the form; empty fields resolve to these. */\nexport interface WizardFormDefaults {\n readonly appId: string;\n readonly appName: string;\n /** Resolved project directory the app will be generated into. */\n readonly targetDir: string;\n /**\n * Effective default icon source (the clearest scraped candidate). The form\n * value stays empty until the user picks/upload; composition must follow\n * this default too, or the preview would never appear without a click.\n */\n readonly iconPath: string;\n}\n\nexport type WizardEvent =\n | { readonly type: \"state\"; readonly state: WizardState; readonly reason?: string }\n | { readonly type: \"log\"; readonly stream: \"stdout\" | \"stderr\"; readonly chunk: string }\n | { readonly type: \"term-mode\"; readonly interactive: boolean; readonly message?: string }\n | { readonly type: \"run-status\"; readonly running: boolean; readonly code?: number | null }\n | { readonly type: \"command-display\"; readonly command: string }\n | {\n readonly type: \"command-options\";\n readonly options: WizardCommandOptions;\n readonly defaultCwd: string;\n }\n | {\n readonly type: \"services\";\n readonly services: readonly DiscoveredService[];\n readonly selectedPort: number | undefined;\n }\n | { readonly type: \"scrape\"; readonly port: number; readonly title?: string; readonly hasIcon: boolean }\n | {\n readonly type: \"icons\";\n readonly port: number;\n readonly icons: readonly ScrapedIcon[];\n /** Bumps on every scrape-side REPLACEMENT of the list (not appends):\n * indexes restart from zero per scrape, so clients keying per-candidate\n * work (e.g. subject extraction) need this to tell generations apart. */\n readonly generation: number;\n }\n | {\n readonly type: \"form\";\n readonly values: WizardFormValues;\n readonly defaults: WizardFormDefaults;\n readonly targetDirExists: boolean;\n }\n | { readonly type: \"materialize-log\"; readonly message: string }\n | { readonly type: \"materialize-step\"; readonly step: string; readonly message: string }\n | {\n readonly type: \"success\";\n readonly projectDir: string;\n readonly bundlePath?: string;\n readonly pinHint: string;\n }\n /** Authoritative whole-session state; sent to every NEW SSE client first. */\n | {\n readonly type: \"snapshot\";\n readonly state: WizardState;\n readonly runAlive: boolean;\n readonly command: string;\n /** URL 模式激活时的源地址(命令模式为 undefined)。 */\n readonly urlSource?: string;\n readonly commandOptions: WizardCommandOptions;\n readonly form: WizardFormValues;\n readonly defaults: WizardFormDefaults;\n readonly targetDirExists: boolean;\n readonly services: readonly DiscoveredService[];\n readonly selectedPort?: number | undefined;\n readonly iconCandidates: readonly ScrapedIcon[];\n readonly iconsPort?: number | undefined;\n /** Scrape-generation counter carried by icons events and snapshots. */\n readonly iconsGeneration: number;\n readonly interactive: boolean;\n };\n\nexport interface WizardOptions {\n readonly cwd: string;\n /**\n * USER_HOME anchor: the command-execution default cwd AND the root of the\n * default generated-project location (~/.opentray/create/<name>).\n */\n readonly homeDir?: string;\n /** Explicit project directory (CLI positional); default: the create root. */\n readonly targetDir?: string | undefined;\n readonly skipInstall: boolean;\n /** Seed the 强制覆盖 toggle (CLI --force); the form owns the live value. */\n readonly force?: boolean | undefined;\n readonly packageManager?: \"npm\" | \"pnpm\" | \"bun\";\n readonly dependencyRange: string;\n readonly emit: (event: WizardEvent) => void;\n readonly spawnRun?: typeof startCommandRun;\n readonly listListeners?: () => Promise<ReadonlySet<number>>;\n readonly verifyHttp?: (port: number) => Promise<boolean>;\n /** Test/embedding seam for listener ownership. */\n readonly listPortOwners?: () => Promise<import(\"@create-opentray/core\").ListenerOwners>;\n readonly scrape?: typeof scrapeService;\n /** Test seam for the URL-mode preset scrape. */\n readonly scrapeUrl?: typeof scrapeUrl;\n readonly resolveVector?: typeof resolveLaunchVector;\n /** Test/embedding seam for PATH resolution of the cargo-install guard. */\n readonly resolveOnPath?: typeof resolveOnPath;\n /** Test/embedding seam for the materialize pipeline. */\n readonly materializeContext?: Partial<MaterializeContext>;\n readonly platform?: NodeJS.Platform;\n readonly pollIntervalMs?: number;\n readonly scrapeIntervalMs?: number;\n}\n\nexport interface WizardSession {\n readonly state: WizardState;\n readonly services: readonly DiscoveredService[];\n readonly selectedPort: number | undefined;\n /** True while the preview process is alive (Run button shows Interrupt). */\n readonly runAlive: boolean;\n /** Latest scraped icon candidates for the selected service, ranked by clarity. */\n readonly iconCandidates: readonly ScrapedIcon[];\n /** Persist an uploaded image into the session temp dir; returns its path. */\n saveIconUpload(bytes: Buffer): Promise<string>;\n /** Candidate lookup scoped to the port it was scraped from. */\n iconCandidate(port: number, index: number): ScrapedIcon | undefined;\n /** Select a scraped candidate as the icon source (marks the field touched). */\n selectIconCandidate(port: number, index: number): boolean;\n /** Select a candidate (original or solid variant) as the TRAY icon. */\n selectTrayIconCandidate(port: number, index: number): boolean;\n /** Test/extension seam: replace the scraped candidate set for a port. */\n replaceIconCandidates(port: number, icons: readonly ScrapedIcon[]): void;\n /** Append a wizard-derived candidate (e.g. browser-side subject extraction)\n * for the port the current candidates belong to; bytes land in the\n * session-owned temp dir so icon routes keep serving them. Returns the\n * appended candidate, or undefined when the port/state rejects it. */\n addIconCandidate(\n port: number,\n candidate: {\n readonly bytes: Buffer;\n readonly variantOf: number;\n readonly width: number;\n readonly height: number;\n readonly format: string;\n },\n ): Promise<ScrapedIcon | undefined>;\n /** Compose the app icon preview/asset for the current foreground. */\n composeIcon(options: {\n foregroundPath: string;\n background?: WizardIconBackground;\n scale?: number;\n }): Promise<WizardIconComposition>;\n /** Register a composition for token-scoped byte serving (server seam). */\n trackIconComposition(composition: WizardIconComposition): void;\n /** Look up a registered composition by cache key. */\n iconComposition(key: string): WizardIconComposition | undefined;\n /** Wizard-owned icon source roots (containment for icon routes). */\n iconSourceRoots(): readonly string[];\n /** Auto-suggestion for the foreground (background + reason). */\n analyzeIconForeground(foregroundPath: string): Promise<WizardIconAnalysis>;\n readonly form: WizardFormValues;\n readonly result: MaterializeResult | undefined;\n /** Whole-session state for reconnecting clients (page refresh recovery). */\n snapshot(): WizardEvent;\n /** String form is tokenized; array form is taken as argv verbatim (array\n * input mode — no string splitting is ever applied to it). */\n submitCommand(command: string | readonly string[]): Promise<void>;\n /** URL 模式入口:地址即源(一次抓取预设,进入 discovered 可确认态);\n * 空 url 退出 URL 模式回到 idle。 */\n submitUrl(url: string): Promise<void>;\n /** Active URL-mode source address; undefined in command mode. */\n readonly urlSource: string | undefined;\n /** Derive placeholder defaults from command text without spawning anything. */\n prime(command: string | readonly string[]): void;\n readonly commandOptions: WizardCommandOptions;\n updateCommandOptions(patch: Partial<WizardCommandOptions>): void;\n selectService(port: number): void;\n updateForm(patch: Partial<WizardFormValues>): void;\n terminalInput(data: string): void;\n terminalResize(size: { cols: number; rows: number }): void;\n confirm(): void;\n /** Abort a frozen confirmation and return to the editable pre-freeze state. */\n cancel(): void;\n /**\n * Share the FROZEN parameters (wizard-share-and-list-scan D3): build an\n * export artifact from the confirmation state WITHOUT running the command\n * or materializing anything. Works pre-create. Scraped web icons keep\n * their http source URL plus the icon-generation flags by default;\n * `inlineIcon` opts into embedding the bytes instead.\n */\n exportFrozen(options: {\n readonly format: \"command\" | \"sh\" | \"ps1\";\n readonly acknowledgeEnv?: boolean;\n readonly forceCopy?: boolean;\n /** true=内嵌字节;false=按引用分享(URL/本地路径);缺省=按来源默认。 */\n readonly inlineIcon?: boolean;\n }): Promise<WizardExportResult>;\n create(): Promise<void>;\n stop(): Promise<void>;\n}\n\nexport type WizardExportResult =\n | { readonly ok: true; readonly kind: \"command\"; readonly command: string }\n | {\n readonly ok: true;\n readonly kind: \"script\";\n readonly filename: string;\n readonly content: string;\n /** 核心调用行(不含注释/脚手架),复制命令用。 */\n readonly commandLine: string;\n readonly requiresEnvAcknowledgement: boolean;\n /** How the app icon actually traveled in this artifact. */\n readonly iconSharedAs: \"url\" | \"embedded\" | \"local\" | \"none\";\n /** What the icon source CAN be shared as: url / local path / none. */\n readonly iconReference: \"url\" | \"local\" | \"none\";\n }\n | {\n readonly ok: false;\n readonly code: \"state_error\" | \"resolve_failed\" | \"env_ack_required\" | \"export_unsafe\";\n readonly message: string;\n };\n\ninterface FieldTouched {\n force: boolean;\n appId: boolean;\n appName: boolean;\n iconPath: boolean;\n iconBackground: boolean;\n iconScale: boolean;\n trayIconPath: boolean;\n pm: boolean;\n showStartupTerminal: boolean;\n showAddressBar: boolean;\n imageSmoothingEnabled: boolean;\n developerMode: boolean;\n}\n\nexport const createWizardSession = (options: WizardOptions): WizardSession => {\n let state: WizardState = \"idle\";\n let services: DiscoveredService[] = [];\n let selectedPort: number | undefined;\n let run: CommandRun | undefined;\n let discovery = createPortDiscovery({\n baseline: new Set<number>(),\n ...(options.listListeners === undefined\n ? {}\n : { listListeners: () => options.listListeners!() }),\n ...(options.verifyHttp === undefined ? {} : { verifyHttp: options.verifyHttp }),\n });\n let discoveryTimer: ReturnType<typeof setInterval> | undefined;\n let scrapeTimer: ReturnType<typeof setInterval> | undefined;\n let scraping = false;\n let tempIconDir: string | undefined;\n let currentIconPath: string | undefined;\n let currentIconUrl: string | undefined;\n let currentTrayIconPath: string | undefined;\n let currentTrayIconUrl: string | undefined;\n let trayIconIsSolid = false;\n let iconCandidates: readonly ScrapedIcon[] = [];\n let iconPort: number | undefined;\n // Scrape-generation counter: bumped whenever the candidate list is\n // REPLACED from a scrape (indexes restart at 0 each time, so identical\n // content across two scrapes is still a new generation for clients).\n let iconGeneration = 0;\n let currentTokens: readonly string[] = [];\n let currentCommand = \"\";\n // URL 模式(add-create-url-apps webui 入口):地址即源,无命令运行/端口\n // 发现;预设(title/favicon/嵌入策略)一次抓取即冻结为占位默认。\n let urlSource: string | undefined;\n let urlFrameEmbeddable: boolean | undefined;\n let scrapedTitle: string | undefined;\n let interactive = true; // optimistic until the PTY reports otherwise\n let resolvedVector: LaunchVector | undefined;\n let frozenForm: WizardFormValues | undefined;\n let resolvedServicePort: number | undefined;\n let resolvedTargetDir: string | undefined;\n let frozenIconPath: string | undefined;\n let frozenIconUrl: string | undefined;\n let frozenTrayIconUrl: string | undefined;\n let submitting = false;\n let runAlive = false;\n let commandOptions: WizardCommandOptions = { ...DEFAULT_COMMAND_OPTIONS };\n let composeIconDir: string | undefined;\n const iconCompositions = new Map<string, WizardIconComposition>();\n let iconBackground: WizardIconBackground | undefined;\n let iconScale: number | undefined;\n const touched: FieldTouched = { appId: false, appName: false, iconPath: false, iconBackground: false, iconScale: false, trayIconPath: false, pm: false, force: false, showStartupTerminal: false, showAddressBar: false, imageSmoothingEnabled: false, developerMode: false };\n let form: WizardFormValues = {\n appId: \"\",\n appName: \"\",\n iconPath: \"\",\n iconBackground: \"transparent\",\n iconScale: DEFAULT_ICON_SCALE,\n trayIconPath: \"\",\n force: options.force === true,\n showStartupTerminal: false,\n showAddressBar: false,\n imageSmoothingEnabled: true,\n developerMode: false,\n pm:\n options.packageManager ??\n detectPackageManager([], process.env.npm_config_user_agent),\n };\n let result: MaterializeResult | undefined;\n let stopped = false;\n\n const emit = options.emit;\n const setState = (next: WizardState, reason?: string): void => {\n state = next;\n emit({ type: \"state\", state: next, ...(reason === undefined ? {} : { reason }) });\n };\n\n const stopTimers = (): void => {\n if (discoveryTimer !== undefined) {\n clearInterval(discoveryTimer);\n discoveryTimer = undefined;\n }\n if (scrapeTimer !== undefined) {\n clearInterval(scrapeTimer);\n scrapeTimer = undefined;\n }\n };\n\n const publishServices = (): void => {\n emit({\n type: \"services\",\n services: [...services],\n selectedPort,\n });\n };\n\n /**\n * Placeholder defaults: scrapes and derivations update the *suggestions*,\n * never the user's values. Empty values mean \"use the default\".\n */\n const currentDefaults = (): WizardFormDefaults => {\n // URL 模式:身份来自地址文本(appId 恒地址推导),标题来自页面抓取。\n if (urlSource !== undefined) {\n const identity = deriveUrlIdentity(urlSource);\n const effectiveAppId = form.appId.trim().length > 0 ? form.appId : identity.appId;\n return {\n appId: identity.appId,\n appName: scrapedTitle ?? identity.appName,\n iconPath: currentIconPath ?? \"\",\n targetDir:\n options.targetDir ??\n join(homeDir, \".opentray\", \"create\", toProjectDirectoryName(effectiveAppId)),\n };\n }\n // 分系列默认 appId(add-create-command-family D3/D11):系列作者状态优先,\n // 否则按命令串派生;custom 命令的 deriveFamily 结果恒等于现行\n // deriveDefaultAppId 规则 —— 单一路径,旧行为对 custom 零改变。\n const family = deriveFamily(familyState());\n const effectiveAppId = form.appId.trim().length > 0 ? form.appId : family.appId;\n return {\n appId: family.appId,\n appName: scrapedTitle ?? family.appName,\n iconPath: currentIconPath ?? \"\",\n // Projects land under the OpenTray home by default (stable, idempotent\n // per app, never pollutes the invocation directory); the CLI positional\n // provides an explicit override.\n targetDir:\n options.targetDir ??\n join(homeDir, \".opentray\", \"create\", toProjectDirectoryName(effectiveAppId)),\n };\n };\n\n const publishForm = (): void => {\n emit({ type: \"form\", values: form, defaults: currentDefaults(), targetDirExists });\n };\n\n /** Track whether the resolved target directory is already occupied so the\n * UI can warn and offer the force toggle. */\n let targetDirExists = false;\n let targetDirProbe = 0;\n const refreshTargetDirExists = (): void => {\n const probe = ++targetDirProbe;\n const target = currentDefaults().targetDir;\n void (async () => {\n let occupied = false;\n try {\n const info = await stat(target);\n occupied = info.isDirectory();\n } catch {\n occupied = false;\n }\n if (probe !== targetDirProbe) return; // a newer probe owns the state\n if (occupied !== targetDirExists) {\n targetDirExists = occupied;\n publishForm();\n }\n })();\n };\n\n const scrapeOnce = async (): Promise<void> => {\n if (scraping || selectedPort === undefined || state === \"frozen\" || state === \"materializing\") {\n return;\n }\n scraping = true;\n try {\n const port = selectedPort;\n const scraped = await (options.scrape ?? scrapeService)(\n port,\n tempIconDir === undefined ? {} : { tempDir: tempIconDir },\n );\n if (selectedPort !== port) {\n return; // selection moved during scrape\n }\n const stateNow = state as WizardState;\n if (stateNow === \"frozen\" || stateNow === \"materializing\" || stateNow === \"success\") {\n return; // a confirm froze the form mid-scrape: never mutate identity\n }\n // Candidates always refresh (possibly to an empty list); the clearest\n // one remains the empty-field default.\n iconCandidates = scraped.icons;\n iconPort = port;\n iconGeneration += 1;\n currentIconPath = scraped.icons[0]?.path;\n currentIconUrl = scraped.icons[0]?.url;\n if (scraped.title !== undefined) {\n scrapedTitle = scraped.title;\n }\n emit({ type: \"icons\", port, icons: scraped.icons, generation: iconGeneration });\n emit({\n type: \"scrape\",\n port,\n ...(scraped.title === undefined ? {} : { title: scraped.title }),\n hasIcon: scraped.icons.length > 0,\n });\n publishForm();\n } finally {\n scraping = false;\n }\n };\n\n const startScrapePolling = (): void => {\n if (scrapeTimer !== undefined) {\n clearInterval(scrapeTimer);\n }\n void scrapeOnce();\n scrapeTimer = setInterval(() => {\n void scrapeOnce();\n }, options.scrapeIntervalMs ?? 1_500);\n };\n\n const selectDefaultService = (): void => {\n if (selectedPort === undefined && services.length > 0) {\n selectedPort = services[0]?.port;\n }\n if (selectedPort !== undefined && state === \"running\") {\n setState(\"discovered\");\n startScrapePolling();\n }\n };\n\n const startDiscoveryPolling = (): void => {\n if (discoveryTimer !== undefined) {\n clearInterval(discoveryTimer);\n }\n void (async () => {\n const found = await discovery.poll();\n if (found.length > 0) {\n const known = new Set(services.map((service) => service.port));\n services = [...services, ...found.filter((s) => !known.has(s.port))];\n selectDefaultService();\n publishServices();\n }\n })();\n discoveryTimer = setInterval(() => {\n void (async () => {\n const found = await discovery.poll();\n if (found.length > 0) {\n const known = new Set(services.map((service) => service.port));\n services = [...services, ...found.filter((s) => !known.has(s.port))];\n selectDefaultService();\n publishServices();\n }\n })();\n }, options.pollIntervalMs ?? 1_000);\n };\n\n /** Default command cwd is the USER_HOME directory (owner round-10 law):\n * empty input means home, and relative paths resolve against home. */\n const homeDir = options.homeDir ?? homedir();\n\n /**\n * 系列作者状态解析(D11):显式投影优先,否则按命令串派生。appId/env 预设\n * 统一走这里;执行向量始终是 currentTokens。\n */\n const familyState = (): FamilyFormState => {\n const explicit = commandOptions.family;\n return explicit !== null && explicit !== undefined\n ? explicit\n : parseCommandTokens(currentTokens);\n };\n\n const effectiveCwd = (): string => {\n const custom = commandOptions.cwd.trim();\n return custom.length > 0 ? resolve(homeDir, custom) : homeDir;\n };\n\n /** Build the env overlay from configured entries (empty keys skipped). */\n const commandEnv = (): Record<string, string> => {\n const env: Record<string, string> = {};\n for (const entry of commandOptions.env) {\n if (entry.key.trim().length > 0) {\n env[entry.key.trim()] = entry.value;\n }\n }\n // 系列环境变量预设(D4 R10):env 行是唯一可信源,无隐形注入——\n // npx/pnpx 的 npm_config_yes 由 UI 投影为 env 行的显式条目。\n return env;\n };\n\n const publishCommandOptions = (): void => {\n emit({ type: \"command-options\", options: commandOptions, defaultCwd: homeDir });\n };\n\n /** Stable dir for composed preview assets, created on demand. */\n const ensureIconComposeDir = async (): Promise<string> => {\n if (composeIconDir === undefined) {\n composeIconDir = await mkdtemp(join(tmpdir(), \"create-opentray-compose-\"));\n }\n return composeIconDir;\n };\n\n const session: WizardSession = {\n get state() {\n return state;\n },\n\n snapshot(): WizardEvent {\n return {\n type: \"snapshot\",\n state,\n runAlive,\n command: currentCommand,\n ...(urlSource === undefined ? {} : { urlSource }),\n commandOptions: { ...commandOptions, env: [...commandOptions.env] },\n form: { ...form },\n defaults: currentDefaults(),\n targetDirExists,\n services: [...services],\n ...(selectedPort === undefined ? {} : { selectedPort }),\n iconCandidates: [...iconCandidates],\n ...(iconPort === undefined ? {} : { iconsPort: iconPort }),\n iconsGeneration: iconGeneration,\n interactive,\n };\n },\n get services() {\n return services;\n },\n get selectedPort() {\n return selectedPort;\n },\n get runAlive() {\n return runAlive;\n },\n get urlSource() {\n return urlSource;\n },\n get iconCandidates() {\n return iconCandidates;\n },\n iconCandidate(port, index) {\n if (iconPort !== port) {\n return undefined;\n }\n return iconCandidates.find((icon) => icon.index === index);\n },\n replaceIconCandidates(port, icons) {\n iconPort = port;\n iconCandidates = icons;\n iconGeneration += 1;\n },\n\n async addIconCandidate(port, candidate) {\n if (state === \"frozen\" || state === \"materializing\" || state === \"success\") {\n return undefined;\n }\n // Candidates are port-scoped: a derivation from another port's scrape\n // must not leak into the current list.\n if (iconPort !== port) {\n return undefined;\n }\n const source = iconCandidates.find((icon) => icon.index === candidate.variantOf);\n if (source === undefined) {\n return undefined;\n }\n // Same containment rule as uploads: derived bytes live in the\n // session-owned temp dir the icon routes whitelist.\n const dir = tempIconDir ?? (tempIconDir = await mkdtemp(join(tmpdir(), \"create-opentray-\")));\n const name = `subject-${createHash(\"sha256\").update(candidate.bytes).digest(\"hex\").slice(0, 16)}.bin`;\n const path = join(dir, name);\n await writeFile(path, candidate.bytes);\n // Re-extraction REPLACES: a subject re-derived from the same source\n // (settings tweak / manual rerun) swaps out the prior subject AND the\n // silhouettes derived from it — never stacks duplicates.\n const priorSubject = iconCandidates.find(\n (icon) => icon.variant === \"subject\" && icon.variantOf === source.index,\n );\n const base = priorSubject === undefined\n ? iconCandidates\n : iconCandidates.filter(\n (icon) =>\n icon !== priorSubject &&\n !(icon.variantOf === priorSubject.index && icon.variant !== \"original\" && icon.variant !== \"subject\"),\n );\n let nextIndex = base.reduce((max, icon) => Math.max(max, icon.index), -1) + 1;\n const appended: ScrapedIcon = {\n index: nextIndex,\n url: source.url,\n path,\n width: candidate.width,\n height: candidate.height,\n format: candidate.format,\n variant: \"subject\",\n variantOf: source.index,\n };\n let candidates = [...base, appended];\n // D17: the AI subject's alpha mask IS the subject shape — derive the\n // tray-template silhouettes from IT (an opaque favicon's own mask is a\n // full square, which produced useless solid tiles pre-D17).\n for (const [variant, color] of [\n [\"solid-black\", { r: 0, g: 0, b: 0 }],\n [\"solid-white\", { r: 255, g: 255, b: 255 }],\n ] as const) {\n const solid = await renderSolidSilhouette(path, color);\n if (solid === undefined) {\n continue;\n }\n const solidPath = join(dir, `solid-${variant}-${createHash(\"sha256\").update(solid).digest(\"hex\").slice(0, 12)}.bin`);\n await writeFile(solidPath, solid);\n nextIndex += 1;\n candidates = [\n ...candidates,\n {\n index: nextIndex,\n url: source.url,\n path: solidPath,\n width: SOLID_SIZE,\n height: SOLID_SIZE,\n format: \"png\",\n variant,\n variantOf: appended.index,\n },\n ];\n }\n iconCandidates = candidates;\n if (priorSubject !== undefined) {\n // Thumbnail identity is (index, generation): a replacement recycles\n // the subject's index slot, so a stable generation would leave the\n // browser rendering the prior subject's bytes at the same URL.\n iconGeneration += 1;\n }\n emit({ type: \"icons\", port, icons: iconCandidates, generation: iconGeneration });\n return appended;\n },\n\n selectTrayIconCandidate(port, index) {\n if (state === \"frozen\" || state === \"materializing\" || state === \"success\") {\n return false;\n }\n const candidate = session.iconCandidate(port, index);\n if (candidate === undefined) {\n return false;\n }\n touched.trayIconPath = true;\n currentTrayIconPath = candidate.path;\n currentTrayIconUrl = candidate.url;\n trayIconIsSolid = candidate.variant === \"solid-black\" || candidate.variant === \"solid-white\";\n form = { ...form, trayIconPath: candidate.path };\n publishForm();\n return true;\n },\n\n selectIconCandidate(port, index) {\n if (state === \"frozen\" || state === \"materializing\" || state === \"success\") {\n return false;\n }\n const candidate = session.iconCandidate(port, index);\n if (candidate === undefined) {\n return false;\n }\n touched.iconPath = true;\n currentIconPath = candidate.path;\n currentIconUrl = candidate.url;\n if (!touched.trayIconPath) {\n // Default coupling: the tray follows the app icon until overridden.\n currentTrayIconPath = candidate.path;\n currentTrayIconUrl = candidate.url;\n trayIconIsSolid = candidate.variant === \"solid-black\" || candidate.variant === \"solid-white\";\n form = { ...form, iconPath: candidate.path, trayIconPath: candidate.path };\n } else {\n form = { ...form, iconPath: candidate.path };\n }\n publishForm();\n return true;\n },\n get form() {\n return form;\n },\n get result() {\n return result;\n },\n\n async submitUrl(url) {\n if (state !== \"idle\" && state !== \"failed\" && state !== \"running\" && state !== \"discovered\") {\n throw new Error(`cannot enter URL mode while ${state}`);\n }\n // 空 url:退出 URL 模式,回到可编辑 idle(命令模式表单恢复)。\n const trimmed = url.trim();\n if (trimmed.length === 0) {\n urlSource = undefined;\n urlFrameEmbeddable = undefined;\n scrapedTitle = undefined;\n iconCandidates = [];\n iconPort = undefined;\n iconGeneration += 1;\n currentIconPath = undefined;\n currentIconUrl = undefined;\n stopTimers();\n setState(\"idle\");\n publishServices();\n publishForm();\n return;\n }\n let parsed: URL;\n try {\n parsed = new URL(trimmed);\n } catch {\n setState(\"failed\", \"URL 无效:需要完整的 http(s) 地址\");\n return;\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n setState(\"failed\", \"URL 仅支持 http(s) 地址\");\n return;\n }\n // URL 模式取代命令模式:清空命令侧会话态(无预览进程可停——\n // submitUrl 只从无 run 的编辑态进入)。\n urlSource = parsed.href;\n currentTokens = [];\n currentCommand = \"\";\n services = [];\n selectedPort = undefined;\n scrapedTitle = undefined;\n // 先建立会话拥有的图标目录再抓取:候选文件必须落在 iconSourceRoots()\n // 白名单内,否则 /api/icon-analyze 与 /api/icon-compose 会以 403 拒绝\n // 该路径(命令模式在提交流程里已提前初始化,URL 模式在此补齐)。\n tempIconDir ??= await mkdtemp(join(tmpdir(), \"create-opentray-\"));\n const scraped = await (options.scrapeUrl ?? scrapeUrl)(\n parsed.href,\n tempIconDir === undefined ? {} : { tempDir: tempIconDir },\n );\n // 候选挂合成端口 0(真实服务端口恒 > 0,永不冲突)。\n iconCandidates = scraped.ok ? scraped.icons : [];\n iconPort = 0;\n iconGeneration += 1;\n currentIconPath = scraped.ok ? scraped.icons[0]?.path : undefined;\n currentIconUrl = scraped.ok ? scraped.icons[0]?.url : undefined;\n scrapedTitle = scraped.ok ? scraped.title : undefined;\n urlFrameEmbeddable = scraped.ok ? scraped.frameEmbeddable : undefined;\n stopTimers();\n setState(\"discovered\");\n emit({ type: \"icons\", port: 0, icons: iconCandidates, generation: iconGeneration });\n emit({\n type: \"scrape\",\n port: 0,\n ...(scrapedTitle === undefined ? {} : { title: scrapedTitle }),\n hasIcon: iconCandidates.length > 0,\n });\n publishServices();\n publishForm();\n },\n\n async submitCommand(command) {\n if (state !== \"idle\" && state !== \"failed\" && state !== \"running\" && state !== \"discovered\") {\n throw new Error(`cannot submit a command while ${state}`);\n }\n // Concurrent posts double-spawn: the awaits below would overwrite the\n // first run reference, orphaning it (unkillable, holding the port).\n if (submitting) {\n throw new Error(\"a command submission is already in flight\");\n }\n submitting = true;\n // Array mode: the caller supplied argv elements directly — they are\n // used verbatim and NEVER re-split. String mode: tokenize one line.\n const tokens = typeof command === \"string\" ? undefined : command;\n let tokenized: ReturnType<typeof tokenizeCommandLine> | undefined;\n if (tokens === undefined) {\n tokenized = tokenizeCommandLine(command as string);\n if (!tokenized.ok) {\n submitting = false;\n setState(\"failed\", tokenized.error);\n return;\n }\n } else if (tokens.length === 0 || tokens[0]!.trim().length === 0) {\n submitting = false;\n setState(\"failed\", \"数组模式至少需要程序元素(第一个参数)\");\n return;\n }\n // Rust 安装禁跑(D7/D11 / Codex R4-B1):`cargo install …` 绝不被向导代\n // 执行。判定取保守完备语义——只要「解析后的可执行文件」是 cargo\n // (realpath 归一、大小写不敏感、剥 .exe,覆盖 PATH 软链接别名与\n // CARGO.EXE),且 argv 中出现独立的 \"install\" token,即拒绝。Cargo 的\n // 全局带值选项(--color/--config/-C)与 rustup `+toolchain` 前缀都会\n // 推移子命令位置,逐语法解析必被绕过;宁可误拒罕见含 \"install\" 参数\n // 的其它 cargo 子命令(failed 提示指引到 Rust 表单),绝不放过安装。\n // 拒绝前移到 stop() 之前,不中断仍在存活的预览。\n const pendingTokens = tokens ?? tokenized!.tokens;\n const executableIsCargo = async (): Promise<boolean> => {\n const head = pendingTokens[0] ?? \"\";\n if (head.toLowerCase().replace(/\\.exe$/u, \"\") === \"cargo\") {\n return true;\n }\n const resolved =\n head.includes(\"/\") || head.includes(\"\\\\\")\n ? head\n : await (options.resolveOnPath ?? resolveOnPath)(head, {\n platform: options.platform ?? process.platform,\n });\n if (resolved === undefined) {\n return false; // 解析失败交给 spawn 自身的错误路径\n }\n // realpath 归一:PATH 中指向 cargo 的软链接别名(ci -> cargo)。\n const real = await realpath(resolved).catch(() => resolved);\n return basename(real).toLowerCase().replace(/\\.exe$/u, \"\") === \"cargo\";\n };\n const cargoInstallRefused =\n (await executableIsCargo()) &&\n pendingTokens.slice(1).some((token) => token === \"install\");\n if (cargoInstallRefused) {\n submitting = false;\n setState(\n \"failed\",\n \"cargo install 不会被执行:Rust crate 需先安装,请在命令系列的 Rust 表单中填写要运行的二进制\",\n );\n return;\n }\n await session.stop();\n runAlive = false;\n stopped = false;\n services = [];\n selectedPort = undefined;\n currentTokens = tokens ?? tokenized!.tokens;\n refreshTargetDirExists();\n currentIconPath = undefined;\n currentIconUrl = undefined;\n currentTrayIconPath = undefined;\n currentTrayIconUrl = undefined;\n trayIconIsSolid = false;\n iconCandidates = [];\n iconGeneration += 1;\n touched.appId = false;\n touched.appName = false;\n touched.pm = false;\n // Cross-run consistency: the client tray UI resets on every new run;\n // a stale server-side tray pick would silently win at materialize.\n touched.trayIconPath = false;\n form = {\n appId: \"\",\n appName: \"\",\n iconPath: \"\",\n iconBackground: iconBackground ?? \"transparent\",\n iconScale: iconScale ?? DEFAULT_ICON_SCALE,\n ...(touched.force ? { force: form.force } : { force: options.force === true }),\n ...(touched.trayIconPath ? { trayIconPath: form.trayIconPath } : { trayIconPath: \"\" }),\n ...(touched.showStartupTerminal ? { showStartupTerminal: form.showStartupTerminal } : { showStartupTerminal: false }),\n ...(touched.showAddressBar ? { showAddressBar: form.showAddressBar } : { showAddressBar: false }),\n ...(touched.imageSmoothingEnabled ? { imageSmoothingEnabled: form.imageSmoothingEnabled } : { imageSmoothingEnabled: true }),\n ...(touched.developerMode ? { developerMode: form.developerMode } : { developerMode: false }),\n pm:\n options.packageManager ??\n detectPackageManager([], process.env.npm_config_user_agent),\n };\n currentCommand = typeof command === \"string\" ? command : command.join(\" \");\n scrapedTitle = undefined;\n emit({ type: \"command-display\", command: currentCommand });\n tempIconDir = await mkdtemp(join(tmpdir(), \"create-opentray-\"));\n\n const listListeners =\n options.listListeners ?? (() => listListeningPorts(process.platform));\n const baseline = await listListeners().catch(() => new Set<number>());\n\n // Emit the running state before spawning so the terminal panel appears\n // the instant Run fires, ahead of any process output or probe.\n setState(\"running\");\n publishForm();\n\n const spawnRun = options.spawnRun ?? startCommandRun;\n const envOverlay = commandEnv();\n run = await spawnRun({\n tokens: currentTokens,\n cwd: effectiveCwd(),\n ...(Object.keys(envOverlay).length === 0 ? {} : { env: envOverlay }),\n onEvent: (event: CommandRunEvent) => {\n if (event.type === \"stdout\" || event.type === \"stderr\") {\n emit({\n type: \"log\",\n stream: event.type,\n chunk: event.chunk ?? \"\",\n });\n return;\n }\n if (event.type === \"pty-ready\") {\n interactive = true;\n emit({ type: \"term-mode\", interactive: true });\n return;\n }\n if (event.type === \"pty-unavailable\") {\n interactive = false;\n emit({\n type: \"term-mode\",\n interactive: false,\n ...(event.message === undefined ? {} : { message: event.message }),\n });\n return;\n }\n if (event.type === \"spawn-error\") {\n stopTimers();\n setState(\"failed\", event.message ?? \"spawn failed\");\n return;\n }\n if (event.type === \"exit\") {\n // The process died (own exit, interrupt, or external kill): stop\n // polling and tell the UI the run control can go back to Run.\n runAlive = false;\n stopTimers();\n emit({\n type: \"run-status\",\n running: false,\n ...(event.code === undefined ? {} : { code: event.code }),\n });\n if (state === \"running\" && services.length === 0) {\n setState(\n \"failed\",\n `command exited with ${event.code ?? \"signal\"} before any service appeared`,\n );\n }\n }\n },\n });\n submitting = false;\n void run.exited.then(async ({ code, spawnError }) => {\n if (state === \"running\" && services.length === 0 && spawnError !== undefined) {\n stopTimers();\n setState(\"failed\", spawnError);\n }\n void code;\n });\n\n // Discovery starts after spawn so port ownership can be resolved from\n // the live preview PID tree; foreign listeners are never adopted.\n discovery = createPortDiscovery({\n baseline,\n ...(options.listListeners === undefined\n ? {}\n : { listListeners: () => options.listListeners!() }),\n ...(options.verifyHttp === undefined ? {} : { verifyHttp: options.verifyHttp }),\n ...(options.listPortOwners === undefined\n ? {}\n : { listOwners: options.listPortOwners }),\n ...(run.pid === undefined\n ? {}\n : {\n resolveOwnerPids: () =>\n collectProcessTreePids(run?.pid ?? 0, options.platform ?? process.platform),\n }),\n });\n\n runAlive = true;\n emit({ type: \"run-status\", running: true });\n startDiscoveryPolling();\n },\n\n prime(command) {\n if (state === \"frozen\" || state === \"materializing\" || state === \"success\") {\n return;\n }\n if (typeof command !== \"string\") {\n // Array mode: argv verbatim; nothing is ever re-split.\n if (command.length === 0 || command[0]!.trim().length === 0) {\n return;\n }\n currentTokens = command;\n currentCommand = command.join(\" \");\n emit({ type: \"command-display\", command: currentCommand });\n refreshTargetDirExists();\n publishForm();\n return;\n }\n const tokenized = tokenizeCommandLine(command);\n if (!tokenized.ok) {\n return; // keep previous placeholders for empty/invalid drafts\n }\n currentTokens = tokenized.tokens;\n currentCommand = command;\n emit({ type: \"command-display\", command });\n refreshTargetDirExists();\n publishForm();\n },\n\n get commandOptions() {\n return commandOptions;\n },\n\n updateCommandOptions(patch) {\n if (state === \"frozen\" || state === \"materializing\" || state === \"success\") {\n return;\n }\n commandOptions = { ...commandOptions, ...patch };\n publishCommandOptions();\n },\n\n async analyzeIconForeground(foregroundPath) {\n // One decode serves both metrics (huge uploads must not double their\n // full-resolution buffers). A decode failure falls back consistently\n // to the WHITE suggestion — never transparent (which would silently\n // replace undecodable art with the glyph path).\n const stats = await foregroundStats(foregroundPath).catch(() => ({\n luminance: undefined,\n coverage: 0,\n }));\n return {\n ...stats,\n suggested: autoBackground(stats),\n };\n },\n\n async composeIcon(options) {\n if (state === \"frozen\" || state === \"materializing\" || state === \"success\") {\n throw new Error(\"cannot compose while frozen\");\n }\n const background = options.background ?? iconBackground ?? \"transparent\";\n const scale = options.scale ?? iconScale ?? DEFAULT_ICON_SCALE;\n const composed = await composeAppIcon({\n foregroundPath: options.foregroundPath,\n background,\n scale,\n outputDir: await ensureIconComposeDir(),\n });\n const composition: WizardIconComposition = {\n key: compositionCacheKey({\n foregroundPath: options.foregroundPath,\n background,\n scale,\n }),\n ...composed,\n };\n iconCompositions.set(composition.key, composition);\n return composition;\n },\n\n trackIconComposition(composition) {\n iconCompositions.set(composition.key, composition);\n },\n\n iconSourceRoots() {\n return [\n ...(tempIconDir !== undefined ? [tempIconDir] : []),\n ...(composeIconDir !== undefined ? [composeIconDir] : []),\n ];\n },\n\n iconComposition(key) {\n return iconCompositions.get(key);\n },\n\n async saveIconUpload(bytes) {\n const dir = tempIconDir ?? (tempIconDir = await mkdtemp(join(tmpdir(), \"create-opentray-\")));\n const name = `upload-${createHash(\"sha256\").update(bytes).digest(\"hex\").slice(0, 16)}.bin`;\n const path = join(dir, name);\n await writeFile(path, bytes);\n return path;\n },\n\n selectService(port) {\n if (state !== \"discovered\" && state !== \"running\") {\n return;\n }\n if (!services.some((service) => service.port === port)) {\n return;\n }\n selectedPort = port;\n currentIconPath = undefined;\n currentIconUrl = undefined;\n publishServices();\n if (state === \"discovered\") {\n startScrapePolling();\n }\n },\n\n updateForm(patch) {\n if (state !== \"idle\" && state !== \"running\" && state !== \"discovered\" && state !== \"failed\") {\n return; // frozen/materializing: no form mutation, composition included\n }\n if (patch.iconBackground !== undefined) {\n iconBackground = patch.iconBackground;\n }\n if (patch.iconScale !== undefined) {\n iconScale = patch.iconScale;\n }\n for (const key of Object.keys(patch) as (keyof WizardFormValues)[]) {\n if (patch[key] !== undefined && patch[key] !== form[key]) {\n touched[key] = true;\n if (key === \"trayIconPath\") {\n // Typed/unknown tray sources carry no solid provenance; a stale\n // flag from an earlier solid pick would mis-tint custom art.\n trayIconIsSolid = false;\n }\n }\n }\n form = { ...form, ...patch };\n publishForm();\n },\n\n /** Forward base64-encoded terminal keystroke bytes to the preview command. */\n terminalInput(data) {\n if (state !== \"running\" && state !== \"discovered\") {\n return;\n }\n run?.write(data);\n },\n\n /** Forward terminal dimensions to the pseudo-terminal. */\n terminalResize(size) {\n if (state !== \"running\" && state !== \"discovered\") {\n return;\n }\n run?.resize(size);\n },\n\n confirm() {\n if (state !== \"idle\" && state !== \"running\" && state !== \"discovered\" && state !== \"failed\") {\n throw new Error(`cannot confirm while ${state}`);\n }\n // Ports come exclusively from runtime sniffing: the preview's discovered\n // port is recorded as an informational hint (0 when never sniffed); the\n // generated app resolves the real address by scanning its own command\n // tree. A manual port input must not exist.\n resolvedServicePort = selectedPort ?? 0;\n // Freeze the SAME default the UI displayed (explicit override wins).\n resolvedTargetDir = currentDefaults().targetDir;\n // Empty fields resolve to their placeholder defaults.\n const defaults = currentDefaults();\n let resolvedForm: WizardFormValues = {\n ...form,\n appId: form.appId.trim().length > 0 ? form.appId : defaults.appId,\n appName: form.appName.trim().length > 0 ? form.appName : defaults.appName,\n };\n // A user-entered icon path wins over the scraped favicon.\n if (resolvedForm.iconPath.trim().length > 0) {\n currentIconPath = resolvedForm.iconPath.trim();\n currentIconUrl = undefined; // 上传/合成/本地路径没有网页来源\n }\n // The icon source materialize uses is FROZEN at confirm: the user's\n // explicit value when set, else the scraped default captured here.\n // Never the live currentIconPath, which an in-flight scrape could\n // still swap (review round: post-freeze overwrite race).\n frozenIconPath = currentIconPath;\n frozenIconUrl = currentIconUrl;\n\n // The tray icon defaults to the resolved app icon choice.\n const resolvedTrayIconPath =\n resolvedForm.trayIconPath.trim().length > 0\n ? resolvedForm.trayIconPath.trim()\n : resolvedForm.iconPath.trim().length > 0\n ? resolvedForm.iconPath.trim()\n : (currentIconPath ?? \"\");\n resolvedForm = { ...resolvedForm, trayIconPath: resolvedTrayIconPath };\n currentTrayIconPath = resolvedTrayIconPath;\n form = resolvedForm;\n stopTimers();\n frozenForm = { ...form };\n setState(\"frozen\");\n publishForm();\n },\n\n cancel() {\n if (state !== \"frozen\") {\n throw new Error(`cannot cancel while ${state}`);\n }\n // Thaw the pre-confirmation state: the frozen snapshot and resolved\n // values are discarded; editing, scrapes, and re-confirmation resume\n // from the live form. The preview process and its services were never\n // stopped by confirm(), so discovery simply continues.\n frozenForm = undefined;\n frozenIconPath = undefined;\n frozenIconUrl = undefined;\n frozenTrayIconUrl = undefined;\n resolvedServicePort = undefined;\n resolvedTargetDir = undefined;\n if (urlSource !== undefined) {\n // URL 模式无预览进程:编辑态就是 discovered(预设已就位)。\n setState(\"discovered\");\n publishForm();\n return;\n }\n setState(selectedPort === undefined ? \"running\" : \"discovered\");\n publishForm();\n // Resume the discovery/scrape polling that confirm() stopped. When no\n // preview is alive (confirm from idle/failed), timers stay stopped —\n // the editable idle form is the correct landing state there, but the\n // state machine requires one of running/discovered; running with no\n // process is the pre-run idle equivalent for UI gating.\n if (runAlive && discovery !== undefined) {\n startDiscoveryPolling();\n }\n },\n\n async exportFrozen(exportOptions) {\n // 分享基于冻结参数(D3):不跑命令、不物化任何东西。\n const frozen = frozenForm;\n if (frozen === undefined) {\n return {\n ok: false,\n code: \"state_error\",\n message: \"share requires a confirmed (frozen) parameter set\",\n };\n }\n if (urlSource === undefined && currentTokens.length === 0) {\n return { ok: false, code: \"state_error\", message: \"no command recorded\" };\n }\n let vector: LaunchVector | undefined;\n let env: Record<string, string> | undefined;\n if (urlSource === undefined) {\n try {\n vector = await (options.resolveVector ?? resolveLaunchVector)({\n tokens: currentTokens,\n cwd: effectiveCwd(),\n });\n } catch (error) {\n return {\n ok: false,\n code: \"resolve_failed\",\n message: `failed to resolve the launch vector: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n const envOverlay = commandEnv();\n env = Object.keys(envOverlay).length > 0 ? envOverlay : vector.env;\n }\n const embedded: EmbeddedResource[] = [];\n // 图标分享法则:网页抓取的图标默认保留原始 http 链接 + 生成参数\n // (--icon-background/--icon-scale/--tray-template),inlineIcon 显式\n // 开启才把字节内联为 data URI;上传/合成/本地路径没有稳定外部引用,\n // 只能内联(脚本自包含是这类来源的既定默认)。\n const iconRef = async (\n path: string | undefined,\n url: string | undefined,\n flag: \"app-icon\" | \"tray-icon\",\n ): Promise<{ ref?: IconResourceRef; mode: \"url\" | \"embedded\" | \"local\" | \"none\" }> => {\n if (path === undefined || path.trim().length === 0) {\n return { mode: \"none\" };\n }\n const hasUrl = url !== undefined && /^https?:\\/\\//u.test(url);\n // 三态:显式 true 内嵌;显式 false 按引用;缺省按来源(URL 引用、本地内嵌)。\n const inline = exportOptions.inlineIcon ?? !hasUrl;\n if (!inline) {\n if (hasUrl) {\n return {\n ref: {\n path: \"icon.png\",\n format: \"png\",\n sha256: \"\",\n source: { kind: \"http\", ref: url },\n },\n mode: \"url\",\n };\n }\n return {\n ref: {\n path: basename(path),\n format: \"png\",\n sha256: \"\",\n source: { kind: \"file\", ref: path },\n },\n mode: \"local\",\n };\n }\n try {\n const bytes = new Uint8Array(await readFile(path));\n const format = detectImageFormat(bytes);\n if (format === undefined) {\n return { mode: \"none\" };\n }\n embedded.push({ flag, filename: basename(path), bytes });\n return {\n ref: {\n path: basename(path),\n format,\n sha256: createHash(\"sha256\").update(bytes).digest(\"hex\"),\n source: { kind: \"file\", ref: path },\n },\n mode: \"embedded\",\n };\n } catch {\n return { mode: \"none\" }; // unreadable icon source degrades to the glyph default\n }\n };\n const appIconSource = frozenIconPath ?? currentIconPath;\n const appIconUrl = frozenIconUrl ?? currentIconUrl;\n const trayIconSource = currentTrayIconPath;\n const trayIconUrl = currentTrayIconUrl;\n const appIconRef = await iconRef(appIconSource, appIconUrl, \"app-icon\");\n const appIcon = appIconRef.ref;\n // 托盘默认跟随应用图标:同源托盘不重复携带(CLI 语义:省略即跟随)。\n const trayIconRef =\n trayIconSource !== undefined && trayIconSource !== appIconSource\n ? await iconRef(trayIconSource, trayIconUrl, \"tray-icon\")\n : { ref: undefined, mode: \"none\" as const };\n const trayIcon = trayIconRef.ref;\n const config: CreateConfigV1 = {\n schemaVersion: 1,\n appId: frozen.appId,\n appName: frozen.appName,\n ...(urlSource !== undefined\n ? {\n url: urlSource,\n window: {\n width: 1_200,\n height: 800,\n ...(frozen.showAddressBar === true && urlFrameEmbeddable !== false\n ? { toolbar: true }\n : {}),\n titleFollowsDocument: true,\n iconFollowsDocument: false,\n },\n }\n : {\n command: {\n executable: vector!.command,\n args: [...vector!.args],\n cwd: vector!.cwd,\n ...(env === undefined ? {} : { env }),\n },\n window: { width: 1_200, height: 800, titleFollowsDocument: true, iconFollowsDocument: false },\n }),\n packageManager: frozen.pm,\n icons: {\n imageSmoothingEnabled: frozen.imageSmoothingEnabled !== false,\n background: frozen.iconBackground ?? \"transparent\",\n scale: frozen.iconScale ?? DEFAULT_ICON_SCALE,\n ...(trayIconIsSolid === true ? { trayTemplate: true } : {}),\n ...(appIcon === undefined ? {} : { appIcon }),\n ...(trayIcon === undefined ? {} : { trayIcon }),\n },\n developerMode: frozen.developerMode === true,\n };\n const envCount = Object.keys(config.command?.env ?? {}).length;\n if (envCount > 0 && exportOptions.acknowledgeEnv !== true) {\n // 与注册导出同一条无启发式守卫,且永不回显值。\n return {\n ok: false,\n code: \"env_ack_required\",\n message: \"environment entries present; acknowledgement required\",\n };\n }\n if (exportOptions.format === \"command\") {\n const plan = buildExportPlan({\n config,\n embeddedResources: embedded,\n forceCopy: exportOptions.forceCopy === true,\n });\n if (!plan.ok) {\n return { ok: false, code: \"export_unsafe\", message: plan.error.message };\n }\n if (plan.value.directCommand === null) {\n return {\n ok: false,\n code: \"export_unsafe\",\n message: plan.value.directCommandBlockedReason ?? \"direct copy requires force-copy\",\n };\n }\n const command = formatPosixCommandLine(plan.value.directCommand.command);\n return { ok: true, kind: \"command\", command };\n }\n const script = buildScriptExport(\n { config, embeddedResources: embedded },\n exportOptions.format === \"sh\" ? \"sh\" : \"powershell\",\n );\n if (!script.ok) {\n return { ok: false, code: \"export_unsafe\", message: script.error.message };\n }\n const iconReference: \"url\" | \"local\" | \"none\" =\n appIconUrl !== undefined && /^https?:\\/\\//u.test(appIconUrl)\n ? \"url\"\n : appIconSource !== undefined && appIconSource.trim().length > 0\n ? \"local\"\n : \"none\";\n return {\n ok: true,\n kind: \"script\",\n filename: script.value.filename,\n content: script.value.content,\n commandLine: script.value.commandLine,\n requiresEnvAcknowledgement: script.value.requiresEnvAcknowledgement,\n iconSharedAs: appIconRef.mode,\n iconReference,\n };\n },\n\n async create() {\n if (state !== \"frozen\") {\n throw new Error(`cannot create while ${state}`);\n }\n const frozen = frozenForm ?? form;\n if (urlSource === undefined && currentTokens.length === 0) {\n throw new Error(\"no command recorded\");\n }\n setState(\"materializing\");\n\n // Stop the wizard's preview run: generation itself no longer re-runs the\n // command (decision D1), but the preview must not keep holding ports or\n // terminal sessions once creation is underway.\n if (run !== undefined) {\n await run.kill();\n run = undefined;\n }\n\n // URL 模式:地址即源——无命令向量需要解析;「地址栏」开关即 toolbar\n // (嵌入拒绝时自动回退直连并留下日志,同 CLI D12 语义)。\n if (urlSource !== undefined) {\n const toolbarWanted = frozen.showAddressBar === true;\n const toolbar = toolbarWanted && urlFrameEmbeddable !== false;\n if (toolbarWanted && !toolbar) {\n emit({\n type: \"materialize-log\",\n message: `warning: ${urlSource} forbids iframe embedding (X-Frame-Options / CSP frame-ancestors); the address bar falls back to the direct window`,\n });\n }\n try {\n result = await materialize(\n {\n config: {\n schemaVersion: 1,\n appId: frozen.appId,\n appName: frozen.appName,\n url: urlSource,\n service: { port: 0 },\n window: {\n width: 1_200,\n height: 800,\n ...(toolbar ? { toolbar: true } : {}),\n titleFollowsDocument: true,\n iconFollowsDocument: false,\n },\n ...(frozen.developerMode === true ? { developerMode: true } : {}),\n },\n targetDir: resolvedTargetDir ?? currentDefaults().targetDir,\n dependencyRange: options.dependencyRange,\n iconSourcePath: frozenIconPath ?? currentIconPath,\n ...(frozen.iconBackground === undefined\n ? {}\n : { iconBackground: frozen.iconBackground }),\n ...(frozen.iconScale === undefined\n ? {}\n : { iconScale: frozen.iconScale }),\n ...(currentTrayIconPath === undefined\n ? {}\n : { trayIconSourcePath: currentTrayIconPath }),\n ...(trayIconIsSolid ? { trayIconIsSolid: true } : {}),\n ...(frozen.imageSmoothingEnabled === false ? { imageSmoothingEnabled: false } : {}),\n ...(frozen.developerMode === true ? { developerMode: true } : {}),\n packageManager: frozen.pm,\n skipInstall: options.skipInstall,\n force: frozen.force,\n },\n {\n log: (event) => {\n if (event.type === \"step\") {\n emit({ type: \"materialize-step\", step: event.step, message: event.message });\n return;\n }\n emit({ type: \"materialize-log\", message: event.message });\n },\n ...(options.platform === undefined ? {} : { platform: options.platform }),\n ...(options.materializeContext ?? {}),\n },\n );\n setState(\"success\");\n emit({\n type: \"success\",\n projectDir: result.projectDir,\n pinHint: pinningHint(),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const occupied = message.includes(\"target directory is not empty\");\n setState(\n \"failed\",\n occupied\n ? `${message};可在「高级选项」中开启 强制覆盖 后重试`\n : message,\n );\n }\n return;\n }\n\n try {\n resolvedVector = await (options.resolveVector ?? resolveLaunchVector)({\n tokens: currentTokens,\n cwd: effectiveCwd(),\n });\n // Persist the configured env overlay onto the frozen vector; the\n // generated app merges it over its own environment when spawning.\n const envOverlay = commandEnv();\n if (Object.keys(envOverlay).length > 0) {\n resolvedVector = { ...resolvedVector, env: envOverlay };\n }\n } catch (error) {\n setState(\"failed\", error instanceof Error ? error.message : String(error));\n return;\n }\n\n try {\n result = await materialize(\n {\n config: {\n schemaVersion: 1,\n appId: frozen.appId,\n appName: frozen.appName,\n command: resolvedVector,\n service: { port: resolvedServicePort ?? 0 },\n window: { width: 1_200, height: 800, titleFollowsDocument: true, iconFollowsDocument: false },\n ...(frozen.developerMode === true ? { developerMode: true } : {}),\n },\n targetDir: resolvedTargetDir ?? currentDefaults().targetDir,\n dependencyRange: options.dependencyRange,\n iconSourcePath: frozenIconPath ?? currentIconPath,\n ...(frozen.iconBackground === undefined\n ? {}\n : { iconBackground: frozen.iconBackground }),\n ...(frozen.iconScale === undefined\n ? {}\n : { iconScale: frozen.iconScale }),\n ...(currentTrayIconPath === undefined\n ? {}\n : { trayIconSourcePath: currentTrayIconPath }),\n ...(trayIconIsSolid ? { trayIconIsSolid: true } : {}),\n shell: {\n showTerminal: frozen.showStartupTerminal,\n showAddressBar: frozen.showAddressBar,\n },\n ...(frozen.imageSmoothingEnabled === false ? { imageSmoothingEnabled: false } : {}),\n ...(frozen.developerMode === true ? { developerMode: true } : {}),\n packageManager: frozen.pm,\n skipInstall: options.skipInstall,\n force: frozen.force,\n },\n {\n log: (event) => {\n if (event.type === \"step\") {\n emit({ type: \"materialize-step\", step: event.step, message: event.message });\n return;\n }\n emit({ type: \"materialize-log\", message: event.message });\n },\n ...(options.platform === undefined ? {} : { platform: options.platform }),\n ...(options.materializeContext ?? {}),\n },\n );\n setState(\"success\");\n emit({\n type: \"success\",\n projectDir: result.projectDir,\n pinHint: pinningHint(),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const occupied = message.includes(\"target directory is not empty\");\n setState(\n \"failed\",\n occupied\n ? `${message};可在「高级选项」中开启 强制覆盖 后重试`\n : message,\n );\n }\n },\n\n async stop() {\n stopped = true;\n stopTimers();\n discovery.stop();\n if (run !== undefined) {\n await run.kill();\n run = undefined;\n }\n },\n };\n\n publishCommandOptions();\n\n return session;\n};\n\n/** Exposed for tests: the touched-field bookkeeping semantics. */\nexport const createFieldTouchedTracker = (): { touched: FieldTouched } => ({\n touched: { force: false, appId: false, appName: false, iconPath: false, iconBackground: false, iconScale: false, trayIconPath: false, pm: false, showStartupTerminal: false, showAddressBar: false, imageSmoothingEnabled: false, developerMode: false },\n});\n","// Workbench API endpoints (openspec change redesign-create-opentray-webui).\n//\n// Applications list / skill documents / export planning are thin Core\n// projections: this module never edits configuration, follows or deletes\n// links, kills processes, or generates application files itself. Env values\n// are never echoed into ordinary output.\n\nimport { access, readFile, readdir } from \"node:fs/promises\";\nimport { dirname, join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport {\n buildExportPlan,\n buildScriptExport,\n findCreateEntry,\n formatPosixCommandLine,\n listCreateEntries,\n openMaterializedApp,\n readResourceBytes,\n readWizardProjectIcon,\n stopRunningApp,\n uninstallApp,\n uninstallWizardProject,\n type CreateConfigV1,\n type EmbeddedResource,\n} from \"@create-opentray/core\";\n\nconst exists = async (path: string): Promise<boolean> => {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n};\n\nconst moduleDirectory = dirname(fileURLToPath(import.meta.url));\n\n/** Resolve the packaged skill root served to the WebUI help center. */\nconst resolveSkillRoot = async (): Promise<string | undefined> => {\n const candidates = [\n join(moduleDirectory, \"skill\"),\n // Source checkout: packages/create/src → ../../skill\n join(moduleDirectory, \"..\", \"..\", \"skill\"),\n // Built bundle: packages/create/dist → ./skill (staged by copy-skill.mjs)\n join(moduleDirectory, \"..\", \"skill\"),\n ];\n for (const candidate of candidates) {\n try {\n await readdir(candidate);\n return resolve(candidate);\n } catch {\n // try next\n }\n }\n return undefined;\n};\n\nconst SKILL_PATH_PATTERN = /^(?!-_)[A-Za-z0-9._-]+(?:\\/(?!_)[A-Za-z0-9._-]+)*$/u;\n\nconst containedSkillPath = (logical: string): string | undefined => {\n if (!SKILL_PATH_PATTERN.test(logical) || logical.includes(\"..\") || logical.includes(\"\\0\")) {\n return undefined;\n }\n return logical;\n};\n\nexport interface WorkbenchRequest {\n readonly method: string;\n readonly pathname: string;\n /** Parsed query parameters (GET routes read inputs from the URL). */\n readonly query: URLSearchParams;\n readonly body: Record<string, unknown>;\n}\n\nexport type WorkbenchStatus = 200 | 400 | 404 | 409 | 500;\n\nexport interface WorkbenchResponse {\n readonly status: WorkbenchStatus;\n readonly body: unknown;\n}\n\n/**\n * Handle one workbench API request. Returns undefined when the pathname is\n * not a workbench route (the caller falls through to its own handling).\n */\nexport const handleWorkbenchApi = async (\n request: WorkbenchRequest,\n): Promise<WorkbenchResponse | undefined> => {\n const { pathname } = request;\n\n if (pathname === \"/api/apps\" && request.method === \"GET\") {\n // Dual-layout discovery (wizard-share-and-list-scan D2): envelope\n // registrations AND wizard scaffold projects, unified read-only projection.\n const entries = await listCreateEntries();\n return {\n status: 200,\n body: await Promise.all(\n entries.map(async (entry) => {\n if (entry.source === \"wizard\") {\n const projectDir = entry.dir;\n return {\n key: entry.key,\n source: \"wizard\",\n appId: entry.config?.appId,\n appName: entry.config?.appName,\n status: \"healthy\",\n registrationDir: entry.dir,\n payloadPath: entry.dir,\n projectDir,\n isLink: false,\n hasEnv:\n entry.config !== undefined &&\n Object.keys(entry.config.command?.env ?? {}).length > 0,\n hasIcon: await exists(join(projectDir, \"app-icon\", \"app-icon.png\")),\n ...(entry.config === undefined\n ? { error: { code: \"invalid_config\", message: \"unreadable wizard project config\" } }\n : {}),\n };\n }\n const projectDir = entry.record.payloadPath ?? entry.record.appDir;\n return {\n key: entry.key,\n source: \"registered\",\n appId: entry.record.config?.appId,\n appName: entry.record.config?.appName,\n status: entry.record.status,\n registrationDir: entry.record.dir,\n payloadPath: entry.record.payloadPath,\n projectDir,\n isLink: entry.record.isLink,\n hasEnv:\n entry.record.config !== undefined &&\n Object.keys(entry.record.config.command?.env ?? {}).length > 0,\n hasIcon: await exists(join(projectDir, \"app-icon\", \"app-icon.png\")),\n ...(entry.record.error === undefined\n ? {}\n : { error: { code: entry.record.error.code, message: entry.record.error.message } }),\n };\n }),\n ),\n };\n }\n\n const iconMatch = /^\\/api\\/apps\\/([^/]+)\\/icon$/.exec(pathname);\n if (iconMatch !== null && request.method === \"GET\") {\n // Row icon: the project's stable composed app icon as a data URL (list\n // rows render <img src>; the workbench channel stays JSON-only).\n const key = decodeURIComponent(iconMatch[1]!);\n const entry = await findCreateEntry(key);\n if (entry === undefined) {\n return { status: 404, body: { code: \"not_found\", message: `no application at key ${key}` } };\n }\n const projectDir = entry.source === \"wizard\" ? entry.dir : entry.record.payloadPath;\n if (projectDir === undefined) {\n return { status: 404, body: { code: \"missing_payload\", message: \"application payload is unavailable\" } };\n }\n try {\n const bytes = new Uint8Array(await readFile(join(projectDir, \"app-icon\", \"app-icon.png\")));\n return {\n status: 200,\n body: { dataUrl: `data:image/png;base64,${Buffer.from(bytes).toString(\"base64\")}` },\n };\n } catch {\n return { status: 404, body: { code: \"not_found\", message: \"no app icon asset\" } };\n }\n }\n\n const readMatch = /^\\/api\\/apps\\/([^/]+)\\/config$/.exec(pathname);\n if (readMatch !== null && request.method === \"GET\") {\n const key = decodeURIComponent(readMatch[1]!);\n const entry = await findCreateEntry(key);\n if (entry === undefined) {\n return { status: 404, body: { code: \"not_found\", message: `no application at key ${key}` } };\n }\n if (entry.source === \"wizard\") {\n if (entry.config === undefined) {\n return { status: 500, body: { code: \"invalid_config\", message: \"unreadable wizard project config\" } };\n }\n // Same v1-shaped document the edit flow consumes, projected read-only\n // from the wizard project's frozen opentray.app.json. A URL project\n // projects its address; the projection never synthesizes command\n // defaults for it (add-create-url-apps D7).\n const config: CreateConfigV1 = {\n schemaVersion: 1,\n appId: entry.config.appId,\n appName: entry.config.appName,\n ...(entry.config.url === undefined\n ? {}\n : { url: entry.config.url }),\n ...(entry.config.command === undefined\n ? {}\n : {\n command: {\n executable: entry.config.command.executable,\n args: [...entry.config.command.args],\n cwd: entry.config.command.cwd,\n ...(entry.config.command.env === undefined\n ? {}\n : { env: { ...entry.config.command.env } }),\n },\n }),\n packageManager: entry.config.packageManager,\n icons: { imageSmoothingEnabled: true, background: \"transparent\", scale: 0.8 },\n window: {\n width: entry.config.window.width,\n height: entry.config.window.height,\n titleFollowsDocument: true,\n iconFollowsDocument: false,\n },\n developerMode: entry.config.developerMode,\n };\n return { status: 200, body: config };\n }\n if (entry.record.config === undefined) {\n return { status: 500, body: { code: \"invalid_config\", message: \"unreadable registration\" } };\n }\n return { status: 200, body: entry.record.config };\n }\n\n const openMatch = /^\\/api\\/apps\\/([^/]+)\\/open$/.exec(pathname);\n if (openMatch !== null && request.method === \"POST\") {\n // Open works for BOTH layouts (wizard-share-and-list-scan D4): the shared\n // launcher needs only the project directory — bundle present → platform\n // launcher, else detached cold start. No registration envelope required.\n const key = decodeURIComponent(openMatch[1]!);\n const entry = await findCreateEntry(key);\n if (entry === undefined) {\n return { status: 404, body: { code: \"not_found\", message: `no application at key ${key}` } };\n }\n const projectDir =\n entry.source === \"wizard\" ? entry.dir : entry.record.payloadPath;\n if (projectDir === undefined) {\n return { status: 409, body: { code: \"missing_payload\", message: \"application payload is unavailable\" } };\n }\n const opened = await openMaterializedApp({ projectDir, bundlePath: undefined });\n return { status: opened.ok ? 200 : 500, body: opened };\n }\n\n const uninstallMatch = /^\\/api\\/apps\\/([^/]+)\\/uninstall$/.exec(pathname);\n if (uninstallMatch !== null && request.method === \"POST\") {\n // 双布局卸载(需求 #11 修订 D6):向导项目走脚手架所有权验证 +\n // 运行探测/授权停止 + 删除项目与 bundle;注册布局维持信封语义。\n const key = decodeURIComponent(uninstallMatch[1]!);\n const entry = await findCreateEntry(key);\n if (entry === undefined) {\n return { status: 404, body: { code: \"not_found\", message: `no application at key ${key}` } };\n }\n if (entry.source === \"wizard\") {\n const result = await uninstallWizardProject({\n key,\n stopRunning: request.body.stopRunning === true,\n });\n if (!result.ok) {\n return {\n status: result.error.code === \"not_found\" ? 404 : result.error.code === \"app_running\" ? 409 : 500,\n body: result.error,\n };\n }\n return { status: 200, body: result.value };\n }\n const appId =\n entry?.source === \"registered\" && entry.record.config !== undefined\n ? entry.record.config.appId\n : typeof request.body.appId === \"string\"\n ? request.body.appId\n : undefined;\n if (appId === undefined) {\n return { status: 400, body: { code: \"invalid_config\", message: \"appId is required\" } };\n }\n const result = await uninstallApp({\n appId,\n stopRunning: request.body.stopRunning === true,\n purgeTarget: request.body.purgeTarget === true,\n });\n if (!result.ok) {\n return { status: result.error.code === \"not_found\" ? 404 : result.error.code === \"app_running\" ? 409 : 500, body: result.error };\n }\n return { status: 200, body: result.value };\n }\n\n const stopMatch = /^\\/api\\/apps\\/([^/]+)\\/stop$/.exec(pathname);\n if (stopMatch !== null && request.method === \"POST\") {\n const appId = typeof request.body.appId === \"string\" ? request.body.appId : undefined;\n if (appId === undefined) {\n return { status: 400, body: { code: \"invalid_config\", message: \"appId is required\" } };\n }\n const result = await stopRunningApp({ appId });\n if (!result.ok) {\n return { status: 500, body: result.error };\n }\n return { status: 200, body: result.value };\n }\n\n const exportMatch = /^\\/api\\/apps\\/([^/]+)\\/export$/.exec(pathname);\n if (exportMatch !== null && request.method === \"POST\") {\n // Key-addressed share/export for BOTH layouts (wizard-share-and-list-scan\n // D1/D4): wizard projects derive the config from the scaffold projection\n // and embed the stable in-project icon asset; registrations keep the\n // committed-snapshot flow.\n const key = decodeURIComponent(exportMatch[1]!);\n const entry = await findCreateEntry(key);\n if (entry === undefined) {\n return { status: 404, body: { code: \"not_found\", message: `no application at key ${key}` } };\n }\n let config: CreateConfigV1;\n const embedded: EmbeddedResource[] = [];\n let iconSharedAs: \"url\" | \"embedded\" | \"local\" | \"none\" = \"none\";\n let iconReference: \"url\" | \"local\" | \"none\" = \"none\";\n // 三态:true 内嵌;false 按引用(URL/本地路径);缺省按来源默认。\n const inlineIcon = request.body.inlineIcon;\n if (entry.source === \"wizard\") {\n if (entry.config === undefined) {\n return { status: 500, body: { code: \"invalid_config\", message: \"unreadable wizard project config\" } };\n }\n const icon = await readWizardProjectIcon(entry.dir);\n config = {\n schemaVersion: 1,\n appId: entry.config.appId,\n appName: entry.config.appName,\n ...(entry.config.url === undefined\n ? {}\n : { url: entry.config.url }),\n ...(entry.config.command === undefined\n ? {}\n : {\n command: {\n executable: entry.config.command.executable,\n args: [...entry.config.command.args],\n cwd: entry.config.command.cwd,\n ...(entry.config.command.env === undefined\n ? {}\n : { env: { ...entry.config.command.env } }),\n },\n }),\n packageManager: entry.config.packageManager,\n icons: {\n imageSmoothingEnabled: true,\n background: \"transparent\",\n scale: 0.8,\n ...(icon === undefined\n ? {}\n : {\n appIcon: {\n path: \"app-icon.png\",\n format: \"png\" as const,\n sha256: icon.sha256,\n source: { kind: \"file\" as const, ref: icon.path },\n },\n }),\n },\n window: {\n width: entry.config.window.width,\n height: entry.config.window.height,\n titleFollowsDocument: true,\n iconFollowsDocument: false,\n },\n developerMode: entry.config.developerMode,\n };\n if (icon !== undefined) {\n iconReference = \"local\";\n if (inlineIcon === false) {\n // 按引用分享:项目内合成资产的绝对路径(同机重建有效)。\n config = {\n ...config,\n icons: {\n ...config.icons,\n appIcon: {\n path: \"app-icon.png\",\n format: \"png\" as const,\n sha256: \"\",\n source: { kind: \"file\" as const, ref: icon.path },\n },\n },\n };\n iconSharedAs = \"local\";\n } else {\n embedded.push({ flag: \"app-icon\", filename: \"app-icon.png\", bytes: icon.bytes });\n iconSharedAs = \"embedded\"; // 项目内合成资产默认内嵌(自包含)\n }\n }\n } else {\n if (entry.record.config === undefined) {\n return { status: 500, body: { code: \"invalid_config\", message: \"unreadable registration\" } };\n }\n config = entry.record.config;\n // 图标分享法则:http 来源默认保留 URL、file 来源(上传快照)默认内嵌;\n // inlineIcon 三态覆盖默认(false=按引用,包括本地提交路径)。\n for (const ref of [config.icons.appIcon, config.icons.trayIcon]) {\n if (ref === undefined) continue;\n const isHttp = ref.source.kind === \"http\";\n const isApp = ref === config.icons.appIcon;\n if (isApp) iconReference = isHttp ? \"url\" : \"local\";\n const inline = inlineIcon ?? !isHttp;\n if (!inline) {\n if (isApp) iconSharedAs = isHttp ? \"url\" : \"local\";\n continue;\n }\n const bytes = await readResourceBytes(entry.record.dir, ref);\n if (bytes.ok) {\n embedded.push({\n flag: isApp ? \"app-icon\" : \"tray-icon\",\n filename: ref.path.split(\"/\").pop() ?? \"icon.png\",\n bytes: bytes.value,\n });\n if (isApp) iconSharedAs = \"embedded\";\n }\n }\n }\n const envCount = Object.keys(config.command?.env ?? {}).length;\n if (envCount > 0 && request.body.acknowledgeEnv !== true) {\n // Env guard WITHOUT heuristics and WITHOUT echoing values.\n return {\n status: 409,\n body: { code: \"env_ack_required\", message: \"environment entries present; acknowledgement required\", envCount },\n };\n }\n const format = request.body.format === \"sh\" || request.body.format === \"ps1\" || request.body.format === \"command\"\n ? (request.body.format as \"sh\" | \"ps1\" | \"command\")\n : \"command\";\n if (format === \"command\") {\n const plan = buildExportPlan({\n config,\n embeddedResources: embedded,\n forceCopy: request.body.forceCopy === true,\n });\n if (!plan.ok) {\n return { status: 500, body: plan.error };\n }\n if (plan.value.directCommand === null) {\n return { status: 409, body: { code: \"export_unsafe\", message: plan.value.directCommandBlockedReason ?? \"direct copy requires force-copy\" } };\n }\n // On-demand quoting: bare-safe words stay unquoted, the rest quoted.\n const command = formatPosixCommandLine(plan.value.directCommand.command);\n return { status: 200, body: { command } };\n }\n const script = buildScriptExport(\n { config, embeddedResources: embedded },\n format === \"sh\" ? \"sh\" : \"powershell\",\n );\n if (!script.ok) {\n return { status: 500, body: script.error };\n }\n return {\n status: 200,\n body: {\n filename: script.value.filename,\n content: script.value.content,\n commandLine: script.value.commandLine,\n requiresEnvAcknowledgement: script.value.requiresEnvAcknowledgement,\n iconSharedAs,\n iconReference,\n },\n };\n }\n\n if (pathname === \"/api/skill\" && request.method === \"GET\") {\n const root = await resolveSkillRoot();\n if (root === undefined) {\n return { status: 404, body: { code: \"not_found\", message: \"packaged skill not found\" } };\n }\n const requested = request.query.get(\"path\");\n const logical = containedSkillPath(requested !== null && requested.length > 0 ? requested : \"SKILL.md\");\n if (logical === undefined) {\n return { status: 400, body: { code: \"path_escape\", message: \"invalid skill path\" } };\n }\n try {\n const content = await readFile(join(root, logical), \"utf8\");\n return { status: 200, body: { path: logical, content } };\n } catch {\n return { status: 404, body: { code: \"not_found\", message: `skill file not found: ${logical}` } };\n }\n }\n\n if (pathname === \"/api/skill/list\" && request.method === \"GET\") {\n const root = await resolveSkillRoot();\n if (root === undefined) {\n return { status: 404, body: { code: \"not_found\", message: \"packaged skill not found\" } };\n }\n const walk = async (prefix: string): Promise<{ path: string; type: \"file\" | \"directory\" }[]> => {\n const entries = await readdir(join(root, prefix), { withFileTypes: true });\n entries.sort((a, b) => a.name.localeCompare(b.name));\n const out: { path: string; type: \"file\" | \"directory\" }[] = [];\n for (const entry of entries) {\n const logical = prefix.length === 0 ? entry.name : `${prefix}/${entry.name}`;\n if (entry.isDirectory()) {\n out.push({ path: logical, type: \"directory\" });\n out.push(...(await walk(logical)));\n } else if (entry.isFile()) {\n out.push({ path: logical, type: \"file\" });\n }\n }\n return out;\n };\n return { status: 200, body: await walk(\"\") };\n }\n\n return undefined;\n};\n","// Orthogonal intents (maintained 2026-07-22; original user request: the wizard\n// is a local WebUI; mutating endpoints must be session-guarded):\n// 1. Serve the static wizard page and its API on 127.0.0.1 only.\n// 2. Stream wizard events over SSE with per-client replay of the event log.\n// 3. Reject unauthenticated or non-loopback-Host mutations with 401/403.\n\nimport {\n createServer,\n type IncomingMessage,\n type Server,\n type ServerResponse,\n} from \"node:http\";\nimport { createHash, randomBytes } from \"node:crypto\";\nimport { createRequire } from \"node:module\";\nimport { mkdir, readFile, rename, rm, writeFile } from \"node:fs/promises\";\nimport { homedir, tmpdir } from \"node:os\";\nimport { dirname, extname, join, resolve, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport type {\n WizardCommandOptions,\n WizardEnvEntry,\n WizardEvent,\n WizardFormValues,\n WizardSession,\n} from \"./wizard\";\nimport { normalizeFamilyProjection } from \"./wizard\";\nimport { openMaterializedApp } from \"@create-opentray/core\";\nimport { handleWorkbenchApi } from \"./workbench-api\";\n\nexport interface WizardServerHandle {\n readonly url: string;\n readonly port: number;\n readonly token: string;\n readonly session: WizardSession;\n close(): Promise<void>;\n}\n\nconst LOOPBACK_HOSTS = new Set([\"127.0.0.1\", \"localhost\", \"[::1]\", \"::1\"]);\n\nexport const createWizardServer = async (\n createSession: (emit: (event: WizardEvent) => void) => WizardSession,\n options: {\n readonly port?: number;\n /** Test seam: upstream dist base for the model proxy (default: IMG.LY CDN). */\n readonly imglyUpstream?: (version: string) => string;\n /** Test seam: disk cache root (default: ~/.opentray/cache/imgly-data). */\n readonly imglyCacheRoot?: string;\n } = {},\n): Promise<WizardServerHandle> => {\n const token = randomBytes(16).toString(\"hex\");\n const imglyUpstream = options.imglyUpstream ?? IMGLY_UPSTREAM;\n const imglyCacheRoot = options.imglyCacheRoot ?? join(homedir(), \".opentray\", \"cache\", \"imgly-data\");\n const clients = new Set<ServerResponse>();\n const eventLog: WizardEvent[] = [];\n\n // Bounded incremental log: snapshots carry full state, so replaying more\n // than recent increments (terminal output) would only duplicate payloads.\n const EVENT_LOG_LIMIT = 200;\n // Real-time draft persistence (owner requirement): every form/command\n // update writes the wizard draft to disk under the OS temp home keyed by\n // the server port, so a browser close+reopen (not just a refresh) lands\n // back on the same in-progress draft. The live session stays authoritative\n // while it runs; the draft only seeds NEW sessions.\n const draftPath = join(tmpdir(), `create-opentray-draft-${options.port ?? 0}.json`);\n // 写入串行化:事件可能背靠背触发(如 prime 的 command-display + form +\n // command-options),并发的 read-modify-write 会互相丢更新,重启后草稿缺键\n // (Codex R2-B1 恢复链依赖)。promise 链保证逐次合并。\n let draftWriteChain: Promise<void> = Promise.resolve();\n const writeDraft = (event: WizardEvent): void => {\n if (event.type !== \"form\" && event.type !== \"command-display\" && event.type !== \"command-options\") {\n return;\n }\n draftWriteChain = draftWriteChain\n .then(async () => {\n const current = await readFile(draftPath, \"utf8\")\n .then((raw) => JSON.parse(raw) as Record<string, unknown>)\n .catch(() => ({}) as Record<string, unknown>);\n const next = {\n ...current,\n ...(event.type === \"form\"\n ? { form: event.values, defaults: event.defaults }\n : {}),\n ...(event.type === \"command-display\" ? { command: event.command } : {}),\n ...(event.type === \"command-options\" ? { commandOptions: event.options } : {}),\n savedAt: Date.now(),\n };\n await writeFile(draftPath, JSON.stringify(next), \"utf8\");\n })\n .catch(() => {\n // best-effort persistence\n });\n };\n\n\n const emit = (event: WizardEvent): void => {\n if (event.type !== \"log\") {\n eventLog.push(event);\n if (eventLog.length > EVENT_LOG_LIMIT) {\n eventLog.splice(0, eventLog.length - EVENT_LOG_LIMIT);\n }\n }\n writeDraft(event);\n const frame = `data: ${JSON.stringify(event)}\\n\\n`;\n for (const client of clients) {\n client.write(frame);\n }\n };\n\n const session = createSession(emit);\n\n\n\n const indexHtml = await readWebUiIndex();\n\n const server: Server = createServer((request, response) => {\n void handle(request, response).catch((error: unknown) => {\n respond(\n response,\n 500,\n \"application/json\",\n `${JSON.stringify({ error: error instanceof Error ? error.message : String(error) })}\\n`,\n );\n });\n });\n\n const handle = async (\n request: IncomingMessage,\n response: ServerResponse,\n ): Promise<void> => {\n const url = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n if (url.pathname === \"/\" || url.pathname === \"/index.html\") {\n if (!isAuthorized(request, url, token)) {\n respond(response, 401, \"text/plain\", \"invalid wizard token\\n\");\n return;\n }\n if (indexHtml === undefined) {\n respond(response, 500, \"text/plain\", \"wizard page is missing from this installation\\n\");\n return;\n }\n respond(response, 200, \"text/html; charset=utf-8\", indexHtml);\n return;\n }\n\n if (url.pathname === \"/api/events\") {\n if (!isAuthorized(request, url, token)) {\n respond(response, 401, \"text/plain\", \"unauthorized\\n\");\n return;\n }\n response.writeHead(200, {\n \"content-type\": \"text/event-stream\",\n \"cache-control\": \"no-cache\",\n connection: \"keep-alive\",\n });\n response.write(\": connected\\n\\n\");\n // Authoritative whole-session state FIRST (page-refresh recovery),\n // then bounded recent increments (terminal tail).\n response.write(`data: ${JSON.stringify(session.snapshot())}\\n\\n`);\n for (const event of eventLog) {\n response.write(`data: ${JSON.stringify(event)}\\n\\n`);\n }\n clients.add(response);\n request.once(\"close\", () => {\n clients.delete(response);\n });\n return;\n }\n\n if (url.pathname.startsWith(\"/assets/\")) {\n await handleAssetFile(url.pathname, response);\n return;\n }\n // Model proxy/cache for browser subject extraction: loopback serving with\n // a persistent disk cache in front of the vendor CDN (owner round-8).\n if (url.pathname.startsWith(\"/imgly-data/\")) {\n await handleImglyAsset(url, response, imglyCacheRoot, imglyUpstream);\n return;\n }\n if (url.pathname === \"/logo.png\" || FAVICON_PATHS.has(url.pathname)) {\n await handleAssetFile(url.pathname, response);\n return;\n }\n\n // ghostty-web resolves its WASM document-relative: /ghostty-vt.wasm.\n if (url.pathname === \"/ghostty-vt.wasm\") {\n await handleAssetFile(\"/ghostty-vt.wasm\", response);\n return;\n }\n\n if (url.pathname.startsWith(\"/vendor/\")) {\n await handleVendorAsset(url.pathname, response);\n return;\n }\n\n // Composed app-icon preview bytes (wizard compose cache), token-scoped.\n const composedMatch = /^\\/api\\/icon-composed\\/([a-f0-9]+)$/.exec(url.pathname);\n if (composedMatch !== null) {\n if (!isAuthorized(request, url, token)) {\n respond(response, 401, \"text/plain\", \"unauthorized\\n\");\n return;\n }\n const key = composedMatch[1] as string;\n const composed = session.iconComposition(key);\n if (composed === undefined) {\n respond(response, 404, \"text/plain\", \"not found\\n\");\n return;\n }\n try {\n const bytes = await readFile(composed.compositePath);\n response.writeHead(200, {\n \"content-type\": \"image/png\",\n \"cache-control\": \"no-store\",\n \"content-length\": bytes.byteLength,\n });\n response.end(bytes);\n return;\n } catch {\n respond(response, 404, \"text/plain\", \"not found\\n\");\n return;\n }\n }\n\n // Icon bytes for candidate thumbnails: <img> tags cannot send headers, so\n // auth accepts the same ?token= query the SSE stream uses.\n const iconDataMatch = /^\\/api\\/icon-data\\/(\\d+)\\/(\\d+)$/.exec(url.pathname);\n if (iconDataMatch !== null) {\n if (!isAuthorized(request, url, token)) {\n respond(response, 401, \"text/plain\", \"unauthorized\\n\");\n return;\n }\n const port = Number.parseInt(iconDataMatch[1] as string, 10);\n const index = Number.parseInt(iconDataMatch[2] as string, 10);\n const candidate = session.iconCandidate(port, index);\n if (candidate === undefined) {\n respond(response, 404, \"text/plain\", \"not found\\n\");\n return;\n }\n const bytes = await readFile(candidate.path).catch(() => undefined);\n if (bytes === undefined) {\n respond(response, 404, \"text/plain\", \"not found\\n\");\n return;\n }\n response.writeHead(200, {\n \"content-type\": ICON_CONTENT_TYPES[candidate.format] ?? \"application/octet-stream\",\n \"content-length\": bytes.length,\n \"cache-control\": \"no-store\",\n });\n response.end(bytes);\n return;\n }\n\n if (url.pathname.startsWith(\"/api/\")) {\n if (!isAuthorized(request, url, token)) {\n respond(response, 401, \"application/json\", '{\"error\":\"unauthorized\"}\\n');\n return;\n }\n if (!isLoopbackHost(request)) {\n respond(response, 403, \"application/json\", '{\"error\":\"forbidden host\"}\\n');\n return;\n }\n // Workbench routes (apps/skill/export) are Core projections with\n // their own body contract. The raw-bytes icon-upload route must NOT\n // have its stream consumed here, so only workbench paths pre-read.\n const isWorkbenchPath =\n url.pathname === \"/api/apps\" ||\n url.pathname.startsWith(\"/api/apps/\") ||\n url.pathname === \"/api/skill\" ||\n url.pathname === \"/api/skill/list\";\n if (isWorkbenchPath) {\n let body: Record<string, unknown> = {};\n if (request.method === \"POST\") {\n body = await readJsonBody(request);\n }\n const workbench = await handleWorkbenchApi({\n method: request.method ?? \"GET\",\n pathname: url.pathname,\n query: url.searchParams,\n body,\n });\n if (workbench !== undefined) {\n respond(response, workbench.status, \"application/json\", `${JSON.stringify(workbench.body)}\\n`);\n return;\n }\n }\n await handleApi(url.pathname, request, response, session);\n return;\n }\n\n respond(response, 404, \"text/plain\", \"not found\\n\");\n };\n\n await listen(server, options.port);\n const address = server.address();\n if (address === null || typeof address === \"string\") {\n server.close();\n throw new Error(\"wizard server did not bind a loopback port\");\n }\n\n return {\n url: `http://127.0.0.1:${address.port}/?token=${token}`,\n port: address.port,\n token,\n session,\n close: () =>\n new Promise<void>((resolve) => {\n for (const client of clients) {\n client.end();\n }\n clients.clear();\n server.close(() => resolve());\n }),\n };\n};\n\n/** Whitelisted static terminal-renderer assets; exact names only, no traversal. */\nconst VENDOR_ASSETS: Readonly<\n Record<string, { contentType: string; candidates: () => readonly string[] }>\n> = {\n \"/vendor/ghostty-web.js\": {\n contentType: \"text/javascript; charset=utf-8\",\n candidates: () => [\n join(moduleDir(), \"webui\", \"vendor\", \"ghostty-web.js\"),\n ghosttyPackageFile(\"dist/ghostty-web.js\"),\n ],\n },\n \"/vendor/ghostty-vt.wasm\": {\n contentType: \"application/wasm\",\n candidates: () => [\n join(moduleDir(), \"webui\", \"vendor\", \"ghostty-vt.wasm\"),\n ghosttyPackageFile(\"ghostty-vt.wasm\"),\n ghosttyPackageFile(\"dist/ghostty-vt.wasm\"),\n ],\n },\n};\n\nconst moduleDir = (): string => dirname(fileURLToPath(import.meta.url));\n\n/**\n * Resolve a file inside the installed ghostty-web package. Deep paths are\n * blocked by the package `exports` map, so resolve the exported main module\n * and walk from the package root instead.\n */\nconst ghosttyPackageFile = (relative: string): string => {\n try {\n const require = createRequire(import.meta.url);\n const main = require.resolve(\"ghostty-web\");\n const packageRoot = dirname(dirname(main));\n return join(packageRoot, relative);\n } catch {\n return \"\";\n }\n};\n\nconst ICON_CONTENT_TYPES: Readonly<Record<string, string>> = {\n png: \"image/png\",\n svg: \"image/svg+xml\",\n jpeg: \"image/jpeg\",\n webp: \"image/webp\",\n gif: \"image/gif\",\n ico: \"image/x-icon\",\n};\n\nconst ASSET_CONTENT_TYPES: Readonly<Record<string, string>> = {\n \".js\": \"text/javascript; charset=utf-8\",\n \".css\": \"text/css; charset=utf-8\",\n \".wasm\": \"application/wasm\",\n \".html\": \"text/html; charset=utf-8\",\n \".svg\": \"image/svg+xml\",\n \".png\": \"image/png\",\n \".json\": \"application/json\",\n};\n\n/**\n * Serve one file from the built webui directory (dist/webui). Only simple\n * relative names are accepted: resolve first, then require the resolved path\n * to stay inside the webui root, so traversal cannot escape.\n */\nconst handleAssetFile = async (\n pathname: string,\n response: ServerResponse,\n): Promise<void> => {\n const relative = pathname.replace(/^\\/+/, \"\");\n if (relative.length === 0 || relative.includes(\"\\u0000\")) {\n respond(response, 404, \"text/plain\", \"not found\\n\");\n return;\n }\n // Built package layout first; source checkout falls back to create-webui's\n // vite output. Resolve-then-contain so traversal cannot escape any root.\n const roots = [\n join(moduleDir(), \"webui\"),\n join(moduleDir(), \"..\", \"..\", \"create-webui\", \"dist\"),\n ];\n for (const root of roots) {\n const resolved = resolve(root, relative);\n if (!(resolved === root || resolved.startsWith(`${root}${sep}`))) {\n continue;\n }\n const bytes = await readFile(resolved).catch(() => undefined);\n if (bytes === undefined) {\n continue;\n }\n const extension = extname(resolved).toLowerCase();\n response.writeHead(200, {\n \"content-type\": ASSET_CONTENT_TYPES[extension] ?? \"application/octet-stream\",\n \"content-length\": bytes.length,\n \"cache-control\": \"no-store\",\n });\n response.end(bytes);\n return;\n }\n respond(response, 404, \"text/plain\", \"not found\\n\");\n};\n\nconst handleVendorAsset = async (pathname: string, response: ServerResponse): Promise<void> => {\n const asset = VENDOR_ASSETS[pathname];\n if (asset === undefined) {\n respond(response, 404, \"text/plain\", \"not found\\n\");\n return;\n }\n for (const candidate of asset.candidates()) {\n if (candidate.length === 0) {\n continue;\n }\n const bytes = await readFile(candidate).catch(() => undefined);\n if (bytes !== undefined) {\n response.writeHead(200, {\n \"content-type\": asset.contentType,\n \"content-length\": bytes.length,\n \"cache-control\": \"no-store\",\n });\n response.end(bytes);\n return;\n }\n }\n respond(response, 404, \"text/plain\", \"terminal renderer asset is missing\\n\");\n};\n\n/**\n * Backend model proxy/cache for the browser subject extraction (owner\n * round-8): the wizard rebinds a RANDOM port every launch, so a browser-side\n * cache can never survive — the backend downloads model assets from the\n * vendor CDN ONCE into a persistent disk cache and serves the frontend from\n * loopback. Content-addressed chunks are immutable → long-lived cache headers.\n */\nconst IMGLY_CONTENT_TYPES: Readonly<Record<string, string>> = {\n \".json\": \"application/json\",\n \".wasm\": \"application/wasm\",\n \".mjs\": \"text/javascript; charset=utf-8\",\n};\n/** Model chunks are 4 MiB; bound the proxy to stop unbounded disk writes. */\nconst IMGLY_FILE_LIMIT = 16 * 1024 * 1024;\nconst IMGLY_UPSTREAM = (version: string): string =>\n `https://staticimgly.com/@imgly/background-removal-data/${version}/dist/`;\n\nconst handleImglyAsset = async (\n url: URL,\n response: ServerResponse,\n cacheRoot: string,\n upstream: (version: string) => string,\n): Promise<void> => {\n // /imgly-data/<version>/<name>: strict shapes only — version pins the CDN\n // tree, name is a single segment (resources.json or a hex chunk).\n const match = /^\\/imgly-data\\/([\\w.-]+)\\/([\\w.-]+)$/.exec(url.pathname);\n if (match === null) {\n respond(response, 404, \"text/plain\", \"not found\\n\");\n return;\n }\n const version = match[1] as string;\n const name = match[2] as string;\n if (version.includes(\"..\") || name.includes(\"..\")) {\n respond(response, 404, \"text/plain\", \"not found\\n\");\n return;\n }\n const contentType = IMGLY_CONTENT_TYPES[extname(name).toLowerCase()] ?? \"application/octet-stream\";\n const respondBytes = (bytes: Buffer, fromCache: boolean): void => {\n response.writeHead(200, {\n \"content-type\": contentType,\n \"content-length\": bytes.length,\n // Content-addressed payloads are immutable; the browser cache serves\n // same-session refetches while the DISK cache survives port changes.\n \"cache-control\": \"public, max-age=31536000, immutable\",\n \"x-opentray-imgly-cache\": fromCache ? \"hit\" : \"miss\",\n });\n response.end(bytes);\n };\n const dir = join(cacheRoot, version);\n const path = join(dir, name);\n const cached = await readFile(path).catch(() => undefined);\n if (cached !== undefined) {\n respondBytes(cached, true);\n return;\n }\n const fetchFromUpstream = async (): Promise<Buffer> => {\n const upstreamResponse = await fetch(`${upstream(version)}${name}`);\n if (!upstreamResponse.ok) {\n throw new Error(`upstream ${upstreamResponse.status}`);\n }\n const bytes = Buffer.from(await upstreamResponse.arrayBuffer());\n if (bytes.length === 0 || bytes.length > IMGLY_FILE_LIMIT) {\n throw new Error(`upstream size out of bounds: ${bytes.length}`);\n }\n // Atomic commit: temp sibling + rename, so a killed download can never\n // leave a truncated chunk that later serves as a cache hit.\n await mkdir(dir, { recursive: true });\n const tempPath = join(dir, `.${name}.${randomBytes(6).toString(\"hex\")}.tmp`);\n await writeFile(tempPath, bytes);\n await rm(path, { force: true });\n await rename(tempPath, path);\n return bytes;\n };\n // One in-flight download per file: parallel chunk requests dedupe instead\n // of racing the upstream.\n const inFlight = handleImglyAsset.inFlight.get(path);\n if (inFlight !== undefined) {\n try {\n respondBytes(await inFlight, true);\n } catch {\n respond(response, 502, \"text/plain\", \"model asset upstream failed\\n\");\n }\n return;\n }\n const download = fetchFromUpstream();\n handleImglyAsset.inFlight.set(path, download);\n try {\n respondBytes(await download, false);\n } catch (error) {\n respond(response, 502, \"text/plain\", `model asset upstream failed: ${String(error)}\\n`);\n } finally {\n handleImglyAsset.inFlight.delete(path);\n }\n};\n/** In-flight upstream downloads, keyed by cache path (per server instance). */\nhandleImglyAsset.inFlight = new Map<string, Promise<Buffer>>();\n\n\n/** Containment: icon routes must only read sources the wizard itself\n * produced (its temp dirs / saved uploads), never arbitrary paths. */\nconst isWizardOwnedIconPath = (session: WizardSession, target: string): boolean => {\n for (const root of session.iconSourceRoots()) {\n if (root.length > 0 && target.startsWith(root + sep)) {\n return true;\n }\n }\n return false;\n};\n\nconst handleApi = async (\n pathname: string,\n request: IncomingMessage,\n response: ServerResponse,\n session: WizardSession,\n preReadBody?: Record<string, unknown>,\n): Promise<void> => {\n if (request.method !== \"POST\") {\n respond(response, 405, \"application/json\", '{\"error\":\"method not allowed\"}\\n');\n return;\n }\n if (pathname === \"/api/icon-upload\") {\n // Raw image bytes in the request body — must not pass the JSON reader.\n const chunks: Buffer[] = [];\n for await (const chunk of request) {\n const piece = typeof chunk === \"string\" ? Buffer.from(chunk) : chunk;\n chunks.push(piece);\n }\n const bytes = Buffer.concat(chunks);\n if (bytes.length < 64) {\n respond(response, 400, \"application/json\", '{\"error\":\"image bytes are required\"}\\n');\n return;\n }\n const path = await session.saveIconUpload(bytes);\n respond(response, 200, \"application/json\", JSON.stringify({ path }) + \"\\n\");\n return;\n }\n if (pathname === \"/api/icon-candidate\") {\n // Raw image bytes in the request body — must not pass the JSON reader.\n // Metadata (port/variantOf/width/height/format) rides the query string.\n const query = new URL(request.url ?? \"/\", \"http://127.0.0.1\").searchParams;\n const port = Number.parseInt(query.get(\"port\") ?? \"\", 10);\n const variantOf = Number.parseInt(query.get(\"variantOf\") ?? \"\", 10);\n const width = Number.parseInt(query.get(\"width\") ?? \"\", 10);\n const height = Number.parseInt(query.get(\"height\") ?? \"\", 10);\n if (!Number.isInteger(port) || !Number.isInteger(variantOf) || !Number.isInteger(width) || width <= 0 || !Number.isInteger(height) || height <= 0) {\n respond(response, 400, \"application/json\", '{\"error\":\"port, variantOf, width and height are required\"}\\n');\n return;\n }\n const chunks: Buffer[] = [];\n for await (const chunk of request) {\n const piece = typeof chunk === \"string\" ? Buffer.from(chunk) : chunk;\n chunks.push(piece);\n }\n const bytes = Buffer.concat(chunks);\n if (bytes.length < 64) {\n respond(response, 400, \"application/json\", '{\"error\":\"image bytes are required\"}\\n');\n return;\n }\n const format = query.get(\"format\") ?? \"png\";\n const appended = await session.addIconCandidate(port, {\n bytes,\n variantOf,\n width,\n height,\n format,\n });\n if (appended === undefined) {\n respond(response, 409, \"application/json\", '{\"error\":\"candidate not acceptable for this port/state\"}\\n');\n return;\n }\n respond(response, 200, \"application/json\", JSON.stringify({ index: appended.index }) + \"\\n\");\n return;\n }\n const body = preReadBody ?? (await readJsonBody(request));\n switch (pathname) {\n case \"/api/url\": {\n // URL 模式(webui 入口):非空 url 抓取预设并进入 discovered;空 url\n // 退出 URL 模式回到 idle。地址合法性由 session 承担(typed failed)。\n const url = typeof body.url === \"string\" ? body.url : \"\";\n if (url.trim().length === 0 && body.exit !== true) {\n respond(response, 400, \"application/json\", '{\"error\":\"url is required\"}\\n');\n return;\n }\n await session.submitUrl(url);\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n return;\n }\n case \"/api/command\": {\n // Array form: argv elements used verbatim (array input mode).\n if (Array.isArray(body.argv)) {\n const argv = body.argv.filter((element: unknown): element is string => typeof element === \"string\");\n if (argv.length === 0 || (argv[0] ?? \"\").trim().length === 0) {\n respond(response, 400, \"application/json\", '{\"error\":\"argv requires the program element\"}\\n');\n return;\n }\n await session.submitCommand(argv);\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n return;\n }\n const command = typeof body.command === \"string\" ? body.command : \"\";\n if (command.trim().length === 0) {\n respond(response, 400, \"application/json\", '{\"error\":\"command is required\"}\\n');\n return;\n }\n await session.submitCommand(command);\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n return;\n }\n case \"/api/command-options\": {\n const patch: Partial<{ -readonly [K in keyof WizardCommandOptions]: WizardCommandOptions[K] }> = {};\n if (typeof body.cwd === \"string\") {\n patch.cwd = body.cwd;\n }\n if (body.argsMode === \"string\" || body.argsMode === \"array\") {\n patch.argsMode = body.argsMode;\n }\n if (Array.isArray(body.env)) {\n const entries: WizardEnvEntry[] = [];\n for (const entry of body.env) {\n if (\n typeof entry === \"object\" &&\n entry !== null &&\n typeof (entry as { key?: unknown }).key === \"string\" &&\n typeof (entry as { value?: unknown }).value === \"string\"\n ) {\n entries.push({ key: (entry as { key: string }).key, value: (entry as { value: string }).value });\n }\n }\n patch.env = entries;\n }\n // 系列作者状态(D11):共享归一器(与草稿恢复同一接受集合)。\n {\n const normalized = normalizeFamilyProjection(body.family);\n if (normalized !== undefined) {\n patch.family = normalized;\n }\n }\n session.updateCommandOptions(patch);\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n return;\n }\n case \"/api/prime\": {\n const command = typeof body.command === \"string\" ? body.command : \"\";\n if (command.trim().length === 0) {\n respond(response, 400, \"application/json\", '{\"error\":\"command is required\"}\\n');\n return;\n }\n session.prime(command);\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n return;\n }\n case \"/api/select-service\": {\n const port = Number(body.port);\n if (!Number.isInteger(port) || port <= 0) {\n respond(response, 400, \"application/json\", '{\"error\":\"port is required\"}\\n');\n return;\n }\n session.selectService(port);\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n return;\n }\n case \"/api/form\": {\n const patch: Partial<{ -readonly [K in keyof WizardFormValues]: WizardFormValues[K] }> = {};\n for (const key of [\"appId\", \"appName\", \"iconPath\", \"trayIconPath\"] as const) {\n const value = body[key];\n if (typeof value === \"string\") {\n patch[key] = value;\n }\n }\n if (body.pm === \"npm\" || body.pm === \"pnpm\" || body.pm === \"bun\") {\n patch.pm = body.pm;\n }\n if (\n body.iconBackground === \"black\" ||\n body.iconBackground === \"white\" ||\n body.iconBackground === \"transparent\"\n ) {\n patch.iconBackground = body.iconBackground;\n }\n if (typeof body.iconScale === \"number\" && body.iconScale >= 0.5 && body.iconScale <= 0.95) {\n patch.iconScale = body.iconScale;\n }\n for (const key of [\"showStartupTerminal\", \"showAddressBar\", \"imageSmoothingEnabled\", \"developerMode\", \"force\"] as const) {\n const value = body[key];\n if (typeof value === \"boolean\") {\n patch[key] = value;\n }\n }\n session.updateForm(patch);\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n return;\n }\n case \"/api/cancel\": {\n try {\n session.cancel();\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n } catch (error) {\n respond(\n response,\n 409,\n \"application/json\",\n `${JSON.stringify({ error: error instanceof Error ? error.message : String(error) })}\\n`,\n );\n }\n return;\n }\n case \"/api/confirm\": {\n try {\n session.confirm();\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n } catch (error) {\n respond(\n response,\n 409,\n \"application/json\",\n `${JSON.stringify({ error: error instanceof Error ? error.message : String(error) })}\\n`,\n );\n }\n return;\n }\n case \"/api/export\": {\n // 冻结参数分享(wizard-share-and-list-scan D3):未生成即可导出。\n const format =\n body.format === \"sh\" || body.format === \"ps1\" || body.format === \"command\"\n ? body.format\n : undefined;\n if (format === undefined) {\n respond(response, 400, \"application/json\", '{\"error\":\"format must be command, sh, or ps1\"}\\n');\n return;\n }\n const result = await session.exportFrozen({\n format,\n acknowledgeEnv: body.acknowledgeEnv === true,\n forceCopy: body.forceCopy === true,\n inlineIcon: body.inlineIcon === true,\n });\n if (!result.ok) {\n const status = result.code === \"env_ack_required\" || result.code === \"export_unsafe\" ? 409 : 400;\n respond(\n response,\n status,\n \"application/json\",\n `${JSON.stringify({ code: result.code, message: result.message })}\\n`,\n );\n return;\n }\n respond(response, 200, \"application/json\", `${JSON.stringify(result)}\\n`);\n return;\n }\n case \"/api/create\": {\n try {\n await session.create();\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n } catch (error) {\n respond(\n response,\n 409,\n \"application/json\",\n `${JSON.stringify({ error: error instanceof Error ? error.message : String(error) })}\\n`,\n );\n }\n return;\n }\n case \"/api/terminal-input\": {\n const data = typeof body.data === \"string\" ? body.data : undefined;\n if (data === undefined) {\n respond(response, 400, \"application/json\", '{\"error\":\"data is required\"}\\n');\n return;\n }\n session.terminalInput(data);\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n return;\n }\n case \"/api/icon-analyze\": {\n const path = typeof body.path === \"string\" ? body.path.trim() : \"\";\n if (path.length === 0) {\n respond(response, 400, \"application/json\", '{\"error\":\"path is required\"}\\n');\n return;\n }\n if (!isWizardOwnedIconPath(session, path)) {\n respond(response, 403, \"application/json\", '{\"error\":\"path is not a wizard icon source\"}\\n');\n return;\n }\n try {\n const analysis = await session.analyzeIconForeground(path);\n respond(response, 200, \"application/json\", JSON.stringify(analysis) + \"\\n\");\n } catch (error) {\n respond(response, 500, \"application/json\", JSON.stringify({ error: String(error) }) + \"\\n\");\n }\n return;\n }\n case \"/api/icon-compose\": {\n const foregroundPath = typeof body.foregroundPath === \"string\" ? body.foregroundPath.trim() : \"\";\n if (foregroundPath.length === 0) {\n respond(response, 400, \"application/json\", '{\"error\":\"foregroundPath is required\"}\\n');\n return;\n }\n if (!isWizardOwnedIconPath(session, foregroundPath)) {\n respond(response, 403, \"application/json\", '{\"error\":\"foregroundPath is not a wizard icon source\"}\\n');\n return;\n }\n const background =\n body.background === \"black\" || body.background === \"white\" || body.background === \"transparent\"\n ? body.background\n : undefined;\n const scale =\n typeof body.scale === \"number\" && body.scale >= 0.5 && body.scale <= 0.95\n ? body.scale\n : undefined;\n try {\n const composed = await session.composeIcon({\n foregroundPath,\n ...(background === undefined ? {} : { background }),\n ...(scale === undefined ? {} : { scale }),\n });\n respond(response, 200, \"application/json\", JSON.stringify(composed) + \"\\n\");\n } catch (error) {\n respond(response, 500, \"application/json\", JSON.stringify({ error: String(error) }) + \"\\n\");\n }\n return;\n }\n case \"/api/tray-icon-select\": {\n const port = typeof body.port === \"number\" ? body.port : Number.NaN;\n const index = typeof body.index === \"number\" ? body.index : Number.NaN;\n if (!Number.isInteger(port) || !Number.isInteger(index)) {\n respond(response, 400, \"application/json\", '{\"error\":\"port and index are required\"}\\n');\n return;\n }\n const ok = session.selectTrayIconCandidate(port, index);\n respond(response, 200, \"application/json\", JSON.stringify({ ok }) + \"\\n\");\n return;\n }\n case \"/api/icon-select\": {\n const port = typeof body.port === \"number\" ? body.port : Number.NaN;\n const index = typeof body.index === \"number\" ? body.index : Number.NaN;\n if (!Number.isInteger(port) || !Number.isInteger(index)) {\n respond(response, 400, \"application/json\", '{\"error\":\"port and index are required\"}\\n');\n return;\n }\n const ok = session.selectIconCandidate(port, index);\n respond(response, 200, \"application/json\", JSON.stringify({ ok }) + \"\\n\");\n return;\n }\n case \"/api/icon-source\": {\n const path = typeof body.path === \"string\" ? body.path.trim() : \"\";\n if (path.length === 0) {\n respond(response, 400, \"application/json\", '{\"error\":\"path is required\"}\\n');\n return;\n }\n session.updateForm({ iconPath: path });\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n return;\n }\n case \"/api/terminal-resize\": {\n const cols = Number(body.cols);\n const rows = Number(body.rows);\n if (!Number.isInteger(cols) || !Number.isInteger(rows) || cols <= 0 || rows <= 0) {\n respond(response, 400, \"application/json\", '{\"error\":\"cols and rows are required\"}\\n');\n return;\n }\n session.terminalResize({ cols, rows });\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n return;\n }\n case \"/api/stop\": {\n await session.stop();\n respond(response, 200, \"application/json\", '{\"ok\":true}\\n');\n return;\n }\n case \"/api/open-app\": {\n const result = session.result;\n if (result === undefined) {\n respond(response, 409, \"application/json\", '{\"error\":\"no materialized app\"}\\n');\n return;\n }\n const opened = await openMaterializedApp({\n projectDir: result.projectDir,\n // No bundle is verified during generation anymore; open-app derives\n // the expected path and cold-starts the entry when it does not exist.\n bundlePath: undefined,\n });\n respond(\n response,\n opened.ok ? 200 : 500,\n \"application/json\",\n `${JSON.stringify({ ok: opened.ok, detail: opened.detail })}\\n`,\n );\n return;\n }\n default:\n respond(response, 404, \"application/json\", '{\"error\":\"unknown endpoint\"}\\n');\n }\n};\n\nconst listen = (server: Server, port?: number): Promise<void> =>\n new Promise((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(port ?? 0, \"127.0.0.1\", () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n\nexport const isAuthorized = (\n request: IncomingMessage,\n url: URL,\n token: string,\n): boolean => {\n const header = request.headers.authorization;\n if (header === `Bearer ${token}`) {\n return true;\n }\n return url.searchParams.get(\"token\") === token;\n};\n\nexport const isLoopbackHost = (request: IncomingMessage): boolean => {\n const host = request.headers.host ?? \"\";\n const hostname = host.replace(/:\\d+$/u, \"\").toLowerCase();\n return LOOPBACK_HOSTS.has(hostname);\n};\n\nconst readJsonBody = async (request: IncomingMessage): Promise<Record<string, unknown>> => {\n const chunks: Buffer[] = [];\n let size = 0;\n for await (const chunk of request) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk));\n size += buffer.length;\n if (size > 1 << 20) {\n throw new Error(\"request body too large\");\n }\n chunks.push(buffer);\n }\n if (chunks.length === 0) {\n return {};\n }\n const parsed: unknown = JSON.parse(Buffer.concat(chunks).toString(\"utf8\"));\n if (typeof parsed !== \"object\" || parsed === null) {\n return {};\n }\n return parsed as Record<string, unknown>;\n};\n\nconst respond = (\n response: ServerResponse,\n status: number,\n contentType: string,\n body: string,\n): void => {\n response.writeHead(status, {\n \"content-type\": contentType,\n \"content-length\": Buffer.byteLength(body),\n \"cache-control\": \"no-store\",\n });\n response.end(body);\n};\n\n/** Built package: dist/webui/index.html; source checkout falls back to the create-webui vite output. */\nconst webUiIndexPaths = (): readonly string[] => [\n join(moduleDir(), \"webui\", \"index.html\"),\n join(moduleDir(), \"..\", \"..\", \"create-webui\", \"dist\", \"index.html\"),\n];\n\nconst readWebUiIndex = async (): Promise<string | undefined> => {\n for (const candidate of webUiIndexPaths()) {\n const html = await readFile(candidate, \"utf8\").catch(() => undefined);\n if (html !== undefined) {\n return html;\n }\n }\n return undefined;\n};\n\n/** Favicon variants served from the webui root (see create-webui/public). */\nconst FAVICON_PATHS: ReadonlySet<string> = new Set<string>([\n \"/favicon-64.png\",\n \"/favicon-32.png\",\n \"/favicon-16.png\",\n]);\n\n/** Token fingerprint helper used in tests and diagnostics. */\nexport const fingerprintToken = (token: string): string =>\n createHash(\"sha256\").update(token).digest(\"hex\").slice(0, 12);\n","// Flag → Core v1 desired-state compilation (openspec change\n// add-create-opentray-cli; URL source + identity defaults added by\n// add-create-url-apps).\n//\n// A valid config document supplies the base desired state; explicit field\n// options override ONLY their named fields. Destructive/process controls\n// stay operation inputs and are never written into v1 config. `--url`\n// selects the URL application source (mutually exclusive with the command\n// flags) and derives default identity offline from the address text.\n\nimport { readFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\nimport {\n CONFIG_SCHEMA_VERSION,\n deriveUrlIdentity,\n parseCreateConfig,\n type CreateConfigV1,\n type IconBackgroundName,\n type PackageManagerName,\n type Result,\n} from \"@create-opentray/core\";\nimport { err, ok } from \"@create-opentray/core\";\n\nexport interface CreateFlagOptions {\n readonly appId?: string;\n readonly appName?: string;\n /** URL application source; mutually exclusive with exec/arg/cwd/env. */\n readonly url?: string;\n readonly exec?: string;\n readonly arg?: readonly string[];\n readonly cwd?: string;\n readonly env?: readonly string[];\n readonly pm?: PackageManagerName;\n readonly appIcon?: string;\n readonly trayIcon?: string;\n readonly iconBackground?: IconBackgroundName;\n readonly iconScale?: number;\n readonly imageSmoothing?: boolean;\n readonly trayTemplate?: boolean;\n readonly developerMode?: boolean;\n readonly window?: string;\n /** URL applications: host the address-bar wrapper (D12). */\n readonly toolbar?: boolean;\n /** Window title follows document.title; default true (D13). */\n readonly titleFollow?: boolean;\n /** Runtime favicon→window-icon following; default false (D13). */\n readonly iconFollow?: boolean;\n}\n\nconst PACKAGE_MANAGERS: readonly PackageManagerName[] = [\"npm\", \"pnpm\", \"bun\"];\nconst BACKGROUNDS: readonly IconBackgroundName[] = [\"black\", \"white\", \"transparent\"];\n\nexport const parseEnvEntry = (\n entry: string,\n): { ok: true; key: string; value: string } | { ok: false; message: string } => {\n const eq = entry.indexOf(\"=\");\n if (eq <= 0) {\n return { ok: false, message: `--env expects KEY=VALUE, got: ${entry}` };\n }\n const key = entry.slice(0, eq);\n if (key.trim().length === 0) {\n return { ok: false, message: `--env key must be non-empty: ${entry}` };\n }\n return { ok: true, key, value: entry.slice(eq + 1) };\n};\n\nexport const parseWindowSpec = (\n spec: string,\n): { ok: true; width: number; height: number } | { ok: false; message: string } => {\n const match = /^(\\d{2,5})x(\\d{2,5})$/u.exec(spec.trim());\n if (match === null) {\n return { ok: false, message: `--window expects <width>x<height>, got: ${spec}` };\n }\n const width = Number.parseInt(match[1]!, 10);\n const height = Number.parseInt(match[2]!, 10);\n if (width <= 0 || height <= 0) {\n return { ok: false, message: `--window dimensions must be positive: ${spec}` };\n }\n return { ok: true, width, height };\n};\n\n/** Enrichment presets for URL creation (add-create-url-apps D10). */\nexport interface CreateEnrichment {\n /** Scraped page title — fills appName when neither flag nor base supplies it. */\n readonly appName?: string;\n /** Scraped favicon (normalized temp file) — fills the app icon source. */\n readonly appIconPath?: string;\n}\n\n/** Compile flags over an optional base config document. */\nexport const compileDesiredConfig = async (\n options: CreateFlagOptions,\n configPath: string | undefined,\n baseCwd: string,\n enrichment?: CreateEnrichment,\n): Promise<Result<CreateConfigV1>> => {\n let base: CreateConfigV1 | undefined;\n if (configPath !== undefined) {\n let raw: string;\n try {\n raw = await readFile(configPath, \"utf8\");\n } catch (error) {\n return err(\"invalid_config\", `cannot read config ${configPath}: ${error instanceof Error ? error.message : String(error)}`);\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw);\n } catch (error) {\n return err(\"invalid_config\", `config ${configPath} is not valid JSON: ${error instanceof Error ? error.message : String(error)}`);\n }\n const result = parseCreateConfig(parsed);\n if (!result.ok) {\n return err(result.error.code, `${configPath}: ${result.error.message}`, result.error.details);\n }\n base = result.value;\n }\n\n // Source negotiation (add-create-url-apps D5/D6): --url selects the URL\n // source and is mutually exclusive with every command flag at THIS layer;\n // an explicit --url also overrides a command-carrying base document (a\n // deliberate source switch, mirroring named-field override semantics).\n const url = options.url ?? base?.url;\n const hasCommandFlag =\n options.exec !== undefined ||\n options.arg !== undefined ||\n options.cwd !== undefined ||\n options.env !== undefined;\n if (url !== undefined && hasCommandFlag) {\n return err(\"invalid_config\", \"--url is mutually exclusive with --exec/--arg/--cwd/--env\");\n }\n\n // URL identity defaults (D5): the address text alone derives them offline.\n // Scraped presets (D10) sit BETWEEN the base document and the address\n // derivation: flag > --config > scraped preset > address text.\n const derived = url === undefined ? undefined : deriveUrlIdentity(url);\n const appId = options.appId ?? base?.appId ?? derived?.appId;\n const appName =\n options.appName ?? base?.appName ?? (url === undefined ? undefined : enrichment?.appName) ?? derived?.appName;\n if (appId === undefined) {\n return err(\"invalid_config\", \"--app-id is required (or supply a complete --config document)\");\n }\n if (appName === undefined) {\n return err(\"invalid_config\", \"--app-name is required (or supply a complete --config document)\");\n }\n\n const executable = options.exec ?? base?.command?.executable;\n const args =\n options.arg !== undefined\n ? [...options.arg]\n : base?.command?.args ?? [];\n const cwd =\n options.cwd !== undefined\n ? resolve(baseCwd, options.cwd)\n : base?.command?.cwd ?? baseCwd;\n\n const env: Record<string, string> = { ...(base?.command?.env ?? {}) };\n for (const entry of options.env ?? []) {\n const parsed = parseEnvEntry(entry);\n if (!parsed.ok) {\n return err(\"invalid_config\", parsed.message);\n }\n env[parsed.key] = parsed.value;\n }\n\n const pm = options.pm ?? base?.packageManager ?? \"npm\";\n if (!PACKAGE_MANAGERS.includes(pm)) {\n return err(\"invalid_config\", `--pm must be one of ${PACKAGE_MANAGERS.join(\", \")}, got: ${pm}`);\n }\n\n const iconBackground = options.iconBackground ?? base?.icons.background ?? \"transparent\";\n if (!BACKGROUNDS.includes(iconBackground)) {\n return err(\"invalid_config\", `--icon-background must be one of ${BACKGROUNDS.join(\", \")}, got: ${iconBackground}`);\n }\n const iconScale = options.iconScale ?? base?.icons.scale ?? 0.8;\n if (typeof iconScale !== \"number\" || iconScale < 0.5 || iconScale > 0.95) {\n return err(\"invalid_config\", `--icon-scale must be between 0.5 and 0.95, got: ${String(iconScale)}`);\n }\n const imageSmoothing = options.imageSmoothing ?? base?.icons.imageSmoothingEnabled ?? true;\n const trayTemplate = options.trayTemplate ?? base?.icons.trayTemplate ?? false;\n const developerMode = options.developerMode ?? base?.developerMode ?? false;\n\n const baseWindow = base?.window;\n const window = {\n width: baseWindow?.width ?? 1_200,\n height: baseWindow?.height ?? 800,\n ...(baseWindow?.toolbar === undefined ? {} : { toolbar: baseWindow.toolbar }),\n titleFollowsDocument: options.titleFollow ?? baseWindow?.titleFollowsDocument ?? true,\n iconFollowsDocument: options.iconFollow ?? baseWindow?.iconFollowsDocument ?? false,\n };\n if (options.window !== undefined) {\n const parsed = parseWindowSpec(options.window);\n if (!parsed.ok) {\n return err(\"invalid_config\", parsed.message);\n }\n window.width = parsed.width;\n window.height = parsed.height;\n }\n // Window behavior options (D12/D13): explicit flags over the base document,\n // with the durable defaults filling absent fields.\n if (options.toolbar !== undefined) {\n window.toolbar = options.toolbar;\n }\n\n // Assembled documents pass through the SAME strict v1 parser as config\n // files: flag input can never bypass validation.\n const source =\n url !== undefined\n ? { url }\n : executable === undefined || executable.length === 0\n ? null\n : {\n command: {\n executable,\n args,\n cwd,\n ...(Object.keys(env).length === 0 ? {} : { env }),\n },\n };\n if (source === null) {\n return err(\"invalid_config\", \"--exec <executable> or --url <address> is required (or supply a complete --config document)\");\n }\n return parseCreateConfig({\n schemaVersion: CONFIG_SCHEMA_VERSION,\n appId,\n appName,\n ...source,\n packageManager: pm,\n icons: {\n imageSmoothingEnabled: imageSmoothing,\n background: iconBackground,\n scale: iconScale,\n ...(trayTemplate ? { trayTemplate: true } : {}),\n // Resource refs are resolved by Core apply (icon sources below).\n },\n window,\n developerMode,\n });\n};\n","// Machine-readable output contract (openspec change add-create-opentray-cli).\n//\n// In --json mode stdout carries ONLY the result document; progress and\n// diagnostics use stderr. Environment values are never echoed into ordinary\n// diagnostic output.\n\nexport interface CliStreams {\n readonly out: (line: string) => void;\n readonly err: (line: string) => void;\n}\n\nexport const consoleStreams: CliStreams = {\n out: (line) => {\n process.stdout.write(`${line}\\n`);\n },\n err: (line) => {\n process.stderr.write(`${line}\\n`);\n },\n};\n\nexport interface TypedFailure {\n readonly ok: false;\n readonly error: { readonly code: string; readonly message: string; readonly details?: unknown };\n}\n\nexport interface TypedSuccess<T> {\n readonly ok: true;\n readonly result: T;\n}\n\nexport type CliOutcome<T = unknown> = TypedSuccess<T> | TypedFailure;\n\n/** Stable exit-code categories shared by every command. */\nexport const exitCodeFor = (code: string): number => {\n switch (code) {\n case \"invalid_config\":\n case \"incompatible_version\":\n case \"identity_mismatch\":\n case \"export_unsafe\":\n case \"env_ack_required\":\n return 2; // usage/validation\n case \"not_found\":\n return 4;\n case \"already_exists\":\n case \"not_empty\":\n case \"ownership_unverified\":\n return 5;\n case \"app_running\":\n return 6;\n case \"pid_reused\":\n case \"process_unverified\":\n return 7;\n case \"resource_invalid\":\n case \"resource_fetch_failed\":\n return 8;\n case \"path_escape\":\n return 9;\n case \"link_unsupported\":\n case \"capability_unavailable\":\n return 10;\n default:\n return 1; // internal/unknown\n }\n};\n\nexport const emitOutcome = <T>(\n outcome: CliOutcome<T>,\n streams: CliStreams,\n json: boolean,\n render?: (result: T) => string,\n): number => {\n if (json) {\n // JSON mode: stdout is ONLY the typed result document.\n streams.out(JSON.stringify(outcome.ok ? { ok: true, result: outcome.result } : { ok: false, error: outcome.error }));\n return outcome.ok ? 0 : exitCodeFor(outcome.error.code);\n }\n if (!outcome.ok) {\n streams.err(`error [${outcome.error.code}]: ${outcome.error.message}`);\n return exitCodeFor(outcome.error.code);\n }\n if (render !== undefined) {\n const text = render(outcome.result);\n if (text.length > 0) {\n streams.out(text);\n }\n }\n return 0;\n};\n\nexport const emitProgress = (message: string, streams: CliStreams, json: boolean): void => {\n // Progress NEVER pollutes JSON stdout.\n if (!json) {\n streams.err(message);\n }\n};\n","// Packaged AI-skill access (openspec change add-create-opentray-cli).\n//\n// `create-opentray skill` reads the canonical English AI-facing tree from\n// one stable packaged root. Access is read-only and contained: absolute\n// paths, traversal, NUL bytes, and link escapes are rejected before any\n// filesystem read. Skill output never depends on host locale.\n\nimport { lstat, readFile, readdir } from \"node:fs/promises\";\nimport { dirname, join, resolve, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { err, ok, type Result } from \"@create-opentray/core\";\n\n/** Validate one logical skill path (slash-separated, contained, no NUL). */\nexport const validateSkillPath = (\n path: string,\n): Result<string> => {\n if (path.includes(\"\\0\")) {\n return err(\"path_escape\", \"skill path contains NUL bytes\");\n }\n if (path.length === 0) {\n return err(\"path_escape\", \"skill path must not be empty\");\n }\n if (path.startsWith(\"/\") || path.startsWith(\"\\\\\") || /^[A-Za-z]:/u.test(path)) {\n return err(\"path_escape\", `skill paths are relative, got absolute: ${path}`);\n }\n const segments = path.split(/[\\\\/]/u);\n if (segments.some((segment) => segment === \"..\" || segment === \"\")) {\n return err(\"path_escape\", `skill path must not traverse upward or repeat separators: ${path}`);\n }\n return ok(segments.join(\"/\"));\n};\n\nexport interface SkillRoot {\n readonly root: string;\n}\n\nconst isDirectory = async (path: string): Promise<boolean> => {\n try {\n return (await lstat(path)).isDirectory();\n } catch {\n return false;\n }\n};\n\n/**\n * Resolve the packaged skill root. Priority:\n * 1. `<moduleDir>/skill` — bundled beside this module (packed layout).\n * 2. `<moduleDir>/../skill` — the create package's dist/ staging.\n * 3. Source checkout: `packages/create/skill` (repo layout).\n */\nexport const resolveSkillRoot = async (): Promise<Result<SkillRoot>> => {\n const moduleDir = dirname(fileURLToPath(import.meta.url));\n const candidates = [\n join(moduleDir, \"skill\"),\n join(moduleDir, \"..\", \"skill\"),\n join(moduleDir, \"..\", \"..\", \"..\", \"skill\"),\n ];\n for (const candidate of candidates) {\n if (await isDirectory(candidate)) {\n return ok({ root: resolve(candidate) });\n }\n }\n return err(\"not_found\", \"packaged skill directory not found (expected beside the create-opentray module)\");\n};\n\n/** Contained read: resolve inside the root, rejecting symlink escapes. */\nconst resolveContained = async (root: string, logical: string): Promise<Result<string>> => {\n const absolute = resolve(root, logical);\n const rootWithSep = root.endsWith(sep) ? root : `${root}${sep}`;\n if (!absolute.startsWith(rootWithSep)) {\n return err(\"path_escape\", `path escapes the packaged skill root: ${logical}`);\n }\n // Symlink-escape check: every component must stay inside the root.\n const relative = absolute.slice(rootWithSep.length);\n const segments = relative.split(sep);\n let current = root;\n for (const segment of segments) {\n current = join(current, segment);\n const info = await lstat(current).catch(() => null);\n if (info === null) {\n return err(\"not_found\", `skill file not found: ${logical}`);\n }\n if (info.isSymbolicLink()) {\n const real = await import(\"node:fs/promises\").then((fs) => fs.realpath(current));\n if (!real.startsWith(rootWithSep)) {\n return err(\"path_escape\", `skill entry escapes the packaged root: ${logical}`);\n }\n }\n }\n return ok(absolute);\n};\n\nexport interface SkillListEntry {\n readonly path: string;\n readonly type: \"file\" | \"directory\";\n}\n\nconst walk = async (root: string, prefix: string, out: SkillListEntry[]): Promise<void> => {\n const entries = await readdir(join(root, prefix), { withFileTypes: true });\n entries.sort((a, b) => a.name.localeCompare(b.name));\n for (const entry of entries) {\n const logical = prefix.length === 0 ? entry.name : `${prefix}/${entry.name}`;\n if (entry.isDirectory()) {\n out.push({ path: logical, type: \"directory\" });\n await walk(root, logical, out);\n } else if (entry.isFile()) {\n out.push({ path: logical, type: \"file\" });\n }\n }\n};\n\n/** List logical relative entries beneath a skill directory. */\nexport const listSkillFiles = async (\n root: SkillRoot,\n path = \"\",\n): Promise<Result<readonly SkillListEntry[]>> => {\n if (path !== \"\") {\n const validated = validateSkillPath(path);\n if (!validated.ok) {\n return validated;\n }\n const target = await resolveContained(root.root, validated.value);\n if (!target.ok) {\n return target;\n }\n const info = await lstat(target.value);\n if (!info.isDirectory()) {\n return err(\"not_found\", `skill path is a file, not a directory: ${path}`);\n }\n const out: SkillListEntry[] = [];\n await walk(root.root, validated.value, out);\n return ok(out);\n }\n const out: SkillListEntry[] = [];\n await walk(root.root, \"\", out);\n return ok(out);\n};\n\n/** Read one contained skill file's exact UTF-8 content. */\nexport const readSkillFile = async (\n root: SkillRoot,\n path: string,\n): Promise<Result<string>> => {\n const validated = validateSkillPath(path);\n if (!validated.ok) {\n return validated;\n }\n const target = await resolveContained(root.root, validated.value);\n if (!target.ok) {\n return target;\n }\n const info = await lstat(target.value);\n if (info.isDirectory()) {\n return err(\"not_found\", `skill path is a directory: ${path}`);\n }\n try {\n return ok(await readFile(target.value, \"utf8\"));\n } catch (error) {\n return err(\"not_found\", `cannot read skill file ${path}: ${error instanceof Error ? error.message : String(error)}`);\n }\n};\n","// Yargs command tree for create-opentray (openspec change\n// add-create-opentray-cli).\n//\n// yargs owns parsing/validation/help for every command; no hand-written flag\n// loop survives. `web` (and the bare root for compatibility) dispatch the\n// WebUI adapter; `create` compiles explicit flags into Core v1 desired\n// state fully non-interactively; `app …` project Core registry procedures;\n// `skill …` expose the packaged English AI Skill read-only.\n\nimport { readFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\n\nimport type { CommandModule, Argv } from \"yargs\";\n\nimport {\n applyCreate,\n buildExportPlan,\n buildScriptExport,\n deriveUrlPresets,\n err,\n formatPosixCommandLine,\n listRegistrations,\n loadRegistration,\n ok,\n parseCreateConfig,\n planCreate,\n readResourceBytes,\n registrationKey,\n stopRunningApp,\n uninstallApp,\n type CreateConfigV1,\n type DesiredState,\n type IconBackgroundName,\n type PackageManagerName,\n type ResourceInput,\n type Result,\n} from \"@create-opentray/core\";\n\nimport { compileDesiredConfig, type CreateEnrichment, type CreateFlagOptions } from \"./options\";\nimport { CliOutcome, emitOutcome, emitProgress, type CliStreams } from \"./output\";\nimport { listSkillFiles, readSkillFile, resolveSkillRoot, validateSkillPath } from \"./skill\";\n\nexport interface CliContext {\n readonly streams: CliStreams;\n readonly homeDir?: string;\n /** WebUI adapter entry supplied by the create-opentray package. */\n readonly runWeb?: (options: { readonly port?: number; readonly open: boolean }) => Promise<number>;\n /** Test seam: skip real install/launch in apply. */\n readonly skipInstall?: boolean;\n readonly dependencyRange?: string;\n readonly cwd?: string;\n /** Per-dispatch exit recorder; defaults to process.exitCode assignment. */\n readonly setExit?: (code: number) => void;\n}\n\nconst exitSetter = (context: CliContext): ((code: number) => void) =>\n context.setExit ?? ((code: number) => {\n process.exitCode = code;\n });\n\n/** Emit an outcome AND record its exit code on the dispatch tracker. */\nconst finish = <T>(\n context: CliContext,\n outcome: CliOutcome<T>,\n json: boolean,\n render?: (result: T) => string,\n): void => {\n exitSetter(context)(emitOutcome(outcome, context.streams, json, render));\n};\n\nconst iconSourceInput = (value: string | undefined): ResourceInput | undefined => {\n if (value === undefined) {\n return undefined;\n }\n if (/^https?:\\/\\//iu.test(value)) {\n return { kind: \"http\", url: value };\n }\n if (value.startsWith(\"data:\")) {\n return { kind: \"data\", dataUrl: value };\n }\n return { kind: \"file\", path: value };\n};\n\nconst asResourceResult = <T>(result: Result<T>): CliOutcome<T> =>\n result.ok\n ? { ok: true, result: result.value }\n : { ok: false, error: { code: result.error.code, message: result.error.message, ...(result.error.details === undefined ? {} : { details: result.error.details }) } };\n\nconst desiredFromConfig = (config: CreateConfigV1, context: CliContext, appIconFlag?: string, trayIconFlag?: string): DesiredState => {\n // Explicit flags win over the config's committed refs; omitted flags fall\n // back to the committed snapshot files (stable references, never re-fetch).\n const appIconSource =\n iconSourceInput(appIconFlag) ??\n (config.icons.appIcon === undefined\n ? undefined\n : { kind: \"file\", path: join(registrationDir(config, context), config.icons.appIcon.path) } as ResourceInput);\n const trayIconSource =\n iconSourceInput(trayIconFlag) ??\n (config.icons.trayIcon === undefined\n ? undefined\n : { kind: \"file\", path: join(registrationDir(config, context), config.icons.trayIcon.path) } as ResourceInput);\n return { config, appIconSource, trayIconSource };\n};\n\nconst registrationDir = (config: CreateConfigV1, context: CliContext): string =>\n join(context.homeDir ?? homedir(), \".opentray\", \"create\", registrationKey(config.appId));\n\nconst readDependencyRange = async (): Promise<string> => {\n // Generated apps must stay on the create-opentray release line, not this\n // private CLI package's own version (0.1.0 resolved ancient SDKs).\n for (const pkgUrl of [new URL(\"../../../package.json\", import.meta.url), new URL(\"../package.json\", import.meta.url)]) {\n try {\n const raw = JSON.parse(await readFile(pkgUrl, \"utf8\")) as { name?: string; version?: string };\n // Only trust the create-opentray manifest; the CLI manifest is private.\n if (raw.name === \"create-opentray\" && typeof raw.version === \"string\" && /^\\d/u.test(raw.version)) {\n return `^${raw.version}`;\n }\n } catch {\n // try the next candidate\n }\n }\n return \"latest\";\n};\n\n// ---------------------------------------------------------------------------\n// create\n// ---------------------------------------------------------------------------\n\ninterface CreateArgs {\n readonly config?: string;\n readonly appId?: string;\n readonly appName?: string;\n readonly url?: string;\n readonly exec?: string;\n readonly arg?: readonly string[];\n readonly cwd?: string;\n readonly env?: readonly string[];\n readonly pm?: PackageManagerName;\n readonly appIcon?: string;\n readonly trayIcon?: string;\n readonly iconBackground?: IconBackgroundName;\n readonly iconScale?: number;\n readonly imageSmoothing?: boolean;\n readonly trayTemplate?: boolean;\n readonly developerMode?: boolean;\n readonly window?: string;\n readonly toolbar?: boolean;\n readonly titleFollow?: boolean;\n readonly iconFollow?: boolean;\n readonly force?: boolean;\n readonly stopRunning?: boolean;\n readonly skipInstall?: boolean;\n readonly dryRun?: boolean;\n /** Negated --no-scrape; default true (scrape the URL for defaults). */\n readonly scrape?: boolean;\n readonly json?: boolean;\n}\n\n/** --url is mutually exclusive with every command flag (add-create-url-apps D6). */\nconst commandFlagGiven = (argv: Record<string, unknown>): boolean =>\n argv.exec !== undefined || argv.arg !== undefined || argv.cwd !== undefined || argv.env !== undefined;\n\nconst runCreate = async (args: CreateArgs, context: CliContext): Promise<void> => {\n const cwd = context.cwd ?? process.cwd();\n const flags: { -readonly [K in keyof CreateFlagOptions]: CreateFlagOptions[K] } = {};\n const optional: readonly (keyof CreateFlagOptions)[] = [\n \"appId\", \"appName\", \"url\", \"exec\", \"arg\", \"cwd\", \"env\", \"pm\", \"appIcon\", \"trayIcon\",\n \"iconBackground\", \"iconScale\", \"imageSmoothing\", \"trayTemplate\", \"developerMode\", \"window\",\n \"toolbar\", \"titleFollow\", \"iconFollow\",\n ];\n for (const key of optional) {\n const value = (args as Record<string, unknown>)[key];\n if (value !== undefined) {\n (flags as Record<string, unknown>)[key] = value;\n }\n }\n\n // URL-mode enrichment (D10): unlike a command — which must run before\n // anything can be scraped — the address is known up front, so creation\n // adopts the page title and best favicon as DEFAULTS. Bounded fetch,\n // silent fallback, off-switch --no-scrape; explicit flags/config always win.\n let enrichment: CreateEnrichment | undefined;\n let presetIconPath: string | undefined;\n let toolbarRequested = args.toolbar === true;\n if (\n args.url !== undefined &&\n args.scrape !== false &&\n (args.appName === undefined || args.appIcon === undefined || toolbarRequested)\n ) {\n const presets = await deriveUrlPresets(args.url);\n enrichment = presets;\n presetIconPath = presets.appIconPath;\n if (presets.appName !== undefined || presets.appIconPath !== undefined) {\n emitProgress(\n `scraped defaults from ${args.url}: ${[presets.appName !== undefined ? \"title\" : undefined, presets.appIconPath !== undefined ? \"favicon\" : undefined].filter(Boolean).join(\" + \")} (defaults; explicit flags win)`,\n context.streams,\n args.json === true,\n );\n }\n // Toolbar feasibility (D12): the wrapper embeds the target in an iframe;\n // a page whose response policy forbids embedding cannot be wrapped, so\n // the request degrades to the direct window with an explicit notice.\n if (toolbarRequested && presets.frameEmbeddable === false) {\n toolbarRequested = false;\n delete flags.toolbar;\n emitProgress(\n `warning: ${args.url} forbids iframe embedding (X-Frame-Options / CSP frame-ancestors); falling back to the direct window`,\n context.streams,\n args.json === true,\n );\n }\n }\n\n const compiled = await compileDesiredConfig(flags, args.config, cwd, enrichment);\n if (!compiled.ok) {\n finish(context, { ok: false, error: { code: compiled.error.code, message: compiled.error.message } }, args.json === true);\n return;\n }\n\n const desired: DesiredState = {\n config: compiled.value,\n appIconSource: iconSourceInput(args.appIcon) ??\n (presetIconPath === undefined ? undefined : ({ kind: \"file\", path: presetIconPath } as ResourceInput)),\n trayIconSource: iconSourceInput(args.trayIcon),\n };\n const applyOptions = {\n desired,\n force: args.force === true,\n stopRunning: args.stopRunning === true,\n skipInstall: args.skipInstall === true || context.skipInstall === true,\n ...(context.homeDir === undefined ? {} : { homeDir: context.homeDir }),\n dependencyRange: context.dependencyRange ?? (await readDependencyRange()),\n log: (message: string) => emitProgress(message, context.streams, args.json === true),\n };\n\n if (args.dryRun === true) {\n const plan = await planCreate(applyOptions);\n finish(context, asResourceResult(plan), args.json === true, (value) =>\n [\n `plan for ${value.appId} (${value.registrationDir})`,\n ...value.effects.map((effect) => {\n switch (effect.type) {\n case \"create-registration\": return ` + registration ${effect.dir}`;\n case \"commit-config\": return ` ~ config ${effect.path}`;\n case \"import-resource\": return ` + resource ${effect.role} → ${effect.filename}`;\n case \"replace-payload\": return ` ~ payload ${effect.dir}`;\n case \"link-payload\": return ` + link ${effect.link} → ${effect.target}`;\n case \"install-dependencies\": return \" + install dependencies\";\n case \"stop-running\": return ` ! stop running pid ${effect.pid}`;\n case \"warning\": return ` w ${effect.message}`;\n }\n }),\n ...value.warnings.map((warning) => ` w ${warning}`),\n value.blockedByRunningProcess !== undefined ? ` ! BLOCKED by running pid ${value.blockedByRunningProcess.pid}` : \"\",\n value.requiresEnvAcknowledgement ? \" ! env entries present: export requires acknowledgement\" : \"\",\n ].filter(Boolean).join(\"\\n\"),\n );\n return;\n }\n\n const applied = await applyCreate(applyOptions);\n finish(context, asResourceResult(applied), args.json === true, (value) =>\n [\n `created ${value.registrationDir}`,\n `payload: ${value.payloadDir}${value.isLink ? \" (linked)\" : \"\"}`,\n ].join(\"\\n\"),\n );\n};\n\nconst createCommand = (context: CliContext): CommandModule => ({\n command: \"create\",\n describe: \"create a v1 application non-interactively (no browser, no prompts, no sniffing)\",\n builder: (yargs: Argv) =>\n yargs\n .option(\"config\", { type: \"string\", describe: \"base v1 config document (explicit flags override named fields)\" })\n .option(\"app-id\", { type: \"string\", describe: \"immutable reverse-dotted identity, e.g. app.example (default under --url: derived from the address)\" })\n .option(\"app-name\", { type: \"string\", describe: \"display name (default under --url: derived from the address)\" })\n .option(\"url\", { type: \"string\", describe: \"application source: open this http(s) URL directly (mutually exclusive with --exec/--arg/--cwd/--env); scrapes the page for default name/icon unless --no-scrape\" })\n .option(\"scrape\", { type: \"boolean\", default: true, describe: \"scrape the --url page for default name/icon (negate with --no-scrape for offline/privacy)\" })\n .option(\"exec\", { type: \"string\", describe: \"command executable\" })\n .option(\"arg\", { type: \"array\", string: true, describe: \"one exact argv element (repeatable)\" })\n .option(\"cwd\", { type: \"string\", describe: \"command working directory (default: current)\" })\n .option(\"env\", { type: \"array\", string: true, describe: \"environment entry KEY=VALUE (repeatable)\" })\n .option(\"pm\", { type: \"string\", choices: [\"npm\", \"pnpm\", \"bun\"], describe: \"package manager\" })\n .option(\"app-icon\", { type: \"string\", describe: \"app icon source: file path, http(s) URL, or data URL\" })\n .option(\"tray-icon\", { type: \"string\", describe: \"tray icon source (default: follow app icon)\" })\n .option(\"icon-background\", { type: \"string\", choices: [\"black\", \"white\", \"transparent\"] })\n .option(\"icon-scale\", { type: \"number\", describe: \"foreground scale 0.5–0.95\" })\n .option(\"image-smoothing\", { type: \"boolean\", describe: \"set false for pixel-art (nearest-neighbor); defaults to the config value or true\" })\n .option(\"tray-template\", { type: \"boolean\", describe: \"treat the tray source as a darwin template\" })\n .option(\"developer-mode\", { type: \"boolean\", describe: \"admit WebView DevTools in the generated app\" })\n .option(\"window\", { type: \"string\", describe: \"window size <width>x<height> (default 1200x800)\" })\n .option(\"toolbar\", { type: \"boolean\", describe: \"URL applications: host the address-bar wrapper (back/forward/reload toolbar)\" })\n .option(\"title-follow\", { type: \"boolean\", describe: \"window title follows document.title (default true; negate with --no-title-follow)\" })\n .option(\"icon-follow\", { type: \"boolean\", describe: \"runtime favicon-to-window-icon following (default off)\" })\n .option(\"force\", { type: \"boolean\", default: false, describe: \"replace a VERIFIED existing payload (never adopts user files)\" })\n .option(\"stop-running\", { type: \"boolean\", default: false, describe: \"stop a verified running instance before apply\" })\n .option(\"skip-install\", { type: \"boolean\", default: false, describe: \"write the project without installing dependencies\" })\n .option(\"dry-run\", { type: \"boolean\", default: false, describe: \"print the Core plan without mutation\" })\n .option(\"json\", { type: \"boolean\", default: false, describe: \"machine-readable typed result on stdout\" })\n .check((argv: Record<string, unknown>) => {\n if (argv.url !== undefined && commandFlagGiven(argv)) {\n throw new Error(\"--url is mutually exclusive with --exec/--arg/--cwd/--env\");\n }\n // Under --url the identity derives from the address (options.ts);\n // the explicit requirement applies only to command creations.\n const derivableIdentity = argv.url !== undefined || argv.config !== undefined;\n if (!derivableIdentity && argv[\"app-id\"] === undefined) {\n throw new Error(\"--app-id is required unless --config supplies a complete document or --url derives it\");\n }\n if (!derivableIdentity && argv[\"app-name\"] === undefined) {\n throw new Error(\"--app-name is required unless --config supplies a complete document or --url derives it\");\n }\n return true;\n }),\n handler: async (argv) => {\n await runCreate(argv as unknown as CreateArgs, context);\n },\n});\n\n// ---------------------------------------------------------------------------\n// app list\n// ---------------------------------------------------------------------------\n\nconst appListCommand = (context: CliContext): CommandModule => ({\n command: \"list\",\n describe: \"list registered v1 applications with health status\",\n builder: (yargs: Argv) => yargs.option(\"json\", { type: \"boolean\", default: false }),\n handler: async (argv) => {\n const json = (argv.json as boolean) === true;\n const records = await listRegistrations(context.homeDir);\n const outcome = { ok: true as const, result: records.map((record) => ({\n key: record.key,\n appId: record.config?.appId,\n appName: record.config?.appName,\n status: record.status,\n registrationDir: record.dir,\n payloadPath: record.payloadPath,\n isLink: record.isLink,\n ...(record.error === undefined ? {} : { error: { code: record.error.code, message: record.error.message } }),\n })) };\n finish(context, outcome, json, (records2) =>\n records2.length === 0\n ? \"no registered applications\"\n : records2\n .map((record) => `${record.status.padEnd(18)} ${record.appId ?? record.key} ${record.payloadPath ?? \"\"}${record.isLink ? \" (linked)\" : \"\"}`)\n .join(\"\\n\"),\n );\n },\n});\n\n// ---------------------------------------------------------------------------\n// app edit\n// ---------------------------------------------------------------------------\n\ninterface EditArgs extends CreateArgs {\n readonly appIdPositional?: string;\n readonly restart?: boolean;\n}\n\nconst appEditCommand = (context: CliContext): CommandModule => ({\n command: \"edit <app-id>\",\n describe: \"apply config/flag patches to an existing registration (non-interactive)\",\n builder: (yargs: Argv) =>\n yargs\n .positional(\"app-id\", { type: \"string\", describe: \"existing immutable appId\", demandOption: true })\n .option(\"config\", { type: \"string\" })\n .option(\"app-name\", { type: \"string\" })\n .option(\"url\", { type: \"string\", describe: \"switch/replace the URL source (mutually exclusive with --exec/--arg/--cwd/--env)\" })\n .option(\"exec\", { type: \"string\" })\n .option(\"arg\", { type: \"array\", string: true })\n .option(\"cwd\", { type: \"string\" })\n .option(\"env\", { type: \"array\", string: true })\n .option(\"pm\", { type: \"string\", choices: [\"npm\", \"pnpm\", \"bun\"] })\n .option(\"app-icon\", { type: \"string\" })\n .option(\"tray-icon\", { type: \"string\" })\n .option(\"icon-background\", { type: \"string\", choices: [\"black\", \"white\", \"transparent\"] })\n .option(\"icon-scale\", { type: \"number\" })\n .option(\"image-smoothing\", { type: \"boolean\" })\n .option(\"tray-template\", { type: \"boolean\" })\n .option(\"developer-mode\", { type: \"boolean\" })\n .option(\"window\", { type: \"string\" })\n .option(\"toolbar\", { type: \"boolean\" })\n .option(\"title-follow\", { type: \"boolean\" })\n .option(\"icon-follow\", { type: \"boolean\" })\n .option(\"force\", { type: \"boolean\", default: false })\n .option(\"stop-running\", { type: \"boolean\", default: false })\n .option(\"restart\", { type: \"boolean\", default: false, describe: \"launch again after a stop-running edit\" })\n .option(\"skip-install\", { type: \"boolean\", default: false })\n .option(\"dry-run\", { type: \"boolean\", default: false })\n .option(\"json\", { type: \"boolean\", default: false }),\n handler: async (argv) => {\n const args = argv as unknown as EditArgs;\n const json = args.json === true;\n // yargs exposes the positional as \"app-id\" (hyphenated key).\n const targetId = (argv[\"app-id\"] as string | undefined) ?? args.appIdPositional;\n if (targetId === undefined) {\n finish(context, { ok: false, error: { code: \"invalid_config\", message: \"app edit requires an <app-id> positional\" } }, json);\n return;\n }\n const existing = await loadRegistration(registrationKey(targetId), context.homeDir);\n if (!existing.ok) {\n finish(context, { ok: false, error: { code: existing.error.code, message: existing.error.message } }, json);\n return;\n }\n if (existing.value.config === undefined) {\n finish(context, { ok: false, error: { code: \"invalid_config\", message: `registration ${existing.value.key} has no readable v1 config (${existing.value.error?.message ?? \"unknown\"})` } }, json);\n return;\n }\n const base = existing.value.config;\n if (args.config !== undefined) {\n let configAppId: string | undefined;\n try {\n const raw = JSON.parse(await readFile(args.config, \"utf8\")) as { appId?: unknown };\n if (typeof raw.appId === \"string\") {\n configAppId = raw.appId;\n }\n } catch {\n // invalid JSON surfaces later through the compiler\n }\n if (configAppId !== undefined && configAppId !== base.appId) {\n // Identity is immutable: changing it is a copy, not an edit.\n finish(context, { ok: false, error: { code: \"identity_mismatch\", message: `appId is immutable: registration holds ${base.appId}; use \"app copy --new-app-id ${configAppId}\" to create the new identity` } }, json);\n return;\n }\n }\n // Compile patches over the committed document. An explicit --url (or\n // --exec) is a deliberate source switch: the other source's projections\n // are dropped, not mixed (add-create-url-apps D6).\n const switchingToUrl = args.url !== undefined;\n const switchingToCommand = args.exec !== undefined;\n const urlValue = switchingToCommand ? undefined : args.url ?? base.url;\n const execValue = switchingToUrl ? undefined : args.exec ?? base.command?.executable;\n const argValue = switchingToUrl ? undefined : args.arg ?? base.command?.args;\n const cwdValue = switchingToUrl ? undefined : args.cwd ?? base.command?.cwd;\n const envValue = switchingToUrl || base.command === undefined\n ? args.env ?? []\n : args.env ?? Object.entries(base.command.env ?? {}).map(([k, v]) => `${k}=${v}`);\n const patched: CreateFlagOptions = {\n appId: base.appId,\n appName: args.appName ?? base.appName,\n ...(urlValue === undefined ? {} : { url: urlValue }),\n ...(execValue === undefined ? {} : { exec: execValue }),\n ...(argValue === undefined ? {} : { arg: argValue }),\n ...(cwdValue === undefined ? {} : { cwd: cwdValue }),\n ...(envValue.length === 0 ? {} : { env: envValue }),\n pm: args.pm ?? base.packageManager,\n iconBackground: args.iconBackground ?? base.icons.background,\n iconScale: args.iconScale ?? base.icons.scale,\n imageSmoothing: args.imageSmoothing ?? base.icons.imageSmoothingEnabled,\n trayTemplate: args.trayTemplate ?? base.icons.trayTemplate ?? false,\n developerMode: args.developerMode ?? base.developerMode,\n window: args.window ?? `${base.window.width}x${base.window.height}`,\n ...((args.toolbar ?? base.window.toolbar) === undefined ? {} : { toolbar: args.toolbar ?? base.window.toolbar }),\n ...(args.titleFollow === undefined && base.window.titleFollowsDocument === undefined\n ? {}\n : { titleFollow: args.titleFollow ?? base.window.titleFollowsDocument }),\n ...(args.iconFollow === undefined && base.window.iconFollowsDocument === undefined\n ? {}\n : { iconFollow: args.iconFollow ?? base.window.iconFollowsDocument }),\n };\n const cwd = context.cwd ?? process.cwd();\n const compiled = await compileDesiredConfig(patched, undefined, cwd);\n if (!compiled.ok) {\n finish(context, { ok: false, error: { code: compiled.error.code, message: compiled.error.message } }, json);\n return;\n }\n const desired = desiredFromConfig(compiled.value, context, args.appIcon, args.trayIcon);\n const applyOptions = {\n desired,\n force: args.force === true,\n stopRunning: args.stopRunning === true,\n skipInstall: args.skipInstall === true || context.skipInstall === true,\n ...(context.homeDir === undefined ? {} : { homeDir: context.homeDir }),\n dependencyRange: context.dependencyRange ?? (await readDependencyRange()),\n log: (message: string) => emitProgress(message, context.streams, json),\n };\n if (args.dryRun === true) {\n const plan = await planCreate(applyOptions);\n finish(context, asResourceResult(plan), json);\n return;\n }\n const applied = await applyCreate(applyOptions);\n finish(context, asResourceResult(applied), json, (value) => `updated ${value.registrationDir}`);\n if (args.restart === true) {\n await stopRunningApp({ appId: base.appId, ...(context.homeDir === undefined ? {} : { homeDir: context.homeDir }) });\n const relaunched = await applyCreate({ ...applyOptions, stopRunning: false });\n finish(context, asResourceResult(relaunched), json, () => \"\");\n }\n },\n});\n\n// ---------------------------------------------------------------------------\n// app copy\n// ---------------------------------------------------------------------------\n\nconst appCopyCommand = (context: CliContext): CommandModule => ({\n command: \"copy <app-id>\",\n describe: \"create a new registration from an existing one under a new identity\",\n builder: (yargs: Argv) =>\n yargs\n .positional(\"app-id\", { type: \"string\", demandOption: true })\n .option(\"new-app-id\", { type: \"string\", demandOption: true, describe: \"the new immutable appId\" })\n .option(\"app-name\", { type: \"string\", describe: \"new display name (default: derived)\" })\n .option(\"force\", { type: \"boolean\", default: false })\n .option(\"skip-install\", { type: \"boolean\", default: false })\n .option(\"dry-run\", { type: \"boolean\", default: false })\n .option(\"json\", { type: \"boolean\", default: false }),\n handler: async (argv) => {\n const json = (argv.json as boolean) === true;\n const sourceId = argv[\"app-id\"] as string;\n const newAppId = argv[\"new-app-id\"] as string;\n const existing = await loadRegistration(registrationKey(sourceId), context.homeDir);\n if (!existing.ok || existing.value.config === undefined) {\n finish(context, { ok: false, error: { code: existing.ok ? \"invalid_config\" : existing.error.code, message: existing.ok ? \"registration unreadable\" : existing.error.message } }, json);\n return;\n }\n const config = existing.value.config;\n const desiredConfig: CreateConfigV1 = {\n ...config,\n appId: newAppId,\n appName: (argv[\"app-name\"] as string | undefined) ?? config.appName,\n };\n // Copy must read the SOURCE committed snapshots for the new registration.\n const sourceDir = existing.value.dir;\n const desired: DesiredState = {\n config: desiredConfig,\n appIconSource:\n config.icons.appIcon === undefined\n ? undefined\n : { kind: \"file\", path: join(sourceDir, config.icons.appIcon.path) },\n trayIconSource:\n config.icons.trayIcon === undefined\n ? undefined\n : { kind: \"file\", path: join(sourceDir, config.icons.trayIcon.path) },\n };\n const applyOptions = {\n desired,\n force: argv.force === true,\n skipInstall: (argv[\"skip-install\"] as boolean) === true || context.skipInstall === true,\n ...(context.homeDir === undefined ? {} : { homeDir: context.homeDir }),\n dependencyRange: context.dependencyRange ?? (await readDependencyRange()),\n log: (message: string) => emitProgress(message, context.streams, json),\n };\n if ((argv[\"dry-run\"] as boolean) === true) {\n const plan = await planCreate(applyOptions);\n finish(context, asResourceResult(plan), json);\n return;\n }\n const applied = await applyCreate(applyOptions);\n finish(context, asResourceResult(applied), json, (value) => `copied to ${value.registrationDir}`);\n },\n});\n\n// ---------------------------------------------------------------------------\n// app export\n// ---------------------------------------------------------------------------\n\nconst appExportCommand = (context: CliContext): CommandModule => ({\n command: \"export <app-id>\",\n describe: \"export a complete create command or self-contained script\",\n builder: (yargs: Argv) =>\n yargs\n .positional(\"app-id\", { type: \"string\", demandOption: true })\n .option(\"format\", { type: \"string\", choices: [\"command\", \"sh\", \"ps1\"], default: \"command\", describe: \"direct command, POSIX shell script, or PowerShell script\" })\n .option(\"output\", { type: \"string\", alias: \"o\", describe: \"write the script to a file instead of stdout\" })\n .option(\"force-copy\", { type: \"boolean\", default: false, describe: \"explicitly allow long embedded data in the direct command\" })\n .option(\"acknowledge-env\", { type: \"boolean\", default: false, describe: \"acknowledge that complete output includes environment values\" })\n .option(\"json\", { type: \"boolean\", default: false }),\n handler: async (argv) => {\n const json = (argv.json as boolean) === true;\n const appId = argv[\"app-id\"] as string;\n const format = argv.format as \"command\" | \"sh\" | \"ps1\";\n const existing = await loadRegistration(registrationKey(appId), context.homeDir);\n if (!existing.ok || existing.value.config === undefined) {\n finish(context, { ok: false, error: { code: existing.ok ? \"invalid_config\" : existing.error.code, message: existing.ok ? \"registration unreadable\" : existing.error.message } }, json);\n return;\n }\n const config = existing.value.config;\n const envCount = Object.keys(config.command?.env ?? {}).length;\n if (envCount > 0 && (argv[\"acknowledge-env\"] as boolean) !== true) {\n finish(context, { ok: false, error: { code: \"env_ack_required\", message: `this application has ${envCount} environment entrie(s); complete export includes their values — pass --acknowledge-env after reviewing them` } }, json);\n return;\n }\n // Uploaded sources (file provenance) embed their committed bytes.\n const embedded = [];\n const regDir = existing.value.dir;\n for (const ref of [config.icons.appIcon, config.icons.trayIcon]) {\n if (ref === undefined) continue;\n if (ref.source.kind === \"http\") continue; // URLs stay URLs\n const bytes = await readResourceBytes(regDir, ref);\n if (!bytes.ok) continue;\n embedded.push({ flag: ref === config.icons.appIcon ? \"app-icon\" : \"tray-icon\", filename: ref.path.split(\"/\").pop() ?? \"icon.png\", bytes: bytes.value });\n }\n if (format === \"command\") {\n const plan = buildExportPlan({ config, embeddedResources: embedded, forceCopy: (argv[\"force-copy\"] as boolean) === true });\n if (!plan.ok) {\n finish(context, { ok: false, error: { code: plan.error.code, message: plan.error.message } }, json);\n return;\n }\n if (plan.value.directCommand === null) {\n finish(context, { ok: false, error: { code: \"export_unsafe\", message: plan.value.directCommandBlockedReason ?? \"direct copy blocked\" } }, json);\n return;\n }\n const command = plan.value.directCommand.command;\n finish(\n context,\n { ok: true, result: { command: formatPosixCommandLine(command) } },\n json,\n (value) => value.command,\n );\n return;\n }\n const script = buildScriptExport({ config, embeddedResources: embedded }, format === \"sh\" ? \"sh\" : \"powershell\");\n if (!script.ok) {\n finish(context, { ok: false, error: { code: script.error.code, message: script.error.message } }, json);\n return;\n }\n const outputPath = argv.output as string | undefined;\n if (outputPath !== undefined) {\n const { writeFile } = await import(\"node:fs/promises\");\n await writeFile(resolve(context.cwd ?? process.cwd(), outputPath), script.value.content, \"utf8\");\n finish(context, { ok: true, result: { path: outputPath, bytes: script.value.content.length } }, json, (value) => `wrote ${value.path}`);\n return;\n }\n finish(context, { ok: true, result: { content: script.value.content } }, json, (value) => value.content.replace(/\\n$/, \"\"));\n },\n});\n\n// ---------------------------------------------------------------------------\n// app uninstall\n// ---------------------------------------------------------------------------\n\nconst appUninstallCommand = (context: CliContext): CommandModule => ({\n command: \"uninstall <app-id>\",\n describe: \"remove a registration; linked external targets are retained by default\",\n builder: (yargs: Argv) =>\n yargs\n .positional(\"app-id\", { type: \"string\", demandOption: true })\n .option(\"stop-running\", { type: \"boolean\", default: false })\n .option(\"purge-target\", { type: \"boolean\", default: false, describe: \"ALSO delete a linked external target after revalidation\" })\n .option(\"json\", { type: \"boolean\", default: false }),\n handler: async (argv) => {\n const json = (argv.json as boolean) === true;\n const result = await uninstallApp({\n appId: argv[\"app-id\"] as string,\n ...(context.homeDir === undefined ? {} : { homeDir: context.homeDir }),\n stopRunning: (argv[\"stop-running\"] as boolean) === true,\n purgeTarget: (argv[\"purge-target\"] as boolean) === true,\n });\n finish(context, asResourceResult(result), json, (value) =>\n [\n `removed registration: ${value.registrationPath}`,\n value.linkRemoved ? `removed link: ${value.payloadPath}` : `removed payload: ${value.payloadPath}`,\n value.targetDeleted ? `external target DELETED: ${value.payloadPath}` : value.linkRemoved ? `external target retained: ${value.payloadPath}` : \"\",\n value.manualPinCleanupHint,\n ].filter(Boolean).join(\"\\n\"),\n );\n },\n});\n\nconst appCommand = (context: CliContext): CommandModule => ({\n command: \"app\",\n describe: \"manage registered applications\",\n builder: (yargs: Argv) =>\n yargs\n .command(appListCommand(context))\n .command(appEditCommand(context))\n .command(appCopyCommand(context))\n .command(appExportCommand(context))\n .command(appUninstallCommand(context))\n .demandCommand(1, \"app requires a subcommand: list | edit | copy | export | uninstall\"),\n handler: () => undefined,\n});\n\n// ---------------------------------------------------------------------------\n// skill\n// ---------------------------------------------------------------------------\n\nconst skillReadCommand = (context: CliContext): CommandModule => ({\n command: \"read [path]\",\n describe: \"write one packaged skill file (default SKILL.md)\",\n builder: (yargs: Argv) => yargs\n .positional(\"path\", { type: \"string\", default: \"SKILL.md\" })\n .option(\"json\", { type: \"boolean\", default: false }),\n handler: async (argv) => {\n const json = (argv.json as boolean) === true;\n const root = await resolveSkillRoot();\n if (!root.ok) {\n finish(context, { ok: false, error: { code: root.error.code, message: root.error.message } }, json);\n return;\n }\n const validated = validateSkillPath((argv.path as string | undefined) ?? \"SKILL.md\");\n if (!validated.ok) {\n finish(context, { ok: false, error: { code: validated.error.code, message: validated.error.message } }, json);\n return;\n }\n const content = await readSkillFile(root.value, validated.value);\n finish(context, asResourceResult(content), json, (value) => value.replace(/\\n$/, \"\"));\n },\n});\n\nconst skillListCommand = (context: CliContext): CommandModule => ({\n command: \"list [path]\",\n describe: \"list logical relative files beneath the packaged skill root\",\n builder: (yargs: Argv) => yargs\n .positional(\"path\", { type: \"string\", default: \"\" })\n .option(\"json\", { type: \"boolean\", default: false }),\n handler: async (argv) => {\n const json = (argv.json as boolean) === true;\n const root = await resolveSkillRoot();\n if (!root.ok) {\n finish(context, { ok: false, error: { code: root.error.code, message: root.error.message } }, json);\n return;\n }\n const listed = await listSkillFiles(root.value, (argv.path as string | undefined) ?? \"\");\n finish(context, asResourceResult(listed), json, (entries) =>\n entries.map((entry) => `${entry.type === \"directory\" ? \"d\" : \"-\"} ${entry.path}`).join(\"\\n\"),\n );\n },\n});\n\nconst skillCommand = (context: CliContext): CommandModule => ({\n command: \"skill\",\n describe: \"read the packaged English AI Skill (help center)\",\n builder: (yargs: Argv) =>\n yargs\n .command(skillListCommand(context))\n .command(skillReadCommand(context))\n .option(\"json\", { type: \"boolean\", default: false }),\n handler: async (argv) => {\n // Bare `skill` reads SKILL.md.\n const json = (argv.json as boolean) === true;\n const root = await resolveSkillRoot();\n if (!root.ok) {\n finish(context, { ok: false, error: { code: root.error.code, message: root.error.message } }, json);\n return;\n }\n const content = await readSkillFile(root.value, \"SKILL.md\");\n finish(context, asResourceResult(content), json, (value) => value.replace(/\\n$/, \"\"));\n },\n});\n\n// ---------------------------------------------------------------------------\n// web + root\n// ---------------------------------------------------------------------------\n\nconst webCommand = (context: CliContext): CommandModule => ({\n command: \"web\",\n describe: \"start the WebUI wizard on loopback (default when no subcommand is given)\",\n builder: (yargs: Argv) =>\n yargs\n .option(\"port\", { type: \"number\", describe: \"bind the wizard server to a specific loopback port\" })\n // Idiomatic yargs negation: declaring `open` (default true) makes\n // --no-open its strict-mode-safe negation.\n .option(\"open\", { type: \"boolean\", default: true, describe: \"open the default browser (negate with --no-open)\" })\n .option(\"json\", { type: \"boolean\", default: false, hidden: true }),\n handler: async (argv) => {\n if (context.runWeb === undefined) {\n context.streams.err(\"web adapter unavailable in this build\");\n exitSetter(context)(10);\n return;\n }\n const port = argv.port as number | undefined;\n const open = argv.open !== false; // --no-open negates to false\n exitSetter(context)(await context.runWeb({\n ...(port === undefined ? {} : { port }),\n open,\n }));\n },\n});\n\nexport const buildRootCommands = (context: CliContext): CommandModule[] => [\n webCommand(context),\n createCommand(context),\n appCommand(context),\n skillCommand(context),\n];\n\n/** Parse-and-dispatch entry used by the published bin (non-exiting). */\nexport const dispatchCli = async (\n argv: readonly string[],\n context: CliContext,\n): Promise<number> => {\n const yargs = (await import(\"yargs\")).default as unknown as import(\"yargs\").Argv;\n let exitCode = 0;\n const dispatchContext: CliContext = { ...context, setExit: (code) => { exitCode = code; } };\n if (argv.length === 0) {\n // Bare `create-opentray` keeps dispatching to the WebUI adapter.\n if (context.runWeb === undefined) {\n context.streams.err(\"web adapter unavailable in this build\");\n return 10;\n }\n return dispatchContext.runWeb?.({ open: true }).then((code) => {\n exitCode = code;\n return code;\n }) ?? ((context.streams.err(\"web adapter unavailable in this build\"), 10));\n }\n const parser = yargs(argv.slice(0))\n .scriptName(\"create-opentray\")\n .usage(\"create-opentray — turn a start command into an OpenTray-hosted desktop app\")\n .strict()\n .exitProcess(false)\n .help()\n .command(buildRootCommands(dispatchContext) as never);\n try {\n // parseAsync awaits async command handlers; help/usage text is written\n // by yargs itself. Parse failures surface here as thrown errors.\n await parser.parseAsync(argv.slice(0));\n return exitCode;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n if (argv.includes(\"--json\")) {\n dispatchContext.streams.out(JSON.stringify({ ok: false, error: { code: \"invalid_config\", message } }));\n } else {\n dispatchContext.streams.err(message);\n }\n return 2;\n }\n};\n","#!/usr/bin/env node\n// Orthogonal intents (maintained 2026-08-18; original user requests: the\n// original `npx create-opentray` WebUI wizard; the add-create-opentray-cli\n// yargs command tree with non-interactive create, app management, and the\n// packaged AI skill):\n// 1. Dispatch every invocation through the yargs CLI adapter.\n// 2. Keep the bare root dispatching to the WebUI adapter for compatibility.\n// 3. Tear down the preview process tree on exit signals.\n\nimport { spawn } from \"node:child_process\";\nimport { realpathSync } from \"node:fs\";\nimport { readFile } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nimport { dispatchCli, consoleStreams } from \"@create-opentray/cli\";\nimport { tmpdir } from \"node:os\";\nimport { join } from \"node:path\";\n\nimport { createWizardServer } from \"./server\";\nimport {\n createWizardSession,\n normalizeFamilyProjection,\n type WizardCommandOptions,\n type WizardFormValues,\n} from \"./wizard\";\nimport { ensureLoopbackNoProxy } from \"@create-opentray/core\";\n\nexport interface WizardCliOptions {\n readonly open: boolean;\n readonly port: number | undefined;\n readonly pm: \"npm\" | \"pnpm\" | \"bun\" | undefined;\n readonly skipInstall: boolean;\n readonly force: boolean;\n readonly targetDir: string | undefined;\n}\n\n\nexport const parseWizardCli = (argv: readonly string[]): WizardCliOptions => {\n const options: {\n open: boolean;\n port?: number;\n pm?: \"npm\" | \"pnpm\" | \"bun\";\n skipInstall: boolean;\n force: boolean;\n targetDir?: string;\n } = { open: true, skipInstall: false, force: false };\n const positional: string[] = [];\n for (let index = 0; index < argv.length; index += 1) {\n const arg = argv[index];\n if (arg === undefined) {\n continue;\n }\n if (arg === \"--no-open\") {\n options.open = false;\n } else if (arg === \"--skip-install\") {\n options.skipInstall = true;\n } else if (arg === \"--force\") {\n options.force = true;\n } else if (arg === \"--port\") {\n const value = argv[index + 1];\n const port = Number.parseInt(value ?? \"\", 10);\n if (Number.isInteger(port) && port > 0 && port < 65_536) {\n options.port = port;\n index += 1;\n }\n } else if (arg === \"--pm\") {\n const value = argv[index + 1];\n if (value === \"npm\" || value === \"pnpm\" || value === \"bun\") {\n options.pm = value;\n index += 1;\n }\n } else if (arg === \"--help\" || arg === \"-h\") {\n options.open = false;\n positional.length = 0;\n break;\n } else if (!arg.startsWith(\"--\")) {\n positional.push(arg);\n }\n }\n const [target] = positional;\n return {\n open: options.open,\n port: options.port,\n pm: options.pm,\n skipInstall: options.skipInstall,\n force: options.force,\n targetDir: target,\n };\n};\n\nconst readDependencyRange = async (): Promise<string> => {\n const packageJsonUrl = new URL(\"../package.json\", import.meta.url);\n try {\n const parsed = JSON.parse(await readFile(packageJsonUrl, \"utf8\")) as {\n version?: string;\n };\n if (typeof parsed.version === \"string\" && /^\\d/u.test(parsed.version)) {\n // Generated apps stay on the same release line as this initializer.\n return `^${parsed.version}`;\n }\n } catch {\n // Fall through to the workspace dev default below.\n }\n return \"latest\";\n};\n\nexport const openBrowser = async (url: string): Promise<void> => {\n const platform = process.platform;\n const command =\n platform === \"darwin\" ? \"open\" : platform === \"win32\" ? \"cmd\" : \"xdg-open\";\n const args =\n platform === \"win32\" ? [\"/c\", \"start\", \"\", url] : platform === \"darwin\" ? [url] : [url];\n const child = spawn(command, args, { stdio: \"ignore\", detached: true, windowsHide: true });\n child.unref();\n};\n\nconst runWebAdapter = async (options: {\n readonly port?: number;\n readonly open: boolean;\n}): Promise<number> => {\n ensureLoopbackNoProxy();\n\n // pnpm/npm run scripts execute with the package directory as cwd; INIT_CWD\n // preserves the directory the user actually invoked the command from.\n const invocationDir = process.env.INIT_CWD || process.cwd();\n\n/** Draft command options carry fields across versions — forward only the\n * known-safe, type-checked subset (D4/D11:envPresetDisabled 与 family 作者\n * 状态随草稿重启恢复,Codex B2)。 */\nconst normalizeDraftCommandOptions = (\n raw: unknown,\n): Partial<WizardCommandOptions> | undefined => {\n if (typeof raw !== \"object\" || raw === null) {\n return undefined;\n }\n const source = raw as Record<string, unknown>;\n const patch: Partial<{ -readonly [K in keyof WizardCommandOptions]: WizardCommandOptions[K] }> = {};\n if (typeof source.cwd === \"string\") {\n patch.cwd = source.cwd;\n }\n if (source.argsMode === \"string\" || source.argsMode === \"array\") {\n patch.argsMode = source.argsMode;\n }\n if (Array.isArray(source.env)) {\n const entries = source.env.filter(\n (entry): entry is { key: string; value: string } =>\n typeof entry === \"object\" &&\n entry !== null &&\n typeof (entry as { key?: unknown }).key === \"string\" &&\n typeof (entry as { value?: unknown }).value === \"string\",\n );\n patch.env = entries;\n }\n if (source.family !== undefined) {\n const normalized = normalizeFamilyProjection(source.family);\n if (normalized !== undefined) {\n patch.family = normalized;\n }\n }\n return Object.keys(patch).length > 0 ? patch : undefined;\n};\n\n/** Read a persisted wizard draft for a port (best-effort). 任一键存在即部分\n * 恢复(form/command/commandOptions 独立;Codex R2-B1:作者状态与命令可\n * 先于 form 落盘)。 */\nconst readDraft = async (\n port: number | undefined,\n): Promise<{\n form: WizardFormValues | undefined;\n command: string | undefined;\n commandOptions: Partial<WizardCommandOptions> | undefined;\n} | undefined> => {\n try {\n const path = join(tmpdir(), `create-opentray-draft-${port ?? 0}.json`);\n const raw = await readFile(path, \"utf8\");\n const parsed = JSON.parse(raw) as {\n form?: WizardFormValues;\n command?: string;\n commandOptions?: unknown;\n };\n const commandOptions = normalizeDraftCommandOptions(parsed.commandOptions);\n if (\n parsed.form === undefined &&\n parsed.command === undefined &&\n commandOptions === undefined\n ) {\n return undefined;\n }\n return {\n form: parsed.form,\n command: parsed.command,\n commandOptions,\n };\n } catch {\n return undefined;\n }\n};\n const dependencyRange = await readDependencyRange();\n\n // Draft seed: when the wizard restarts on the same port, a previous\n // in-progress draft (form values + command) is restored so a browser\n // close/reopen loses nothing.\n const draftSeed = await readDraft(options.port);\n const server = await createWizardServer(\n (emit) => {\n const session = createWizardSession({\n cwd: invocationDir,\n skipInstall: false,\n force: false,\n dependencyRange,\n emit,\n });\n if (draftSeed !== undefined) {\n if (draftSeed.form !== undefined) {\n session.updateForm(draftSeed.form);\n }\n if (draftSeed.commandOptions !== undefined) {\n session.updateCommandOptions(draftSeed.commandOptions);\n }\n if (draftSeed.command !== undefined && draftSeed.command.length > 0) {\n session.prime(draftSeed.command);\n }\n }\n return session;\n },\n options.port === undefined ? {} : { port: options.port },\n );\n\n console.log(`create-opentray wizard: ${server.url}`);\n console.log(`working directory: ${invocationDir}`);\n\n if (options.open) {\n await openBrowser(server.url);\n }\n\n const shutdown = (): void => {\n void (async () => {\n await server.session.stop();\n await server.close();\n process.exit(0);\n })();\n };\n process.once(\"SIGINT\", shutdown);\n process.once(\"SIGTERM\", shutdown);\n\n // Keep the process alive until the wizard is closed.\n await new Promise<void>(() => {});\n return 0;\n};\n\nexport const main = async (argv: readonly string[]): Promise<number> => {\n // Legacy wizard flags (bare root) keep working through the same parser.\n const legacy = parseWizardCli(argv.filter((arg) => !arg.startsWith(\"--\") || [\"--no-open\",\"--port\",\"--pm\",\"--skip-install\",\"--force\",\"--help\",\"-h\"].includes(arg)));\n return dispatchCli(argv, {\n streams: consoleStreams,\n runWeb: async (webOptions) =>\n runWebAdapter({\n ...webOptions,\n ...(webOptions.port === undefined && legacy.port !== undefined ? { port: legacy.port } : {}),\n open: webOptions.open && legacy.open,\n }),\n });\n};\n\nconst isMainModule = (): boolean => {\n // The bin entry is the module Node loaded as the main script (argv[1]).\n // tsdown bundles this file into the bin chunk, and argv[1] points at the\n // bin.mjs re-export, so also accept that adjacency: when this module is\n // imported through the bin entry rather than the library entry.\n // Path comparisons use realpath: npx/npm invoke the bin through a\n // node_modules/.bin SYMLINK, and resolve() alone keeps the link path —\n // argv[1] would never equal the real module file and main() silently\n // never ran (npx create-opentray exited 0 with no output).\n const entryPath = process.argv[1];\n if (entryPath === undefined) return false;\n const sameFile = (a: string, b: string): boolean => {\n try {\n return realpathSync(resolve(a)) === realpathSync(resolve(b));\n } catch {\n return resolve(a) === resolve(b);\n }\n };\n const modulePath = fileURLToPath(import.meta.url);\n if (sameFile(entryPath, modulePath)) return true;\n return sameFile(entryPath, modulePath.replace(/bin-[^/]*\\.mjs$/u, \"bin.mjs\"));\n};\n\nif (isMainModule()) {\n void main(process.argv.slice(2)).then((code) => {\n process.exitCode = code;\n });\n}\n"],"x_google_ignoreList":[1,2,3,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67],"mappings":"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"}
|