vxrn 2.13.10 → 2.14.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/exports/prebuildWithoutExpo.mjs +15 -1
- package/dist/exports/prebuildWithoutExpo.mjs.map +1 -1
- package/dist/exports/prebuildWithoutExpo.native.js +15 -1
- package/dist/exports/prebuildWithoutExpo.native.js.map +1 -1
- package/dist/utils/nativeSourceContract.mjs +742 -97
- package/dist/utils/nativeSourceContract.mjs.map +1 -1
- package/dist/utils/nativeSourceContract.native.js +758 -70
- package/dist/utils/nativeSourceContract.native.js.map +1 -1
- package/expo-plugin.cjs +15 -2
- package/native-project-patches.cjs +42 -0
- package/package.json +12 -12
- package/src/exports/expoPlugin.test.mjs +52 -0
- package/src/exports/prebuildWithoutExpo.test.ts +18 -0
- package/src/exports/prebuildWithoutExpo.ts +18 -1
- package/src/utils/nativeSourceContract.test.ts +74 -9
- package/src/utils/nativeSourceContract.ts +810 -105
- package/types/exports/prebuildWithoutExpo.d.ts.map +1 -1
- package/types/utils/nativeSourceContract.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nativeSourceContract.js","names":[],"sources":["utils/nativeSourceContract.js"],"sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport { existsSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join, relative } from \"node:path\";\nimport { swiftPackageDirectories, swiftPackageId } from \"./swiftPackageId\";\nconst GENERATED_HEADER = \"// generated by one typegen; edits will be replaced\\n\";\nconst SKIP_SOURCE_DIRS = /* @__PURE__ */ new Set([\"node_modules\", \"ios\", \"android\", \"dist\", \"types\", \"build\", \".build\"]);\nfunction writeGeneratedFile(file, content) {\n try {\n if (readFileSync(file, \"utf8\") === content) return;\n } catch (error) {\n if (!error || typeof error !== \"object\" || !(\"code\" in error) || error.code !== \"ENOENT\") throw error;\n }\n const temporary = join(dirname(file), `.${basename(file)}.${randomUUID()}.tmp`);\n try {\n writeFileSync(temporary, content);\n renameSync(temporary, file);\n } finally {\n rmSync(temporary, { force: true });\n }\n}\nfunction fail(file, token, message) {\n throw new Error(`${file}:${(token?.line ?? 0) + 1}:${(token?.column ?? 0) + 1}: ${message}`);\n}\nfunction tokens(file, source) {\n const result = [];\n let offset = 0;\n let line = 0;\n let column = 0;\n const advance = () => {\n if (source[offset] === \"\\n\") {\n line++;\n column = 0;\n } else column++;\n offset++;\n };\n while (offset < source.length) {\n const char = source[offset];\n if (/\\s/.test(char)) {\n advance();\n continue;\n }\n if (source.startsWith(\"//\", offset)) {\n while (offset < source.length && source[offset] !== \"\\n\") advance();\n continue;\n }\n if (source.startsWith(\"/*\", offset)) {\n let depth = 0;\n do {\n if (source.startsWith(\"/*\", offset)) {\n depth++;\n advance();\n advance();\n } else if (source.startsWith(\"*/\", offset)) {\n depth--;\n advance();\n advance();\n } else advance();\n } while (depth > 0 && offset < source.length);\n if (depth > 0) fail(file, { text: \"/*\", line, column }, \"unclosed native source comment\");\n continue;\n }\n if (char === '\"' || char === \"'\") {\n const quote = source.startsWith(char.repeat(3), offset) ? char.repeat(3) : char;\n for (let n = 0; n < quote.length; n++) advance();\n while (offset < source.length && !source.startsWith(quote, offset)) {\n if (source[offset] === \"\\\\\") advance();\n advance();\n }\n if (offset >= source.length) fail(file, { text: quote, line, column }, \"unclosed native source string\");\n for (let n = 0; n < quote.length; n++) advance();\n continue;\n }\n const start = offset;\n const startLine = line;\n const startColumn = column;\n if (/[A-Za-z_]/.test(char)) {\n while (offset < source.length && /[A-Za-z0-9_]/.test(source[offset])) advance();\n } else if (source.startsWith(\"->\", offset)) {\n advance();\n advance();\n } else advance();\n result.push({ text: source.slice(start, offset), line: startLine, column: startColumn });\n }\n return result;\n}\nfunction close(file, list, start, left, right) {\n let depth = 0;\n for (let i = start; i < list.length; i++) {\n if (list[i].text === left) depth++;\n if (list[i].text === right && --depth === 0) return i;\n }\n fail(file, list[start], `unclosed ${left} in native export`);\n}\nfunction split(list, separator) {\n const parts = [];\n let start = 0;\n let square = 0;\n let angle = 0;\n let round = 0;\n for (let i = 0; i < list.length; i++) {\n const value = list[i].text;\n if (value === \"[\") square++;\n if (value === \"]\") square--;\n if (value === \"<\") angle++;\n if (value === \">\") angle--;\n if (value === \"(\") round++;\n if (value === \")\") round--;\n if (value === separator && square === 0 && angle === 0 && round === 0) {\n parts.push(list.slice(start, i));\n start = i + 1;\n }\n }\n parts.push(list.slice(start));\n return parts;\n}\nfunction arrayOf(element) {\n return element.includes(\" | \") ? `(${element})[]` : `${element}[]`;\n}\nfunction tsType(file, list, language, named) {\n if (list.length === 0) fail(file, list[0], \"native export needs an explicit type\");\n if (list.at(-1)?.text === \"?\") {\n const inner = tsType(file, list.slice(0, -1), language, named);\n return {\n text: `${inner.text} | null`,\n wire: inner.wire ? { kind: \"nullable\", inner: inner.wire } : null\n };\n }\n const value = list.map((token) => token.text).join(\"\");\n if (value === \"String\") return { text: \"string\", wire: null };\n if (value === \"Bool\" || value === \"Boolean\") return { text: \"boolean\", wire: null };\n if ([\"Double\", \"Float\", \"Int\", \"Long\"].includes(value)) return { text: \"number\", wire: null };\n if (value === \"Void\" || value === \"Unit\") return { text: \"void\", wire: null };\n const dateTypes = language === \"swift\" ? [\"Date\", \"Foundation.Date\"] : [\"Date\", \"java.util.Date\"];\n if (dateTypes.includes(value)) return { text: \"Date\", wire: { kind: \"date\" } };\n const dataTypes = language === \"swift\" ? [\"Data\", \"Foundation.Data\"] : [\"ByteArray\"];\n if (dataTypes.includes(value)) {\n return { text: \"Uint8Array\", wire: { kind: \"data\" } };\n }\n if (language === \"swift\" && list[0].text === \"[\" && list.at(-1)?.text === \"]\") {\n const inner = list.slice(1, -1);\n const entries = split(inner, \":\");\n if (entries.length === 1) {\n const element = tsType(file, inner, language, named);\n return {\n text: arrayOf(element.text),\n wire: element.wire ? { kind: \"array\", element: element.wire } : null\n };\n }\n if (entries.length === 2 && entries[0].map((token) => token.text).join(\"\") === \"String\") {\n const element = tsType(file, entries[1], language, named);\n return {\n text: `Record<string, ${element.text}>`,\n wire: element.wire ? { kind: \"map\", value: element.wire } : null\n };\n }\n }\n if (language === \"kotlin\" && list[1]?.text === \"<\" && list.at(-1)?.text === \">\") {\n const entries = split(list.slice(2, -1), \",\");\n if (list[0].text === \"List\" && entries.length === 1) {\n const element = tsType(file, entries[0], language, named);\n return {\n text: arrayOf(element.text),\n wire: element.wire ? { kind: \"array\", element: element.wire } : null\n };\n }\n if (list[0].text === \"Map\" && entries.length === 2 && entries[0].map((token) => token.text).join(\"\") === \"String\") {\n const element = tsType(file, entries[1], language, named);\n return {\n text: `Record<string, ${element.text}>`,\n wire: element.wire ? { kind: \"map\", value: element.wire } : null\n };\n }\n }\n if (list.length === 1 && /^[A-Z][A-Za-z0-9_]*$/.test(value)) {\n const struct = named.structs.get(value);\n if (struct) {\n if (struct.generic) fail(file, list[0], `generic struct ${value} is unsupported`);\n if (struct.problem) fail(file, list[0], struct.problem);\n if (!struct.codable) fail(file, list[0], `struct ${value} must conform to Codable to cross the boundary`);\n return { text: value, wire: { kind: \"struct\", name: value } };\n }\n const enumType = named.enums.get(value);\n if (enumType) {\n if (!enumType.usable) fail(file, list[0], enumType.problem);\n return { text: value, wire: { kind: \"enum\", name: value } };\n }\n }\n fail(file, list[0], `unsupported native export type ${value}`);\n}\nfunction parameters(file, list, language, named) {\n if (list.length === 0) return [];\n return split(list, \",\").map((part, index) => {\n if (part.some((token) => token.text === \"=\")) fail(file, part[0], \"default native export arguments are unsupported\");\n const colon = part.findIndex((token) => token.text === \":\");\n if (colon < 0) fail(file, part[0], \"native export parameter needs an explicit type\");\n const names = part.slice(0, colon).filter((token) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(token.text));\n const name = (language === \"swift\" ? names.at(-1) : names[0])?.text ?? `arg${index}`;\n if (name === \"_\") fail(file, part[0], \"native export parameter needs an internal name\");\n const label = language === \"swift\" ? names[0]?.text ?? name : null;\n const sourceType = part.slice(colon + 1);\n const type = tsType(file, sourceType, language, named);\n return {\n name,\n label,\n type: type.text,\n nativeType: sourceType.map((token) => token.text).join(\"\"),\n wire: type.wire ?? void 0\n };\n });\n}\nconst DECLARATION_MODIFIERS = /* @__PURE__ */ new Set([\n \"private\",\n \"fileprivate\",\n \"public\",\n \"internal\",\n \"open\",\n \"override\",\n \"static\",\n \"class\",\n \"final\",\n \"suspend\",\n \"inline\",\n \"operator\",\n \"infix\",\n \"tailrec\",\n \"external\",\n \"nonisolated\",\n \"isolated\",\n \"mutating\",\n \"nonmutating\",\n \"dynamic\",\n \"required\",\n \"convenience\",\n \"optional\"\n]);\nfunction declarationStart(list, floor, keyword) {\n let first = keyword;\n while (first > floor) {\n const text = list[first - 1].text;\n if (DECLARATION_MODIFIERS.has(text)) {\n first--;\n continue;\n }\n if (list[first - 2]?.text === \"@\") {\n first -= 2;\n continue;\n }\n if (text === \")\") {\n let open = first - 1;\n for (let depth = 0; open > floor; open--) {\n if (list[open].text === \")\") depth++;\n if (list[open].text === \"(\" && --depth === 0) break;\n }\n if (list[open - 2]?.text === \"@\") {\n first = open - 2;\n continue;\n }\n }\n break;\n }\n return first;\n}\nfunction declarationModifiers(list, floor, keyword) {\n const words = [];\n for (let i = declarationStart(list, floor, keyword), depth = 0; i < keyword; i++) {\n const text = list[i].text;\n if (text === \"(\") depth++;\n else if (text === \")\") depth--;\n else if (depth === 0) words.push(text);\n }\n return words;\n}\nfunction subscriptionPayload(file, typeTokens, language, named) {\n try {\n if (typeTokens.at(-1)?.text === \"?\") return null;\n let fn = typeTokens;\n if (language === \"swift\" && fn[0]?.text === \"@\" && fn[1]?.text === \"escaping\") fn = fn.slice(2);\n if (fn[0]?.text === \"(\" && close(file, fn, 0, \"(\", \")\") === fn.length - 1 && fn.some((token) => token.text === \"->\")) {\n fn = fn.slice(1, -1);\n }\n const arrow = fn.findIndex((token) => token.text === \"->\");\n if (arrow <= 0 || fn[0]?.text !== \"(\" || close(file, fn, 0, \"(\", \")\") !== arrow - 1) return null;\n const result = fn.slice(arrow + 1);\n const voidResult = result.length === 1 && (result[0].text === \"Void\" || result[0].text === \"Unit\") || result.length === 2 && result[0].text === \"(\" && result[1].text === \")\";\n if (!voidResult) return null;\n const inner = fn.slice(1, arrow - 1);\n if (inner.length === 0) return [];\n return split(inner, \",\").map((arg) => {\n const colon = arg.findIndex((token) => token.text === \":\");\n const type = colon < 0 ? arg : arg.slice(colon + 1);\n const resolved = tsType(file, type, language, named);\n return {\n type: resolved.text,\n nativeType: type.map((token) => token.text).join(\"\"),\n wire: resolved.wire ?? void 0\n };\n });\n } catch {\n return null;\n }\n}\nfunction methods(file, list, start, end, language, named) {\n const result = [];\n let i = start + 1;\n let previous = i;\n const keyword = language === \"swift\" ? \"func\" : \"fun\";\n while (i < end) {\n if (list[i].text === \"{\") {\n i = close(file, list, i, \"{\", \"}\") + 1;\n previous = i;\n continue;\n }\n if (list[i].text !== keyword) {\n i++;\n continue;\n }\n const modifiers = declarationModifiers(list, previous, i);\n const hidden = modifiers.includes(\"private\") || modifiers.includes(\"fileprivate\");\n if (!hidden && (modifiers.includes(\"static\") || modifiers.includes(\"class\"))) {\n fail(file, list[i], \"static native exports are unsupported\");\n }\n const name = list[i + 1]?.text;\n if (!name || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) fail(file, list[i], \"native export has no method name\");\n if (result.some((method) => method.name === name)) fail(file, list[i], `overloaded native export ${name} is unsupported`);\n if (list[i + 2]?.text === \"<\") fail(file, list[i], \"generic native exports are unsupported\");\n const open = i + 2;\n if (list[open]?.text !== \"(\") fail(file, list[i], \"native export has no parameter list\");\n const closing = close(file, list, open, \"(\", \")\");\n let headerEnd = closing + 1;\n while (headerEnd < end && ![\"{\", \"=\", \";\"].includes(list[headerEnd].text)) headerEnd++;\n const header = list.slice(closing + 1, headerEnd);\n const separator = header.findIndex((token) => token.text === (language === \"swift\" ? \"->\" : \":\"));\n const sourceType = hidden || separator < 0 ? [] : header.slice(separator + 1);\n const type = sourceType.length === 0 ? { text: \"void\", wire: null } : tsType(file, sourceType, language, named);\n let subscription;\n if (!hidden && type.text === \"void\") {\n const parts = split(list.slice(open + 1, closing), \",\");\n if (parts.length === 1 && parts[0].length > 0) {\n const colon = parts[0].findIndex((token) => token.text === \":\");\n if (colon >= 0) {\n const payload = subscriptionPayload(file, parts[0].slice(colon + 1), language, named);\n if (payload) subscription = { payload };\n }\n }\n }\n if (!hidden) {\n result.push({\n name,\n parameters: subscription ? [] : parameters(file, list.slice(open + 1, closing), language, named),\n result: type.text,\n nativeResult: sourceType.length === 0 ? language === \"swift\" ? \"Void\" : \"Unit\" : sourceType.map((token) => token.text).join(\"\"),\n resultWire: type.wire ?? void 0,\n subscription,\n throws: language === \"swift\" ? header.some((token) => token.text === \"throws\") : true,\n async: language === \"swift\" ? header.some((token) => token.text === \"async\") : modifiers.includes(\"suspend\")\n });\n }\n if (list[headerEnd]?.text === \"{\") i = close(file, list, headerEnd, \"{\", \"}\") + 1;\n else if (list[headerEnd]?.text === \"=\") {\n const bodyLine = list[headerEnd].line;\n i = headerEnd + 1;\n while (i < end && list[i].line === bodyLine && list[i].text !== \";\") i++;\n } else i = headerEnd + 1;\n previous = i;\n }\n return result;\n}\nfunction callbackProp(file, name, typeTokens, optional, language, named) {\n const nullable = typeTokens.at(-1)?.text === \"?\";\n let fn = nullable ? typeTokens.slice(0, -1) : typeTokens;\n if (fn[0]?.text === \"(\" && close(file, fn, 0, \"(\", \")\") === fn.length - 1 && fn.some((token) => token.text === \"->\")) {\n fn = fn.slice(1, -1);\n }\n const arrow = fn.findIndex((token) => token.text === \"->\");\n if (arrow < 0 || fn[0]?.text !== \"(\" || close(file, fn, 0, \"(\", \")\") !== arrow - 1) return null;\n const result = fn.slice(arrow + 1).map((token) => token.text).join(\"\");\n const unit = language === \"swift\" ? \"Void\" : \"Unit\";\n if (result !== unit && !(language === \"swift\" && result === \"()\")) {\n fail(file, typeTokens[0], `view callback ${name} must return ${unit}`);\n }\n const inner = fn.slice(1, arrow - 1);\n const callback = inner.length === 0 ? [] : split(inner, \",\").map((arg) => {\n const colon = arg.findIndex((token) => token.text === \":\");\n const type = colon < 0 ? arg : arg.slice(colon + 1);\n const resolved = tsType(file, type, language, named);\n return {\n type: resolved.text,\n nativeType: type.map((token) => token.text).join(\"\"),\n wire: resolved.wire ?? void 0\n };\n });\n const signature = `(${callback.map((arg, index) => `value${index}: ${arg.type}`).join(\", \")}) => void`;\n const nativeType = typeTokens.map((token) => token.text).join(\"\");\n return { name, type: nullable ? `(${signature}) | null` : signature, nativeType, optional, callback };\n}\nfunction viewProp(file, part, named) {\n const colon = part.findIndex((token) => token.text === \":\");\n if (colon !== 1 || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(part[0].text)) {\n fail(file, part[0], \"composable parameter needs a name and an explicit type\");\n }\n const name = part[0].text;\n const equals = split(part.slice(colon + 1), \"=\");\n const typeTokens = equals[0];\n const fallback = equals[1]?.map((token) => token.text).join(\"\");\n const nativeType = typeTokens.map((token) => token.text).join(\"\");\n if (nativeType === \"Modifier\") {\n if (fallback !== \"Modifier\") fail(file, part[0], \"a composable modifier parameter needs the default Modifier\");\n return null;\n }\n const nullable = typeTokens.at(-1)?.text === \"?\";\n if (fallback !== void 0 && !(nullable && fallback === \"null\")) {\n fail(file, part[0], `composable parameter ${name} may only default to null`);\n }\n const optional = fallback !== void 0;\n const callback = callbackProp(file, name, typeTokens, optional, \"kotlin\", named);\n if (callback) return callback;\n const resolved = tsType(file, typeTokens, \"kotlin\", named);\n return { name, type: resolved.text, nativeType, optional, callback: null, wire: resolved.wire ?? void 0 };\n}\nconst PLAIN_ATTRIBUTES = /* @__PURE__ */ new Set([\"MainActor\", \"available\", \"objc\", \"nonobjc\", \"preconcurrency\"]);\nfunction storedProperty(file, list, i, previous, end, owner) {\n const at = list[i];\n const own = list.slice(declarationStart(list, previous, i), i).map((token) => token.text);\n const propName = list[i + 1]?.text ?? \"\";\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(propName)) fail(file, list[i], `${owner} has a property without a simple name`);\n let stop = i + 2;\n let depth = 0;\n while (stop < end) {\n const value = list[stop].text;\n if (depth === 0 && (value === \"=\" || value === \"{\" || value === \";\" || list[stop].line !== list[stop - 1].line)) break;\n if (value === \"(\" || value === \"[\" || value === \"<\") depth++;\n if (value === \")\" || value === \"]\" || value === \">\") depth--;\n stop++;\n }\n const typeTokens = list[i + 2]?.text === \":\" ? list.slice(i + 3, stop) : [];\n const valued = list[stop]?.text === \"=\";\n let next = stop;\n if (valued) {\n const valueLine = list[stop].line;\n while (next < end && list[next].line === valueLine && list[next].text !== \"{\") next++;\n }\n const block = list[next]?.text === \"{\";\n const computed = block && !valued && ![\"willSet\", \"didSet\"].includes(list[next + 1]?.text);\n const resume = block ? close(file, list, next, \"{\", \"}\") + 1 : next;\n return { at, own, propName, typeTokens, valued, stop, computed, resume };\n}\nfunction swiftView(file, list, keyword, floor, body, end, named) {\n const modifiers = declarationModifiers(list, floor, keyword);\n if (list[keyword].text !== \"struct\" || !modifiers.includes(\"public\")) return null;\n if (!list.slice(keyword + 2, body).some((token) => token.text === \"View\")) return null;\n const name = list[keyword + 1].text;\n if (!/^[A-Z][A-Za-z0-9_]*$/.test(name)) fail(file, list[keyword], \"an imported view needs a capitalized name\");\n if (list[keyword + 2]?.text === \"<\") fail(file, list[keyword], `generic view ${name} is unsupported`);\n const props = [];\n let i = body + 1;\n let previous = i;\n while (i < end) {\n const text = list[i].text;\n if (text === \"{\") {\n i = close(file, list, i, \"{\", \"}\") + 1;\n previous = i;\n continue;\n }\n if (text === \"init\" && list[i + 1]?.text === \"(\" && list[i - 1]?.text !== \".\") {\n fail(file, list[i], `view ${name} is imported through its memberwise initializer; remove init(...)`);\n }\n if (text !== \"let\" && text !== \"var\") {\n i++;\n continue;\n }\n const property = storedProperty(file, list, i, previous, end, `view ${name}`);\n const { at, own, propName, typeTokens, valued, stop } = property;\n i = property.resume;\n previous = i;\n const wrapper = own.findIndex((value, index) => own[index - 1] === \"@\" && !PLAIN_ATTRIBUTES.has(value));\n if (property.computed || own.includes(\"static\")) continue;\n if (wrapper >= 0) {\n if (valued || own[wrapper + 1] === \"(\") continue;\n fail(file, at, `@${own[wrapper]} ${propName} in view ${name} needs a value; pass a plain value and a callback instead`);\n }\n if (own.includes(\"private\") || own.includes(\"fileprivate\")) {\n if (valued) continue;\n fail(file, at, `private ${propName} in view ${name} needs a value, or the view cannot be built from javascript`);\n }\n if (valued && text === \"let\") continue;\n if (typeTokens.length === 0) fail(file, at, `view prop ${propName} needs an explicit type`);\n const nullable = typeTokens.at(-1)?.text === \"?\";\n if (valued && !(nullable && list[stop + 1]?.text === \"nil\" && list[stop + 2]?.line !== list[stop + 1].line)) {\n fail(file, list[stop], `view prop ${propName} may only default to nil`);\n }\n const callback = callbackProp(file, propName, typeTokens, nullable, \"swift\", named);\n if (callback) {\n props.push(callback);\n } else {\n const resolved = tsType(file, typeTokens, \"swift\", named);\n props.push({\n name: propName,\n type: resolved.text,\n nativeType: typeTokens.map((token) => token.text).join(\"\"),\n optional: nullable,\n callback: null,\n wire: resolved.wire ?? void 0\n });\n }\n }\n return { name, props };\n}\nfunction collectDataClass(file, list, keyword, name, token, generic, packageName) {\n const modifiers = declarationModifiers(list, 0, keyword - 1);\n let problem = null;\n if (modifiers.includes(\"private\")) {\n problem = `data class ${name} must be public to cross the boundary`;\n }\n let scan = keyword + 2;\n if (list[scan]?.text === \"<\") scan = close(file, list, scan, \"<\", \">\") + 1;\n while ([\"private\", \"protected\", \"public\", \"internal\", \"constructor\"].includes(list[scan]?.text)) scan++;\n const params = [];\n if (list[scan]?.text === \"(\") {\n const closing = close(file, list, scan, \"(\", \")\");\n for (const part of split(list.slice(scan + 1, closing), \",\")) {\n if (part.length > 0) params.push(part);\n }\n } else {\n return null;\n }\n if (list.slice(keyword + 2, scan).some((entry) => entry.text === \"private\" || entry.text === \"protected\")) {\n problem = problem ?? `data class ${name} must be public to cross the boundary`;\n }\n return { name, token, generic, codable: true, problem, body: [], params, packageName };\n}\nfunction collectSwiftEnum(file, body, name, token, generic, header) {\n const backing = header.some((entry) => entry.text === \"String\") ? \"string\" : header.some((entry) => entry.text === \"Int\") ? \"number\" : null;\n if (generic) {\n return { name, token, generic, usable: false, problem: `generic enum ${name} is unsupported`, backing: \"string\", cases: [] };\n }\n if (!backing) {\n return { name, token, generic, usable: false, problem: `enum ${name} needs a String or Int backing to cross the boundary`, backing: \"string\", cases: [] };\n }\n const inherits = header.map((entry) => entry.text);\n if (!inherits.includes(\"Codable\") && !(inherits.includes(\"Decodable\") && inherits.includes(\"Encodable\"))) {\n return { name, token, generic, usable: false, problem: `enum ${name} must conform to Codable to cross the boundary`, backing, cases: [] };\n }\n const memberStarters = /* @__PURE__ */ new Set([\n \"func\",\n \"var\",\n \"let\",\n \"init\",\n \"deinit\",\n \"subscript\",\n \"static\",\n \"public\",\n \"private\",\n \"fileprivate\",\n \"internal\",\n \"open\",\n \"final\",\n \"mutating\",\n \"nonmutating\",\n \"override\",\n \"lazy\",\n \"weak\",\n \"unowned\",\n \"required\",\n \"convenience\",\n \"dynamic\",\n \"indirect\",\n \"typealias\",\n \"import\"\n ]);\n const cases = [];\n let problem = null;\n let counter = 0;\n let i = 0;\n let depth = 0;\n while (i < body.length) {\n if (body[i].text === \"{\") {\n depth++;\n i++;\n continue;\n }\n if (body[i].text === \"}\") {\n depth--;\n i++;\n continue;\n }\n if (depth !== 0 || body[i].text !== \"case\") {\n i++;\n continue;\n }\n let stop = i + 1;\n let inner = 0;\n while (stop < body.length) {\n const value = body[stop].text;\n if (inner === 0 && (value === \";\" || value === \"case\" || memberStarters.has(value))) break;\n if (value === \"(\" || value === \"[\" || value === \"<\") inner++;\n if (value === \")\" || value === \"]\" || value === \">\") inner--;\n stop++;\n if (inner < 0) break;\n }\n for (const item of split(body.slice(i + 1, stop), \",\")) {\n const itemName = item[0]?.text ?? \"\";\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(itemName)) continue;\n if (item.some((entry) => entry.text === \"(\")) {\n problem = problem ?? `enum ${name} has associated values, which cannot cross the boundary`;\n continue;\n }\n if (item.some((entry) => entry.text === \"=\")) {\n problem = problem ?? `enum ${name} has an explicit raw value, which cannot cross the boundary`;\n continue;\n }\n cases.push({ name: itemName, value: backing === \"string\" ? itemName : counter });\n counter++;\n }\n i = stop;\n }\n return {\n name,\n token,\n generic,\n usable: problem === null,\n problem: problem ?? \"\",\n backing,\n cases\n };\n}\nfunction collectKotlinEnum(file, body, name, token) {\n const cases = [];\n let i = 0;\n const stopWords = /* @__PURE__ */ new Set([\n \";\",\n \"fun\",\n \"val\",\n \"var\",\n \"init\",\n \"companion\",\n \"constructor\",\n \"object\",\n \"inner\",\n \"abstract\",\n \"open\",\n \"override\",\n \"lateinit\",\n \"const\",\n \"public\",\n \"private\",\n \"protected\",\n \"internal\"\n ]);\n while (i < body.length && !stopWords.has(body[i].text)) {\n if (body[i].text === \",\") {\n i++;\n continue;\n }\n if (body[i].text === \"@\") {\n i += 2;\n if (body[i]?.text === \"(\") i = close(file, body, i, \"(\", \")\") + 1;\n continue;\n }\n const entry = body[i].text;\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(entry)) break;\n cases.push({ name: entry, value: entry });\n i++;\n while (i < body.length && (body[i].text === \"(\" || body[i].text === \"{\")) {\n i = close(file, body, i, body[i].text, body[i].text === \"(\" ? \")\" : \"}\") + 1;\n }\n }\n return {\n name,\n token,\n generic: false,\n usable: cases.length > 0,\n problem: cases.length > 0 ? \"\" : `enum class ${name} has no entries to cross the boundary`,\n backing: \"string\",\n cases\n };\n}\nconst STRUCT_MEMBER_WORDS = /* @__PURE__ */ new Set([\n \"init\",\n \"deinit\",\n \"func\",\n \"subscript\",\n \"struct\",\n \"enum\",\n \"class\",\n \"extension\",\n \"object\",\n \"static\"\n]);\nfunction swiftStructFields(file, struct, named) {\n const fields = [];\n const body = struct.body;\n const end = body.length;\n let i = 0;\n let previous = 0;\n while (i < end) {\n const text = body[i].text;\n if (text === \"{\") {\n i = close(file, body, i, \"{\", \"}\") + 1;\n previous = i;\n continue;\n }\n if (STRUCT_MEMBER_WORDS.has(text)) {\n let scan = i + 1;\n let angle = 0;\n let round = 0;\n while (scan < end) {\n const value = body[scan].text;\n if (value === \"<\") angle++;\n else if (value === \">\") angle--;\n else if (value === \"(\") round++;\n else if (value === \")\") round--;\n else if (value === \"{\" && angle === 0 && round === 0) break;\n else if (value === \";\" && angle === 0 && round === 0) break;\n scan++;\n }\n i = body[scan]?.text === \"{\" ? close(file, body, scan, \"{\", \"}\") + 1 : scan + 1;\n previous = i;\n continue;\n }\n if (text !== \"let\" && text !== \"var\") {\n i++;\n continue;\n }\n const property = storedProperty(file, body, i, previous, end, `struct ${struct.name}`);\n const { at, own, propName, typeTokens, valued } = property;\n i = property.resume;\n previous = i;\n if (property.computed || own.includes(\"static\")) continue;\n const wrapper = own.findIndex((value, index) => own[index - 1] === \"@\" && !PLAIN_ATTRIBUTES.has(value));\n if (wrapper >= 0) {\n fail(file, at, `@${own[wrapper]} ${propName} in struct ${struct.name} is unsupported; cross a plain value instead`);\n }\n if (own.includes(\"private\") || own.includes(\"fileprivate\")) {\n if (valued) continue;\n fail(file, at, `private ${propName} in struct ${struct.name} needs a value, or calls cannot supply it`);\n }\n if (typeTokens.length === 0) fail(file, at, `struct ${struct.name} field ${propName} needs an explicit type`);\n const resolved = tsType(file, typeTokens, \"swift\", named);\n fields.push({\n name: propName,\n type: resolved.text,\n nativeType: typeTokens.map((token) => token.text).join(\"\"),\n optional: valued,\n wire: resolved.wire ?? void 0\n });\n }\n return fields;\n}\nfunction kotlinStructFields(file, struct, named) {\n const fields = [];\n for (const part of struct.params) {\n const keyword = part.findIndex((token) => token.text === \"val\" || token.text === \"var\");\n if (keyword < 0) fail(file, part[0], `data class ${struct.name} field needs val or var`);\n if (part.some((token) => token.text === \"vararg\")) {\n fail(file, part[0], `data class ${struct.name} field ${part[keyword + 1]?.text ?? \"\"} is vararg, which cannot cross the boundary`);\n }\n const fieldName = part[keyword + 1]?.text ?? \"\";\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(fieldName)) {\n fail(file, part[keyword], `data class ${struct.name} has a field without a simple name`);\n }\n let colon = -1;\n let equals = -1;\n let depth = 0;\n for (let t = keyword + 2; t < part.length; t++) {\n const value = part[t].text;\n if (value === \"(\" || value === \"[\" || value === \"<\") depth++;\n else if (value === \")\" || value === \"]\" || value === \">\") depth--;\n else if (depth === 0 && value === \":\" && colon < 0) colon = t;\n else if (depth === 0 && value === \"=\" && equals < 0) equals = t;\n }\n if (colon < 0) fail(file, part[keyword], `data class ${struct.name} field ${fieldName} needs an explicit type`);\n const typeTokens = part.slice(colon + 1, equals < 0 ? part.length : equals);\n const fallback = equals < 0 ? void 0 : part.slice(equals + 1).map((token) => token.text).join(\"\");\n const resolved = tsType(file, typeTokens, \"kotlin\", named);\n fields.push({\n name: fieldName,\n type: resolved.text,\n nativeType: typeTokens.map((token) => token.text).join(\"\"),\n optional: equals >= 0,\n wire: resolved.wire ?? void 0,\n fallback\n });\n }\n return fields;\n}\nfunction finalizeNamedTypes(file, language, named, structs, enums, modules, views) {\n const reached = /* @__PURE__ */ new Set();\n const queue = [];\n const visitWire = (wire) => {\n if (!wire) return;\n if (wire.kind === \"struct\" || wire.kind === \"enum\") {\n if (!reached.has(wire.name)) {\n reached.add(wire.name);\n if (wire.kind === \"struct\") queue.push(wire.name);\n }\n } else if (wire.kind === \"array\") visitWire(wire.element);\n else if (wire.kind === \"map\") visitWire(wire.value);\n else if (wire.kind === \"nullable\") visitWire(wire.inner);\n };\n for (const module of modules) {\n for (const method of module.methods) {\n for (const param of method.parameters) visitWire(param.wire);\n visitWire(method.resultWire);\n for (const arg of method.subscription?.payload ?? []) visitWire(arg.wire);\n }\n }\n for (const view of views) {\n for (const prop of view.props) {\n visitWire(prop.wire);\n for (const arg of prop.callback ?? []) visitWire(arg.wire);\n }\n }\n const byName = new Map(structs.map((entry) => [entry.name, entry]));\n const parsed = /* @__PURE__ */ new Map();\n while (queue.length > 0) {\n const name = queue.pop();\n if (parsed.has(name)) continue;\n const decl = byName.get(name);\n if (!decl) continue;\n const fields = language === \"swift\" ? swiftStructFields(file, decl, named) : kotlinStructFields(file, decl, named);\n parsed.set(name, fields);\n for (const field of fields) visitWire(field.wire);\n }\n return {\n structs: structs.filter((entry) => reached.has(entry.name)).map((entry) => ({ name: entry.name, fields: parsed.get(entry.name) ?? [] })),\n enums: enums.filter((entry) => reached.has(entry.name)).map((entry) => ({ name: entry.name, backing: entry.backing, cases: entry.cases }))\n };\n}\nfunction collectNamedTypes(file, list, language, packageName) {\n const structs = [];\n const enums = [];\n let depth = 0;\n let i = 0;\n while (i < list.length) {\n const text = list[i].text;\n if (text === \"{\") {\n depth++;\n i++;\n continue;\n }\n if (text === \"}\") {\n depth--;\n i++;\n continue;\n }\n if (depth !== 0) {\n i++;\n continue;\n }\n const isSwiftStruct = language === \"swift\" && text === \"struct\";\n const isSwiftEnum = language === \"swift\" && text === \"enum\";\n const isDataClass = language === \"kotlin\" && text === \"class\" && list[i - 1]?.text === \"data\";\n const isKotlinEnum = language === \"kotlin\" && text === \"class\" && list[i - 1]?.text === \"enum\";\n if (!isSwiftStruct && !isSwiftEnum && !isDataClass && !isKotlinEnum) {\n i++;\n continue;\n }\n const name = list[i + 1]?.text;\n if (!name || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) {\n i++;\n continue;\n }\n const token = list[i + 1];\n const generic = list[i + 2]?.text === \"<\";\n if (isDataClass) {\n const dataClass = collectDataClass(file, list, i, name, token, generic, packageName);\n let scan = i + 2;\n if (list[scan]?.text === \"<\") scan = close(file, list, scan, \"<\", \">\") + 1;\n while ([\"private\", \"protected\", \"public\", \"internal\", \"constructor\"].includes(list[scan]?.text)) scan++;\n i = list[scan]?.text === \"(\" ? close(file, list, scan, \"(\", \")\") + 1 : i + 2;\n if (dataClass) structs.push(dataClass);\n continue;\n }\n let body = i + 2;\n let angle = 0;\n let round = 0;\n while (body < list.length) {\n const value = list[body].text;\n if (value === \"<\") angle++;\n else if (value === \">\") angle--;\n else if (value === \"(\") round++;\n else if (value === \")\") round--;\n else if (value === \"{\" && angle === 0 && round === 0) break;\n body++;\n }\n if (body >= list.length) {\n i++;\n continue;\n }\n const end = close(file, list, body, \"{\", \"}\");\n const header = list.slice(i + 2, body);\n if (isSwiftStruct) {\n const inherits = header.map((entry) => entry.text);\n const modifiers = declarationModifiers(list, 0, i);\n structs.push({\n name,\n token,\n generic,\n codable: inherits.includes(\"Codable\") || inherits.includes(\"Decodable\") && inherits.includes(\"Encodable\"),\n problem: modifiers.includes(\"private\") || modifiers.includes(\"fileprivate\") ? `struct ${name} is private to its file and cannot cross the boundary` : null,\n body: list.slice(body + 1, end),\n params: [],\n packageName: void 0\n });\n } else {\n enums.push(\n language === \"swift\" ? collectSwiftEnum(file, list.slice(body + 1, end), name, token, generic, header) : collectKotlinEnum(file, list.slice(body + 1, end), name, token)\n );\n }\n i = end + 1;\n }\n return {\n structs,\n enums,\n names: {\n structs: new Map(\n structs.map((entry) => [entry.name, { codable: entry.codable, generic: entry.generic, problem: entry.problem }])\n ),\n enums: new Map(\n enums.map((entry) => [entry.name, { usable: entry.usable, problem: entry.problem }])\n )\n }\n };\n}\nfunction composableView(file, list, keyword, floor, named) {\n const modifiers = declarationModifiers(list, floor, keyword);\n if (!modifiers.some((value, index) => value === \"@\" && modifiers[index + 1] === \"Composable\")) return null;\n if (modifiers.includes(\"private\") || modifiers.includes(\"internal\")) return null;\n const name = list[keyword + 1]?.text;\n if (!name || !/^[A-Z][A-Za-z0-9_]*$/.test(name)) fail(file, list[keyword], \"an imported composable needs a capitalized name\");\n if (list[keyword + 2]?.text !== \"(\") fail(file, list[keyword], \"generic or extension composables are unsupported\");\n const closing = close(file, list, keyword + 2, \"(\", \")\");\n if (list[closing + 1]?.text === \":\") fail(file, list[closing + 1], `composable ${name} must return Unit`);\n const inner = list.slice(keyword + 3, closing);\n const props = inner.length === 0 ? [] : split(inner, \",\").flatMap((part) => {\n if (part.length === 0) return [];\n const prop = viewProp(file, part, named);\n return prop ? [prop] : [];\n });\n return { name, props };\n}\nfunction nativeSourceContract(file, source) {\n const language = file.endsWith(\".swift\") ? \"swift\" : file.endsWith(\".kt\") ? \"kotlin\" : void 0;\n if (!language) throw new Error(`${file}: expected a .swift or .kt source file`);\n const list = tokens(file, source);\n const packageToken = language === \"kotlin\" ? list.findIndex((token) => token.text === \"package\") : -1;\n const packageLine = packageToken < 0 ? [] : list.slice(packageToken + 1).filter((token) => token.line === list[packageToken].line);\n while (packageLine.at(-1)?.text === \";\") packageLine.pop();\n const packageName = packageToken < 0 ? void 0 : packageLine.map((token) => token.text).join(\"\");\n if (packageName && !/^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)*$/.test(packageName)) {\n fail(file, list[packageToken], `unsupported kotlin package ${packageName}`);\n }\n const collected = collectNamedTypes(file, list, language, packageName);\n const named = collected.names;\n const modules = [];\n const views = [];\n let defaultView = false;\n let i = 0;\n let previous = 0;\n while (i < list.length) {\n const kind = list[i].text;\n const declaration2 = language === \"swift\" ? kind === \"class\" || kind === \"struct\" : kind === \"object\";\n if (language === \"kotlin\" && kind === \"fun\") {\n const view2 = composableView(file, list, i, previous, named);\n if (view2) {\n if (views.some((other) => other.name === view2.name)) fail(file, list[i], `overloaded composable ${view2.name} is unsupported`);\n views.push(view2);\n }\n i++;\n continue;\n }\n if (!declaration2) {\n if (kind === \"{\") {\n i = close(file, list, i, \"{\", \"}\") + 1;\n previous = i;\n } else i++;\n continue;\n }\n const name = list[i + 1]?.text;\n if (!name) fail(file, list[i], \"native type has no name\");\n let body = i + 2;\n while (body < list.length && list[body].text !== \"{\") body++;\n if (body === list.length) fail(file, list[i], \"native type has no body\");\n const end = close(file, list, body, \"{\", \"}\");\n const prefix = list.slice(previous, i).map((token) => token.text);\n if (language === \"swift\" && prefix.some((value, index) => value === \"@\" && prefix[index + 1] === \"main\")) {\n defaultView = true;\n }\n const inherits = list.slice(i + 2, body).map((token) => token.text);\n if (inherits.includes(language === \"swift\" ? \"PeachModule\" : \"OneModule\")) {\n modules.push({ name, methods: methods(file, list, body, end, language, named) });\n }\n const view = language === \"swift\" ? swiftView(file, list, i, previous, body, end, named) : null;\n if (view) views.push(view);\n i = end + 1;\n previous = i;\n }\n const finalized = finalizeNamedTypes(file, language, named, collected.structs, collected.enums, modules, views);\n const structs = finalized.structs;\n const enums = finalized.enums;\n const canonical = JSON.stringify({ language, packageName, modules, views, structs, enums, defaultView });\n const hash = createHash(\"sha256\").update(canonical).digest(\"hex\");\n const declarations = structs.map(\n (struct) => `export interface ${struct.name} {${struct.fields.map((field) => ` ${field.name}${field.optional ? \"?\" : \"\"}: ${field.type};`).join(\"\")} }`\n );\n declarations.push(...enums.map(\n (type) => `export type ${type.name} = ${type.cases.map((entry) => typeof entry.value === \"string\" ? JSON.stringify(entry.value) : String(entry.value)).join(\" | \")}`\n ));\n declarations.push(...modules.map((module) => [\n `export declare const ${module.name}: {`,\n ...module.methods.map(\n (method) => method.subscription ? ` ${method.name}(listener: (${method.subscription.payload.map((arg, index) => `value${index}: ${arg.type}`).join(\", \")}) => void): () => void` : ` ${method.name}(${method.parameters.map((param) => `${param.name}: ${param.type}`).join(\", \")}): Promise<${method.result}>`\n ),\n \"}\"\n ].join(\"\\n\")));\n declarations.push(...views.map(\n (view) => `export declare function ${view.name}(props: {${view.props.map((prop) => ` ${prop.name}${prop.optional ? \"?\" : \"\"}: ${prop.type}`).join(\";\")} }): ReactElement`\n ));\n if (defaultView) {\n declarations.unshift(\"export default function SwiftPackage(props: Record<string, unknown>): ReactElement\");\n }\n if (defaultView || views.length > 0) declarations.unshift(\"import type { ReactElement } from 'react'\");\n const declaration = `${GENERATED_HEADER}${declarations.join(\"\\n\\n\")}\n`;\n return { language, packageName, modules, views, structs, enums, defaultView, hash, declaration };\n}\nfunction kotlinSourceId(root, file) {\n const path = relative(root, file).replaceAll(\"\\\\\", \"/\");\n if (path.startsWith(\"../\") || !path.endsWith(\".kt\")) {\n throw new Error(`${file} is not a kotlin source under ${root}`);\n }\n return `K_${createHash(\"sha256\").update(path).digest(\"hex\").slice(0, 16)}`;\n}\nfunction swiftPodManifest(file, source) {\n const list = tokens(file, source);\n const modes = /* @__PURE__ */ new Set();\n let mainActorIsolation = false;\n for (let i = 0; i < list.length; i++) {\n if (list[i].text === \".\" && list[i + 1]?.text === \"package\" && list[i + 2]?.text === \"(\") {\n fail(file, list[i], \"SwiftPM package dependencies are unsupported by One prebuild\");\n }\n if (list[i].text === \".\" && list[i + 1]?.text === \"swiftLanguageMode\" && list[i + 2]?.text === \"(\") {\n const mode = /^v(\\d+)$/.exec(list[i + 4]?.text ?? \"\");\n if (list[i + 3]?.text !== \".\" || !mode) fail(file, list[i], \"unsupported swift language mode\");\n modes.add(Number(mode[1]));\n }\n if (list[i].text === \"swiftLanguageModes\" && list[i + 1]?.text === \":\") {\n const opening = i + 2;\n if (list[opening]?.text !== \"[\") fail(file, list[i], \"unsupported swift language modes\");\n const ending = close(file, list, opening, \"[\", \"]\");\n for (let j = opening; j < ending; j++) {\n if (list[j].text === \".\" && /^v\\d+$/.test(list[j + 1]?.text ?? \"\")) {\n modes.add(Number(list[j + 1].text.slice(1)));\n }\n }\n }\n if (list[i].text === \".\" && list[i + 1]?.text === \"defaultIsolation\" && list[i + 2]?.text === \"(\") {\n if (list[i + 3]?.text !== \"MainActor\") fail(file, list[i], \"unsupported swift default isolation\");\n mainActorIsolation = true;\n }\n }\n if (modes.size > 1) throw new Error(`${file}: One pod needs one swift language mode; found ${[...modes].join(\", \")}`);\n const languageMode = modes.values().next().value ?? 5;\n if (languageMode !== 5 && languageMode !== 6) {\n throw new Error(`${file}: unsupported swift language mode v${languageMode}`);\n }\n return { languageMode, mainActorIsolation };\n}\nfunction writeNativeSourceDeclaration(file) {\n const contract = nativeSourceContract(file, readFileSync(file, \"utf8\"));\n const extension = contract.language === \"swift\" ? \".swift\" : \".kt\";\n const declaration = join(dirname(file), `${basename(file, extension)}.d${extension}.ts`);\n if (contract.modules.length === 0 && contract.views.length === 0 && !contract.defaultView) {\n if (existsSync(declaration) && readFileSync(declaration, \"utf8\").startsWith(GENERATED_HEADER)) {\n rmSync(declaration, { force: true });\n }\n return contract;\n }\n writeGeneratedFile(declaration, contract.declaration);\n return contract;\n}\nfunction writeNativeSourceDeclarations(root) {\n const contracts = [];\n const visit = (dir) => {\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n if (entry.name.startsWith(\".\") || SKIP_SOURCE_DIRS.has(entry.name)) continue;\n const file = join(dir, entry.name);\n if (entry.isDirectory()) visit(file);\n else if (entry.isFile() && /\\.(swift|kt)$/.test(entry.name) && entry.name !== \"Package.swift\") {\n contracts.push(writeNativeSourceDeclaration(file));\n }\n }\n };\n visit(root);\n for (const packageDir of swiftPackageDirectories(root).values()) {\n writeSwiftPackageArtifacts(packageDir);\n }\n return contracts;\n}\nfunction writeSwiftPackageArtifacts(packageDir) {\n const contracts = [];\n const files = {};\n const modules = {};\n const views = {};\n const defaultViewFiles = [];\n const visit = (dir) => {\n const entries = readdirSync(dir, { withFileTypes: true }).sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);\n for (const entry of entries) {\n if (entry.name.startsWith(\".\") || SKIP_SOURCE_DIRS.has(entry.name)) continue;\n const file = join(dir, entry.name);\n if (entry.isDirectory()) visit(file);\n else if (entry.isFile() && entry.name.endsWith(\".swift\") && entry.name !== \"Package.swift\") {\n const contract = writeNativeSourceDeclaration(file);\n contracts.push(contract);\n const name = relative(packageDir, file).replaceAll(\"\\\\\", \"/\");\n files[name] = [...contract.modules, ...contract.views].map((entry2) => entry2.name);\n for (const module of contract.modules) modules[module.name] = module.methods.map((method) => method.name);\n for (const view of contract.views) views[view.name] = view.props.map((prop) => prop.name);\n if (contract.defaultView) defaultViewFiles.push(name);\n }\n }\n };\n visit(packageDir);\n const packageId = swiftPackageId(packageDir);\n const rendered = renderSwiftSourceGlue(packageId, contracts);\n const descriptor = join(packageDir, \".one-native-source.json\");\n const glue = join(packageDir, \".one-native-source.swift.txt\");\n const exported = contracts.some((contract) => contract.modules.length > 0 || contract.views.length > 0);\n if (exported) {\n const json = `${JSON.stringify({ generatedBy: \"one typegen\", packageId, hash: rendered.hash, files, modules, views, defaultViewFiles }, null, 2)}\n`;\n writeGeneratedFile(descriptor, json);\n writeGeneratedFile(glue, rendered.source);\n } else if (existsSync(descriptor) && readFileSync(descriptor, \"utf8\").includes('\"generatedBy\": \"one typegen\"')) {\n rmSync(descriptor, { force: true });\n rmSync(glue, { force: true });\n }\n return { packageId, hash: rendered.hash, files, modules, views, defaultViewFiles, contracts, glue: exported ? rendered.source : null };\n}\nfunction renderSwiftSourceGlue(packageId, contracts) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(packageId)) {\n throw new Error(`invalid swift package id ${packageId}`);\n }\n for (const contract of contracts) {\n if (contract.language !== \"swift\") throw new Error(\"swift glue received a kotlin contract\");\n }\n const modules = contracts.flatMap((contract) => contract.modules);\n const views = contracts.flatMap((contract) => contract.views);\n const names = /* @__PURE__ */ new Set();\n for (const { name } of [...modules, ...views]) {\n if (names.has(name)) throw new Error(`swift package ${packageId} declares ${name} twice`);\n names.add(name);\n }\n const hash = createHash(\"sha256\").update(JSON.stringify({ packageId, modules, views })).digest(\"hex\");\n const hasMain = contracts.some((contract) => contract.defaultView);\n const bodyName = `OneNativeSourceBody_${packageId}`;\n const className = `OneNativeSource_${packageId}`;\n const viewsName = `OneNativeSourceViews_${packageId}`;\n const renderCase = (method, module) => {\n const subscription = method.subscription;\n if (subscription) {\n const channel = `OneNativeSource.${packageId}.${module.name}.${method.name}`;\n const closureArgs = subscription.payload.map((arg, index) => `a${index}: ${arg.nativeType}`).join(\", \");\n const emitArgs = subscription.payload.map((_, index) => `a${index}`).join(\", \");\n const prefix2 = `${method.throws ? \"try \" : \"\"}${method.async ? \"await \" : \"\"}`;\n return [\n ` case ${JSON.stringify(method.name)}:`,\n ` guard values.isEmpty else { throw NSError(domain: \"OneNativeSource\", code: 2, userInfo: [NSLocalizedDescriptionKey: \"${packageId}.${module.name}.${method.name} subscribes; it takes no arguments\"]) }`,\n ` let channel = ${JSON.stringify(channel)}`,\n ` ${prefix2}${module.name}Instance.${method.name}({ ${closureArgs ? `(${closureArgs}) in ` : \"\"}postEvent(channel, args([${emitArgs}])) })`,\n ' return \"null\"'\n ];\n }\n const lines = [\n ` case ${JSON.stringify(method.name)}:`,\n ` guard values.count == ${method.parameters.length} else { throw NSError(domain: \"OneNativeSource\", code: 2, userInfo: [NSLocalizedDescriptionKey: \"${packageId}.${module.name}.${method.name} expects ${method.parameters.length} arguments\"]) }`\n ];\n method.parameters.forEach((parameter, index) => {\n lines.push(` let arg${index} = try decode(values[${index}], as: ${parameter.nativeType}.self)`);\n });\n const argumentsText = method.parameters.map(\n (parameter, index) => `${parameter.label === \"_\" ? \"\" : `${parameter.label}: `}arg${index}`\n ).join(\", \");\n const prefix = `${method.throws ? \"try \" : \"\"}${method.async ? \"await \" : \"\"}`;\n const call = `${module.name}Instance.${method.name}(${argumentsText})`;\n if (method.result === \"void\") {\n lines.push(` ${prefix}${call}`, ' return \"null\"');\n } else {\n lines.push(` let result = ${prefix}${call}`);\n if (method.nativeResult === \"Int\") {\n lines.push(' guard abs(Double(result)) <= 9_007_199_254_740_991 else { throw NSError(domain: \"OneNativeSource\", code: 2, userInfo: [NSLocalizedDescriptionKey: \"result exceeds the JavaScript safe integer range\"]) }');\n }\n lines.push(\" return try encode(result)\");\n }\n return lines;\n };\n const notLinked = ' throw NSError(domain: \"OneNativeSource\", code: 1, userInfo: [NSLocalizedDescriptionKey: \"native module \\\\(module) is not linked; rebuild the app\"])';\n const renderCall = () => modules.length === 0 ? [\n \" static func call(_ module: String, _ method: String, _ argsJson: String) async throws -> String {\",\n notLinked,\n \" }\"\n ] : [\n \" static func call(_ module: String, _ method: String, _ argsJson: String) async throws -> String {\",\n \" guard let values = try JSONSerialization.jsonObject(with: Data(argsJson.utf8)) as? [Any] else {\",\n ' throw NSError(domain: \"OneNativeSource\", code: 2, userInfo: [NSLocalizedDescriptionKey: \"arguments must be a JSON array\"])',\n \" }\",\n \" switch module {\",\n ...modules.flatMap((module) => [\n ` case ${JSON.stringify(`${packageId}.${module.name}`)}:`,\n \" switch method {\",\n ...module.methods.flatMap((method) => renderCase(method, module)),\n ' default: throw NSError(domain: \"OneNativeSource\", code: 1, userInfo: [NSLocalizedDescriptionKey: \"native method \\\\(module).\\\\(method) is not linked; rebuild the app\"])',\n \" }\"\n ]),\n \" default:\",\n ` ${notLinked}`,\n \" }\",\n \" }\"\n ];\n const renderViews = () => [\n \" private static func missing(_ path: String) throws -> Any {\",\n ' throw NSError(domain: \"OneNativeSource\", code: 2, userInfo: [NSLocalizedDescriptionKey: \"\\\\(path): required\"])',\n \" }\",\n \" static func view(_ name: String, _ propsJson: String, _ emit: @escaping (String, String) -> Void) throws -> AnyView {\",\n \" guard let props = try JSONSerialization.jsonObject(with: Data(propsJson.utf8)) as? [String: Any] else {\",\n ' throw NSError(domain: \"OneNativeSource\", code: 2, userInfo: [NSLocalizedDescriptionKey: \"props must be a JSON object\"])',\n \" }\",\n \" switch name {\",\n ...views.flatMap((view) => [\n ` case ${JSON.stringify(view.name)}:`,\n ` return AnyView(${view.name}(`,\n ...view.props.map((prop, index) => {\n const comma = index === view.props.length - 1 ? \"\" : \",\";\n const key = JSON.stringify(prop.name);\n if (prop.callback) {\n const params = prop.callback.map((arg, n) => `a${n}: ${arg.nativeType}`).join(\", \");\n const lambda = `{ (${params}) -> Void in emit(${key}, args([${prop.callback.map((_, n) => `a${n}`).join(\", \")}])) }`;\n return ` ${prop.name}: ${prop.optional ? `(props[${key}] as? Bool) == true ? ${lambda} : nil` : lambda}${comma}`;\n }\n const input = prop.optional ? `props[${key}] ?? NSNull()` : `props[${key}] ?? missing(${JSON.stringify(`props.${prop.name}`)})`;\n return ` ${prop.name}: try decode(${input}, as: ${prop.nativeType}.self)${comma}`;\n }),\n \" ))\"\n ]),\n ' default: throw NSError(domain: \"OneNativeSource\", code: 1, userInfo: [NSLocalizedDescriptionKey: \"swift view \\\\(name) is not linked; rebuild the app\"])',\n \" }\",\n \" }\"\n ];\n const source = [\n \"import Foundation\",\n \"import SwiftUI\",\n \"\",\n `@MainActor public enum ${bodyName} {`,\n ` public static let hash = ${JSON.stringify(hash)}`,\n \"#if os(WASI)\",\n \" private struct Request: Decodable { let module: String; let method: String; let argsJson: String; let contractHash: String }\",\n \" private struct Reply: Encodable { let ok: Bool; let value: String?; let error: String?; let pending: Int32? }\",\n \" private static var output: [UInt8] = []\",\n \" private static var finished: [Int32: Reply] = [:]\",\n \" private static var nextCall: Int32 = 0\",\n \" // peach runs tasks inline, so a call finishes before its task launch returns\",\n \" // unless it waits on the clock; then it answers pending and the host polls\",\n \" // it after running the timers.\",\n \" static func callWasm(_ payload: UnsafePointer<UInt8>?, _ length: Int32) -> UnsafeMutablePointer<UInt8>? {\",\n \" let id = nextCall\",\n \" nextCall &+= 1\",\n \" do {\",\n ' guard let payload, length >= 0 else { throw NSError(domain: \"OneNativeSource\", code: 2, userInfo: [NSLocalizedDescriptionKey: \"missing call payload\"]) }',\n \" let request = try JSONDecoder().decode(Request.self, from: Data(bytes: payload, count: Int(length)))\",\n ' guard request.contractHash == hash else { throw NSError(domain: \"OneNativeSource\", code: 4, userInfo: [NSLocalizedDescriptionKey: \"native module \\\\(request.module) changed; rebuild the app\"]) }',\n \" Task {\",\n \" do {\",\n \" finished[id] = Reply(ok: true, value: try await call(request.module, request.method, request.argsJson), error: nil, pending: nil)\",\n \" } catch {\",\n \" // the native hosts name the method on everything a call throws\",\n ' finished[id] = Reply(ok: false, value: nil, error: \"\\\\(request.module).\\\\(request.method): \\\\(error.localizedDescription)\", pending: nil)',\n \" }\",\n \" }\",\n \" } catch {\",\n \" finished[id] = Reply(ok: false, value: nil, error: error.localizedDescription, pending: nil)\",\n \" }\",\n \" return pollWasm(id)\",\n \" }\",\n \" static func pollWasm(_ id: Int32) -> UnsafeMutablePointer<UInt8>? {\",\n \" let reply = finished.removeValue(forKey: id) ?? Reply(ok: true, value: nil, error: nil, pending: id)\",\n ' let bytes = (try? JSONEncoder().encode(reply)) ?? Data(\"{\\\\\"ok\\\\\":false,\\\\\"error\\\\\":\\\\\"encoding failed\\\\\"}\".utf8)',\n \" let count = UInt32(bytes.count)\",\n \" output = [UInt8(count & 0xff), UInt8((count >> 8) & 0xff), UInt8((count >> 16) & 0xff), UInt8(count >> 24)] + Array(bytes)\",\n \" return output.withUnsafeMutableBufferPointer { $0.baseAddress }\",\n \" }\",\n \" private struct Event: Encodable { let channel: String; let args: String }\",\n \" private static var pendingEvents: [Event] = []\",\n \" // under wasi there is no javascript runtime, so posted events queue\",\n \" // here and the peach host drains them with peach_poll_events, using\",\n \" // the same length-prefixed framing as pollWasm.\",\n \" static func pollEvents() -> UnsafeMutablePointer<UInt8>? {\",\n \" let events = pendingEvents\",\n \" pendingEvents = []\",\n ' let bytes = (try? JSONEncoder().encode(events)) ?? Data(\"[]\".utf8)',\n \" let count = UInt32(bytes.count)\",\n \" output = [UInt8(count & 0xff), UInt8((count >> 8) & 0xff), UInt8((count >> 16) & 0xff), UInt8(count >> 24)] + Array(bytes)\",\n \" return output.withUnsafeMutableBufferPointer { $0.baseAddress }\",\n \" }\",\n \"#endif\",\n ...modules.map((module) => ` private static let ${module.name}Instance = ${module.name}()`),\n // dates cross as ISO strings in both directions; the fractional reader\n // runs first because javascript always writes milliseconds.\n \" private nonisolated static let isoDate = Date.ISO8601FormatStyle()\",\n \" private nonisolated static let isoDateFractional = Date.ISO8601FormatStyle(includingFractionalSeconds: true)\",\n \" private nonisolated static func decodeDate(_ decoder: Decoder) throws -> Date {\",\n \" let container = try decoder.singleValueContainer()\",\n \" let text = try container.decode(String.self)\",\n \" if let date = (try? isoDateFractional.parse(text)) ?? (try? isoDate.parse(text)) { return date }\",\n ' throw DecodingError.dataCorruptedError(in: container, debugDescription: \"expected ISO date\")',\n \" }\",\n \" private static func decode<T: Decodable>(_ value: Any, as type: T.Type) throws -> T {\",\n \" let data = try JSONSerialization.data(withJSONObject: value, options: [.fragmentsAllowed])\",\n \" let decoder = JSONDecoder()\",\n \" decoder.dateDecodingStrategy = .custom { try decodeDate($0) }\",\n \" decoder.dataDecodingStrategy = .base64\",\n \" return try decoder.decode(T.self, from: data)\",\n \" }\",\n \" private static func encode(_ value: any Encodable) throws -> String {\",\n \" let encoder = JSONEncoder()\",\n \" encoder.dateEncodingStrategy = .iso8601\",\n \" encoder.dataEncodingStrategy = .base64\",\n \" return String(decoding: try encoder.encode(value), as: UTF8.self)\",\n \" }\",\n \" private static func encodeAny(_ value: any Encodable) -> String {\",\n ' (try? encode(value)) ?? \"null\"',\n \" }\",\n \" // subscribe cases and view callbacks both encode callback arguments\",\n \" // as a json array, so this helper stays outside the view-only glue.\",\n \" private static func args(_ values: [any Encodable]) -> String {\",\n ' \"[\" + values.map { encodeAny($0) }.joined(separator: \",\") + \"]\"',\n \" }\",\n \" // native events post over the one event bridge on device; under wasi\",\n \" // they queue for the peach host, which drains them with peach_poll_events.\",\n \" private static func postEvent(_ channel: String, _ args: String) {\",\n \" #if os(WASI)\",\n \" pendingEvents.append(Event(channel: channel, args: args))\",\n \" #else\",\n \" OneNativeSourceEmitter.send(channel, args)\",\n \" #endif\",\n \" }\",\n ...renderCall(),\n ...views.length > 0 ? renderViews() : [],\n \"}\",\n \"\",\n \"#if os(WASI)\",\n '@_expose(wasm, \"peach_call\")',\n '@_cdecl(\"peach_call\")',\n `@MainActor public func peach_call(_ payload: UnsafePointer<UInt8>?, _ length: Int32) -> UnsafeMutablePointer<UInt8>? { ${bodyName}.callWasm(payload, length) }`,\n '@_expose(wasm, \"peach_call_poll\")',\n '@_cdecl(\"peach_call_poll\")',\n `@MainActor public func peach_call_poll(_ id: Int32) -> UnsafeMutablePointer<UInt8>? { ${bodyName}.pollWasm(id) }`,\n \" // the host drains queued native events with this export, polling it\",\n \" // after running timers like it polls pending calls.\",\n '@_expose(wasm, \"peach_poll_events\")',\n '@_cdecl(\"peach_poll_events\")',\n `@MainActor public func peach_poll_events() -> UnsafeMutablePointer<UInt8>? { ${bodyName}.pollEvents() }`,\n // peach registers the typed views once per instance: the package's own\n // @main, if any, stays its default view, as on device\n ...views.length > 0 ? [\n '@_expose(wasm, \"peach_register_views\")',\n '@_cdecl(\"peach_register_views\")',\n \"@MainActor public func peach_register_views() {\",\n \" PeachTypedViews.register { name, contractHash, propsJson, emit in\",\n ` guard contractHash == ${bodyName}.hash else { return AnyView(Text(\"swift view ${packageId}.\\\\(name) changed; rebuild the app\").foregroundStyle(.red)) }`,\n ` do { return try ${bodyName}.view(name, propsJson, emit) } catch { return AnyView(Text(\"\\\\(name): \\\\(error.localizedDescription)\").foregroundStyle(.red)) }`,\n \" }\",\n \"}\"\n ] : [],\n ...!hasMain ? [\n `@main struct OneNativeSourceMain_${packageId}: App {`,\n \" var body: some Scene { WindowGroup { EmptyView() } }\",\n \"}\"\n ] : [],\n \"#endif\",\n \"\",\n // the dispatch class answers nitro on device; wasi uses the peach_call\n // exports above, and its sdk mirrors objectivec, so gate it off.\n \"#if canImport(ObjectiveC) && !os(WASI)\",\n `@objc(${className}) @MainActor public final class ${className}: NSObject, OneNativeSourceDispatch {`,\n \" public required override init() {}\",\n ` public var contractHash: String { ${bodyName}.hash }`,\n ` public func call(_ module: String, _ method: String, _ argsJson: String) async throws -> String { try await ${bodyName}.call(module, method, argsJson) }`,\n \"}\",\n ...views.length > 0 ? [\n `@objc(${viewsName}) @MainActor public final class ${viewsName}: NSObject, OneNativeSourceViewDispatch {`,\n \" public required override init() {}\",\n ` public var contractHash: String { ${bodyName}.hash }`,\n ` public func view(_ name: String, _ propsJson: String, _ emit: @escaping (String, String) -> Void) throws -> AnyView { try ${bodyName}.view(name, propsJson, emit) }`,\n \"}\"\n ] : [],\n \"#endif\",\n \"\"\n ].join(\"\\n\");\n return { hash, source };\n}\nfunction renderKotlinSourceGlue(sourceId, contract) {\n if (contract.language !== \"kotlin\") throw new Error(\"kotlin glue received a swift contract\");\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(sourceId)) throw new Error(`invalid kotlin source id ${sourceId}`);\n const hash = createHash(\"sha256\").update(JSON.stringify({ sourceId, contract: contract.hash })).digest(\"hex\");\n const structsByName = new Map(contract.structs.map((entry) => [entry.name, entry]));\n const enumsByName = new Map(contract.enums.map((entry) => [entry.name, entry]));\n const qualified = (name) => contract.packageName ? `${contract.packageName}.${name}` : name;\n const isDateType = (type) => type === \"Date\" || type === \"java.util.Date\";\n const mentions = (type, match) => {\n let rest = type;\n while (rest.endsWith(\"?\")) rest = rest.slice(0, -1);\n if (rest.startsWith(\"List<\") && rest.endsWith(\">\")) return mentions(rest.slice(5, -1), match);\n if (rest.startsWith(\"Map<String,\") && rest.endsWith(\">\")) return mentions(rest.slice(11, -1), match);\n return match(rest);\n };\n const nativeTypes = [\n ...contract.modules.flatMap(\n (module) => module.methods.flatMap((method) => [\n ...method.parameters.map((parameter) => parameter.nativeType),\n method.nativeResult,\n ...method.subscription?.payload.map((arg) => arg.nativeType) ?? []\n ])\n ),\n ...contract.structs.flatMap((struct) => struct.fields.map((field) => field.nativeType)),\n ...contract.views.flatMap(\n (view) => view.props.flatMap((prop) => [\n prop.nativeType,\n ...prop.callback?.map((arg) => arg.nativeType) ?? []\n ])\n )\n ];\n const needsEvents = contract.modules.some(\n (module) => module.methods.some((method) => method.subscription)\n );\n const needsDate = nativeTypes.some((type) => mentions(type, isDateType));\n const needsData = nativeTypes.some((type) => mentions(type, (leaf) => leaf === \"ByteArray\"));\n const value = (type, input, path) => {\n if (type.endsWith(\"?\")) {\n return `(${input}).let { raw -> if (raw == null || raw == JSONObject.NULL) null else ${value(type.slice(0, -1), \"raw\", path)} }`;\n }\n if (type === \"String\") return `readString(${input}, ${path})`;\n if (type === \"Boolean\") return `readBoolean(${input}, ${path})`;\n if (type === \"Double\") return `readDouble(${input}, ${path})`;\n if (type === \"Float\") return `readDouble(${input}, ${path}).toFloat()`;\n if (type === \"Int\") return `readInt(${input}, ${path})`;\n if (type === \"Long\") return `readLong(${input}, ${path})`;\n if (isDateType(type)) return `readDate(${input}, ${path})`;\n if (type === \"ByteArray\") return `readData(${input}, ${path})`;\n if (structsByName.has(type)) return `read${type}(${input}, ${path})`;\n if (enumsByName.has(type)) return `read${type}(${input}, ${path})`;\n if (type.startsWith(\"List<\") && type.endsWith(\">\")) {\n return `readList(${input}, ${path}) { item, itemPath -> ${value(type.slice(5, -1), \"item\", \"itemPath\")} }`;\n }\n if (type.startsWith(\"Map<String,\") && type.endsWith(\">\")) {\n return `readMap(${input}, ${path}) { item, itemPath -> ${value(type.slice(11, -1), \"item\", \"itemPath\")} }`;\n }\n throw new Error(`unsupported kotlin glue type ${type}`);\n };\n const encode = (type, accessor) => {\n if (type.endsWith(\"?\")) {\n return `(${accessor}?.let { ${encode(type.slice(0, -1), \"it\")} } ?: JSONObject.NULL)`;\n }\n if (isDateType(type)) return `dateToString(${accessor})`;\n if (type === \"ByteArray\") return `android.util.Base64.encodeToString(${accessor}, android.util.Base64.NO_WRAP)`;\n if (structsByName.has(type)) return `encode${type}(${accessor})`;\n if (enumsByName.has(type)) return `${accessor}.name`;\n if (type.startsWith(\"List<\") && type.endsWith(\">\")) {\n return `JSONArray().apply { for (item in ${accessor}) put(${encode(type.slice(5, -1), \"item\")}) }`;\n }\n if (type.startsWith(\"Map<String,\") && type.endsWith(\">\")) {\n return `JSONObject().apply { for ((key, entry) in ${accessor}) put(key, ${encode(type.slice(11, -1), \"entry\")}) }`;\n }\n return `JSONObject.wrap(${accessor})`;\n };\n const structHelpers = contract.structs.flatMap((struct) => [\n `private fun read${struct.name}(value: Any, path: String): ${qualified(struct.name)} {`,\n ' val obj = value as? JSONObject ?: error(\"$path: expected object\")',\n ` return ${qualified(struct.name)}(`,\n ...struct.fields.map((field) => {\n const fieldPath = `\"$path.${field.name}\"`;\n const required = `error(\"$path.${field.name}: required\")`;\n const input = field.optional ? `(if (obj.has(${JSON.stringify(field.name)})) obj.get(${JSON.stringify(field.name)}) else ${field.fallback ?? required})` : `(obj.opt(${JSON.stringify(field.name)}) ?: ${required})`;\n return ` ${field.name} = ${value(field.nativeType, input, fieldPath)},`;\n }),\n \" )\",\n \"}\",\n `private fun encode${struct.name}(value: ${qualified(struct.name)}): JSONObject {`,\n \" return JSONObject()\",\n ...struct.fields.map(\n (field) => ` .put(${JSON.stringify(field.name)}, ${encode(field.nativeType, `value.${field.name}`)})`\n ),\n \"}\"\n ]);\n const enumHelpers = contract.enums.flatMap((entry) => [\n `private fun read${entry.name}(value: Any, path: String): ${qualified(entry.name)} {`,\n \" val text = readString(value, path)\",\n ` return try { ${qualified(entry.name)}.valueOf(text) } catch (e: IllegalArgumentException) { error(\"$path: expected one of ${entry.cases.map((item) => item.name).join(\", \")}\") }`,\n \"}\"\n ]);\n const source = [\n \"import androidx.annotation.Keep\",\n ...contract.views.length === 0 ? [] : [\"import androidx.compose.runtime.Composable\", \"import dev.onejs.one.OneNativeSourceViewDispatch\"],\n \"import dev.onejs.one.OneNativeSourceDispatch\",\n ...needsEvents ? [\"import dev.onejs.one.source.OneNativeSourceEvents\"] : [],\n \"import org.json.JSONArray\",\n \"import org.json.JSONObject\",\n \"\",\n 'private fun readString(value: Any, path: String): String = value as? String ?: error(\"$path: expected string\")',\n 'private fun readBoolean(value: Any, path: String): Boolean = value as? Boolean ?: error(\"$path: expected boolean\")',\n \"private fun readDouble(value: Any, path: String): Double {\",\n ' val result = (value as? Number)?.toDouble() ?: error(\"$path: expected number\")',\n ' if (!result.isFinite()) error(\"$path: expected finite number\")',\n \" return result\",\n \"}\",\n \"private fun readInt(value: Any, path: String): Int {\",\n \" val result = readDouble(value, path)\",\n ' if (result % 1.0 != 0.0 || result < Int.MIN_VALUE || result > Int.MAX_VALUE) error(\"$path: expected Int\")',\n \" return result.toInt()\",\n \"}\",\n \"private fun readLong(value: Any, path: String): Long {\",\n \" val result = readDouble(value, path)\",\n ' if (result % 1.0 != 0.0 || result < -9007199254740991.0 || result > 9007199254740991.0) error(\"$path: expected safe Long\")',\n \" return result.toLong()\",\n \"}\",\n \"private fun <T> readList(value: Any, path: String, read: (Any, String) -> T): List<T> {\",\n ' val array = value as? JSONArray ?: error(\"$path: expected array\")',\n ' return (0 until array.length()).map { index -> read(array.get(index), \"$path[$index]\") }',\n \"}\",\n \"private fun <T> readMap(value: Any, path: String, read: (Any, String) -> T): Map<String, T> {\",\n ' val objectValue = value as? JSONObject ?: error(\"$path: expected object\")',\n ' return objectValue.keys().asSequence().associateWith { key -> read(objectValue.get(key), \"$path.$key\") }',\n \"}\",\n // the encoder writes ISO with milliseconds and reads with or without\n // them, so swift, kotlin and javascript dates all parse everywhere.\n ...needsDate ? [\n \"private fun readDate(value: Any, path: String): java.util.Date {\",\n \" val text = readString(value, path)\",\n ` for (pattern in arrayOf(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\", \"yyyy-MM-dd'T'HH:mm:ss'Z'\")) {`,\n \" try {\",\n ' return java.text.SimpleDateFormat(pattern, java.util.Locale.US).apply { timeZone = java.util.TimeZone.getTimeZone(\"UTC\"); isLenient = false }.parse(text) ?: error(\"$path: expected date\")',\n \" } catch (parseError: java.text.ParseException) { }\",\n \" }\",\n ' error(\"$path: expected ISO date\")',\n \"}\",\n \"private fun dateToString(value: java.util.Date): String =\",\n ` java.text.SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\", java.util.Locale.US).apply { timeZone = java.util.TimeZone.getTimeZone(\"UTC\") }.format(value)`\n ] : [],\n ...needsData ? [\n \"private fun readData(value: Any, path: String): ByteArray {\",\n \" try {\",\n \" return android.util.Base64.decode(readString(value, path), android.util.Base64.NO_WRAP)\",\n \" } catch (decodeError: IllegalArgumentException) {\",\n ' error(\"$path: expected base64 data\")',\n \" }\",\n \"}\"\n ] : [],\n ...structHelpers,\n ...enumHelpers,\n \"\",\n `@Keep class OneNativeSource_${sourceId}: OneNativeSourceDispatch {`,\n ` override val contractHash = ${JSON.stringify(hash)}`,\n \" override suspend fun call(module: String, method: String, argsJson: String): String {\",\n \" val args = JSONArray(argsJson)\",\n \" return when (module) {\",\n ...contract.modules.flatMap((module) => [\n ` ${JSON.stringify(`${sourceId}.${module.name}`)} -> when (method) {`,\n ...module.methods.flatMap((method) => {\n const subscription = method.subscription;\n if (subscription) {\n const channel = `OneNativeSource.${sourceId}.${module.name}.${method.name}`;\n const closure = subscription.payload.length === 0 ? `{ OneNativeSourceEvents.send(${JSON.stringify(channel)}, JSONArray().toString()) }` : `{ ${subscription.payload.map((_, index) => `a${index}`).join(\", \")} -> OneNativeSourceEvents.send(${JSON.stringify(channel)}, JSONArray()${subscription.payload.map((arg, index) => `.put(${encode(arg.nativeType, `a${index}`)})`).join(\"\")}.toString()) }`;\n return [\n ` ${JSON.stringify(method.name)} -> {`,\n ` require(args.length() == 0) { \"${sourceId}.${module.name}.${method.name} subscribes; it takes no arguments\" }`,\n ` ${qualified(module.name)}.${method.name}(${closure})`,\n ' \"null\"',\n \" }\"\n ];\n }\n const lines = [\n ` ${JSON.stringify(method.name)} -> {`,\n ` require(args.length() == ${method.parameters.length}) { \"${sourceId}.${module.name}.${method.name} expects ${method.parameters.length} arguments\" }`\n ];\n method.parameters.forEach((parameter, index) => {\n lines.push(` val arg${index} = ${value(parameter.nativeType, `args.get(${index})`, JSON.stringify(`args[${index}]`))}`);\n });\n const call = `${qualified(module.name)}.${method.name}(${method.parameters.map((_, index) => `arg${index}`).join(\", \")})`;\n if (method.result === \"void\") {\n lines.push(` ${call}`, ' \"null\"');\n } else {\n lines.push(` val result = ${call}`);\n if (method.nativeResult === \"Long\") {\n lines.push(' require(result >= -9007199254740991L && result <= 9007199254740991L) { \"result exceeds the JavaScript safe integer range\" }');\n }\n lines.push(` JSONArray().put(${encode(method.nativeResult, \"result\")}).toString().drop(1).dropLast(1)`);\n }\n return [...lines, \" }\"];\n }),\n ' else -> error(\"native method $module.$method is not linked; rebuild the app\")',\n \" }\"\n ]),\n ' else -> error(\"native module $module is not linked; rebuild the app\")',\n \" }\",\n \" }\",\n \"}\",\n \"\",\n ...contract.views.length === 0 ? [] : viewGlue(sourceId, contract, hash, value, encode)\n ].join(\"\\n\");\n return { hash, source };\n}\nfunction viewGlue(sourceId, contract, hash, value, encode) {\n const qualifier = contract.packageName ? `${contract.packageName}.` : \"\";\n return [\n `@Keep class OneNativeSourceViews_${sourceId}: OneNativeSourceViewDispatch {`,\n ` override val contractHash = ${JSON.stringify(hash)}`,\n \" @Composable\",\n \" override fun Content(view: String, propsJson: String, emit: (String, String) -> Unit) {\",\n \" val props = JSONObject(propsJson)\",\n \" when (view) {\",\n ...contract.views.flatMap((view) => [\n ` ${JSON.stringify(view.name)} -> ${qualifier}${view.name}(`,\n ...view.props.map((prop) => {\n const path = JSON.stringify(`props.${prop.name}`);\n if (prop.callback) {\n const args = prop.callback.map((_, index) => `a${index}`);\n const types = prop.callback.map((arg) => arg.nativeType);\n const body = `emit(${JSON.stringify(prop.name)}, JSONArray()${args.map((arg, index) => `.put(${encode(types[index], arg)})`).join(\"\")}.toString())`;\n const lambda = `{ ${args.length > 0 ? `${args.join(\", \")} -> ` : \"\"}${body} }`;\n return ` ${prop.name} = ${prop.nativeType.endsWith(\"?\") ? `if (props.optBoolean(${JSON.stringify(prop.name)})) (${lambda}) else null` : lambda},`;\n }\n const input = prop.optional ? `(props.opt(${JSON.stringify(prop.name)}) ?: JSONObject.NULL)` : `(props.opt(${JSON.stringify(prop.name)}) ?: error(${JSON.stringify(`props.${prop.name}: required`)}))`;\n return ` ${prop.name} = ${value(prop.nativeType, input, path)},`;\n }),\n \" )\"\n ]),\n ' else -> error(\"composable $view is not linked; rebuild the app\")',\n \" }\",\n \" }\",\n \"}\",\n \"\"\n ];\n}\nexport {\n kotlinSourceId,\n nativeSourceContract,\n renderKotlinSourceGlue,\n renderSwiftSourceGlue,\n swiftPodManifest,\n writeNativeSourceDeclaration,\n writeNativeSourceDeclarations,\n writeSwiftPackageArtifacts\n};\n//# sourceMappingURL=nativeSourceContract.js.map\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nativeSourceContract.js","names":[],"sources":["utils/nativeSourceContract.js"],"sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport { existsSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join, relative } from \"node:path\";\nimport { swiftPackageDirectories, swiftPackageId } from \"./swiftPackageId\";\nconst GENERATED_HEADER = \"// generated by one typegen; edits will be replaced\\n\";\nconst SKIP_SOURCE_DIRS = /* @__PURE__ */ new Set([\"node_modules\", \"ios\", \"android\", \"dist\", \"types\", \"build\", \".build\"]);\nfunction writeGeneratedFile(file, content) {\n try {\n if (readFileSync(file, \"utf8\") === content) return;\n } catch (error) {\n if (!error || typeof error !== \"object\" || !(\"code\" in error) || error.code !== \"ENOENT\") throw error;\n }\n const temporary = join(dirname(file), `.${basename(file)}.${randomUUID()}.tmp`);\n try {\n writeFileSync(temporary, content);\n renameSync(temporary, file);\n } finally {\n rmSync(temporary, { force: true });\n }\n}\nfunction fail(file, token, message) {\n throw new Error(`${file}:${(token?.line ?? 0) + 1}:${(token?.column ?? 0) + 1}: ${message}`);\n}\nfunction tokens(file, source) {\n const result = [];\n let offset = 0;\n let line = 0;\n let column = 0;\n const advance = () => {\n if (source[offset] === \"\\n\") {\n line++;\n column = 0;\n } else column++;\n offset++;\n };\n while (offset < source.length) {\n const char = source[offset];\n if (/\\s/.test(char)) {\n advance();\n continue;\n }\n if (source.startsWith(\"//\", offset)) {\n while (offset < source.length && source[offset] !== \"\\n\") advance();\n continue;\n }\n if (source.startsWith(\"/*\", offset)) {\n let depth = 0;\n do {\n if (source.startsWith(\"/*\", offset)) {\n depth++;\n advance();\n advance();\n } else if (source.startsWith(\"*/\", offset)) {\n depth--;\n advance();\n advance();\n } else advance();\n } while (depth > 0 && offset < source.length);\n if (depth > 0) fail(file, { text: \"/*\", line, column }, \"unclosed native source comment\");\n continue;\n }\n if (char === '\"' || char === \"'\") {\n const quote = source.startsWith(char.repeat(3), offset) ? char.repeat(3) : char;\n for (let n = 0; n < quote.length; n++) advance();\n while (offset < source.length && !source.startsWith(quote, offset)) {\n if (source[offset] === \"\\\\\") advance();\n advance();\n }\n if (offset >= source.length) fail(file, { text: quote, line, column }, \"unclosed native source string\");\n for (let n = 0; n < quote.length; n++) advance();\n continue;\n }\n const start = offset;\n const startLine = line;\n const startColumn = column;\n if (/[A-Za-z_]/.test(char)) {\n while (offset < source.length && /[A-Za-z0-9_]/.test(source[offset])) advance();\n } else if (source.startsWith(\"->\", offset)) {\n advance();\n advance();\n } else advance();\n result.push({ text: source.slice(start, offset), line: startLine, column: startColumn });\n }\n return result;\n}\nfunction close(file, list, start, left, right) {\n let depth = 0;\n for (let i = start; i < list.length; i++) {\n if (list[i].text === left) depth++;\n if (list[i].text === right && --depth === 0) return i;\n }\n fail(file, list[start], `unclosed ${left} in native export`);\n}\nfunction split(list, separator) {\n const parts = [];\n let start = 0;\n let square = 0;\n let angle = 0;\n let round = 0;\n for (let i = 0; i < list.length; i++) {\n const value = list[i].text;\n if (value === \"[\") square++;\n if (value === \"]\") square--;\n if (value === \"<\") angle++;\n if (value === \">\") angle--;\n if (value === \"(\") round++;\n if (value === \")\") round--;\n if (value === separator && square === 0 && angle === 0 && round === 0) {\n parts.push(list.slice(start, i));\n start = i + 1;\n }\n }\n parts.push(list.slice(start));\n return parts;\n}\nfunction arrayOf(element) {\n return element.includes(\" | \") ? `(${element})[]` : `${element}[]`;\n}\nfunction tsType(file, list, language, named) {\n if (list.length === 0) fail(file, list[0], \"native export needs an explicit type\");\n if (list.at(-1)?.text === \"?\") {\n const inner = tsType(file, list.slice(0, -1), language, named);\n return {\n text: `${inner.text} | null`,\n wire: inner.wire ? { kind: \"nullable\", inner: inner.wire } : null\n };\n }\n const value = list.map((token) => token.text).join(\"\");\n if (value === \"String\") return { text: \"string\", wire: null };\n if (value === \"Bool\" || value === \"Boolean\") return { text: \"boolean\", wire: null };\n if ([\"Double\", \"Float\", \"Int\", \"Long\"].includes(value)) return { text: \"number\", wire: null };\n if (value === \"Void\" || value === \"Unit\") return { text: \"void\", wire: null };\n const dateTypes = language === \"swift\" ? [\"Date\", \"Foundation.Date\"] : [\"Date\", \"java.util.Date\"];\n if (dateTypes.includes(value)) return { text: \"Date\", wire: { kind: \"date\" } };\n const dataTypes = language === \"swift\" ? [\"Data\", \"Foundation.Data\"] : [\"ByteArray\"];\n if (dataTypes.includes(value)) {\n return { text: \"Uint8Array\", wire: { kind: \"data\" } };\n }\n if (language === \"swift\" && list[0].text === \"[\" && list.at(-1)?.text === \"]\") {\n const inner = list.slice(1, -1);\n const entries = split(inner, \":\");\n if (entries.length === 1) {\n const element = tsType(file, inner, language, named);\n return {\n text: arrayOf(element.text),\n wire: element.wire ? { kind: \"array\", element: element.wire } : null\n };\n }\n if (entries.length === 2 && entries[0].map((token) => token.text).join(\"\") === \"String\") {\n const element = tsType(file, entries[1], language, named);\n return {\n text: `Record<string, ${element.text}>`,\n wire: element.wire ? { kind: \"map\", value: element.wire } : null\n };\n }\n }\n if (language === \"kotlin\" && list[1]?.text === \"<\" && list.at(-1)?.text === \">\") {\n const entries = split(list.slice(2, -1), \",\");\n if (list[0].text === \"List\" && entries.length === 1) {\n const element = tsType(file, entries[0], language, named);\n return {\n text: arrayOf(element.text),\n wire: element.wire ? { kind: \"array\", element: element.wire } : null\n };\n }\n if (list[0].text === \"Map\" && entries.length === 2 && entries[0].map((token) => token.text).join(\"\") === \"String\") {\n const element = tsType(file, entries[1], language, named);\n return {\n text: `Record<string, ${element.text}>`,\n wire: element.wire ? { kind: \"map\", value: element.wire } : null\n };\n }\n }\n if (list.length === 1 && /^[A-Z][A-Za-z0-9_]*$/.test(value)) {\n const struct = named.structs.get(value);\n if (struct) {\n if (struct.generic) fail(file, list[0], `generic struct ${value} is unsupported`);\n if (struct.problem) fail(file, list[0], struct.problem);\n if (!struct.codable) fail(file, list[0], `struct ${value} must conform to Codable to cross the boundary`);\n return { text: value, wire: { kind: \"struct\", name: value } };\n }\n const enumType = named.enums.get(value);\n if (enumType) {\n if (!enumType.usable) fail(file, list[0], enumType.problem);\n return { text: value, wire: { kind: \"enum\", name: value } };\n }\n }\n fail(file, list[0], `unsupported native export type ${value}`);\n}\nfunction parameters(file, list, language, named) {\n if (list.length === 0) return [];\n return split(list, \",\").map((part, index) => {\n if (part.some((token) => token.text === \"=\")) fail(file, part[0], \"default native export arguments are unsupported\");\n const colon = part.findIndex((token) => token.text === \":\");\n if (colon < 0) fail(file, part[0], \"native export parameter needs an explicit type\");\n const names = part.slice(0, colon).filter((token) => /^[A-Za-z_][A-Za-z0-9_]*$/.test(token.text));\n const name = (language === \"swift\" ? names.at(-1) : names[0])?.text ?? `arg${index}`;\n if (name === \"_\") fail(file, part[0], \"native export parameter needs an internal name\");\n const label = language === \"swift\" ? names[0]?.text ?? name : null;\n const sourceType = part.slice(colon + 1);\n const type = tsType(file, sourceType, language, named);\n return {\n name,\n label,\n type: type.text,\n nativeType: sourceType.map((token) => token.text).join(\"\"),\n wire: type.wire ?? void 0\n };\n });\n}\nconst DECLARATION_MODIFIERS = /* @__PURE__ */ new Set([\n \"private\",\n \"fileprivate\",\n \"public\",\n \"internal\",\n \"open\",\n \"override\",\n \"static\",\n \"class\",\n \"final\",\n \"suspend\",\n \"inline\",\n \"operator\",\n \"infix\",\n \"tailrec\",\n \"external\",\n \"nonisolated\",\n \"isolated\",\n \"mutating\",\n \"nonmutating\",\n \"dynamic\",\n \"required\",\n \"convenience\",\n \"optional\"\n]);\nfunction declarationStart(list, floor, keyword) {\n let first = keyword;\n while (first > floor) {\n const text = list[first - 1].text;\n if (DECLARATION_MODIFIERS.has(text)) {\n first--;\n continue;\n }\n if (list[first - 2]?.text === \"@\") {\n first -= 2;\n continue;\n }\n if (text === \")\") {\n let open = first - 1;\n for (let depth = 0; open > floor; open--) {\n if (list[open].text === \")\") depth++;\n if (list[open].text === \"(\" && --depth === 0) break;\n }\n if (list[open - 2]?.text === \"@\") {\n first = open - 2;\n continue;\n }\n }\n break;\n }\n return first;\n}\nfunction declarationModifiers(list, floor, keyword) {\n const words = [];\n for (let i = declarationStart(list, floor, keyword), depth = 0; i < keyword; i++) {\n const text = list[i].text;\n if (text === \"(\") depth++;\n else if (text === \")\") depth--;\n else if (depth === 0) words.push(text);\n }\n return words;\n}\nfunction subscriptionPayload(file, typeTokens, language, named) {\n try {\n if (typeTokens.at(-1)?.text === \"?\") return null;\n let fn = typeTokens;\n if (language === \"swift\" && fn[0]?.text === \"@\" && fn[1]?.text === \"escaping\") fn = fn.slice(2);\n if (fn[0]?.text === \"(\" && close(file, fn, 0, \"(\", \")\") === fn.length - 1 && fn.some((token) => token.text === \"->\")) {\n fn = fn.slice(1, -1);\n }\n const arrow = fn.findIndex((token) => token.text === \"->\");\n if (arrow <= 0 || fn[0]?.text !== \"(\" || close(file, fn, 0, \"(\", \")\") !== arrow - 1) return null;\n const result = fn.slice(arrow + 1);\n const voidResult = result.length === 1 && (result[0].text === \"Void\" || result[0].text === \"Unit\") || result.length === 2 && result[0].text === \"(\" && result[1].text === \")\";\n if (!voidResult) return null;\n const inner = fn.slice(1, arrow - 1);\n if (inner.length === 0) return [];\n return split(inner, \",\").map((arg) => {\n const colon = arg.findIndex((token) => token.text === \":\");\n const type = colon < 0 ? arg : arg.slice(colon + 1);\n const resolved = tsType(file, type, language, named);\n return {\n type: resolved.text,\n nativeType: type.map((token) => token.text).join(\"\"),\n wire: resolved.wire ?? void 0\n };\n });\n } catch {\n return null;\n }\n}\nfunction methods(file, list, start, end, language, named) {\n const result = [];\n let i = start + 1;\n let previous = i;\n const keyword = language === \"swift\" ? \"func\" : \"fun\";\n while (i < end) {\n if (list[i].text === \"{\") {\n i = close(file, list, i, \"{\", \"}\") + 1;\n previous = i;\n continue;\n }\n if (list[i].text !== keyword) {\n i++;\n continue;\n }\n const modifiers = declarationModifiers(list, previous, i);\n const hidden = modifiers.includes(\"private\") || modifiers.includes(\"fileprivate\");\n if (!hidden && (modifiers.includes(\"static\") || modifiers.includes(\"class\"))) {\n fail(file, list[i], \"static native exports are unsupported\");\n }\n const name = list[i + 1]?.text;\n if (!name || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) fail(file, list[i], \"native export has no method name\");\n if (result.some((method) => method.name === name)) fail(file, list[i], `overloaded native export ${name} is unsupported`);\n if (list[i + 2]?.text === \"<\") fail(file, list[i], \"generic native exports are unsupported\");\n const open = i + 2;\n if (list[open]?.text !== \"(\") fail(file, list[i], \"native export has no parameter list\");\n const closing = close(file, list, open, \"(\", \")\");\n let headerEnd = closing + 1;\n while (headerEnd < end && ![\"{\", \"=\", \";\"].includes(list[headerEnd].text)) headerEnd++;\n const header = list.slice(closing + 1, headerEnd);\n const separator = header.findIndex((token) => token.text === (language === \"swift\" ? \"->\" : \":\"));\n const sourceType = hidden || separator < 0 ? [] : header.slice(separator + 1);\n const type = sourceType.length === 0 ? { text: \"void\", wire: null } : tsType(file, sourceType, language, named);\n let subscription;\n if (!hidden && type.text === \"void\") {\n const parts = split(list.slice(open + 1, closing), \",\");\n if (parts.length === 1 && parts[0].length > 0) {\n const colon = parts[0].findIndex((token) => token.text === \":\");\n if (colon >= 0) {\n const payload = subscriptionPayload(file, parts[0].slice(colon + 1), language, named);\n if (payload) subscription = { payload };\n }\n }\n }\n if (!hidden) {\n result.push({\n name,\n parameters: subscription ? [] : parameters(file, list.slice(open + 1, closing), language, named),\n result: type.text,\n nativeResult: sourceType.length === 0 ? language === \"swift\" ? \"Void\" : \"Unit\" : sourceType.map((token) => token.text).join(\"\"),\n resultWire: type.wire ?? void 0,\n subscription,\n throws: language === \"swift\" ? header.some((token) => token.text === \"throws\") : true,\n async: language === \"swift\" ? header.some((token) => token.text === \"async\") : modifiers.includes(\"suspend\")\n });\n }\n if (list[headerEnd]?.text === \"{\") i = close(file, list, headerEnd, \"{\", \"}\") + 1;\n else if (list[headerEnd]?.text === \"=\") {\n const bodyLine = list[headerEnd].line;\n i = headerEnd + 1;\n while (i < end && list[i].line === bodyLine && list[i].text !== \";\") i++;\n } else i = headerEnd + 1;\n previous = i;\n }\n return result;\n}\nfunction callbackProp(file, name, typeTokens, optional, language, named) {\n const nullable = typeTokens.at(-1)?.text === \"?\";\n let fn = nullable ? typeTokens.slice(0, -1) : typeTokens;\n if (fn[0]?.text === \"(\" && close(file, fn, 0, \"(\", \")\") === fn.length - 1 && fn.some((token) => token.text === \"->\")) {\n fn = fn.slice(1, -1);\n }\n const arrow = fn.findIndex((token) => token.text === \"->\");\n if (arrow < 0 || fn[0]?.text !== \"(\" || close(file, fn, 0, \"(\", \")\") !== arrow - 1) return null;\n const result = fn.slice(arrow + 1).map((token) => token.text).join(\"\");\n const unit = language === \"swift\" ? \"Void\" : \"Unit\";\n if (result !== unit && !(language === \"swift\" && result === \"()\")) {\n fail(file, typeTokens[0], `view callback ${name} must return ${unit}`);\n }\n const inner = fn.slice(1, arrow - 1);\n const callback = inner.length === 0 ? [] : split(inner, \",\").map((arg) => {\n const colon = arg.findIndex((token) => token.text === \":\");\n const type = colon < 0 ? arg : arg.slice(colon + 1);\n const resolved = tsType(file, type, language, named);\n return {\n type: resolved.text,\n nativeType: type.map((token) => token.text).join(\"\"),\n wire: resolved.wire ?? void 0\n };\n });\n const signature = `(${callback.map((arg, index) => `value${index}: ${arg.type}`).join(\", \")}) => void`;\n const nativeType = typeTokens.map((token) => token.text).join(\"\");\n return { name, type: nullable ? `(${signature}) | null` : signature, nativeType, optional, callback };\n}\nfunction viewProp(file, part, named) {\n const colon = part.findIndex((token) => token.text === \":\");\n if (colon !== 1 || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(part[0].text)) {\n fail(file, part[0], \"composable parameter needs a name and an explicit type\");\n }\n const name = part[0].text;\n const equals = split(part.slice(colon + 1), \"=\");\n const typeTokens = equals[0];\n const fallback = equals[1]?.map((token) => token.text).join(\"\");\n const nativeType = typeTokens.map((token) => token.text).join(\"\");\n if (nativeType === \"Modifier\") {\n if (fallback !== \"Modifier\") fail(file, part[0], \"a composable modifier parameter needs the default Modifier\");\n return null;\n }\n const nullable = typeTokens.at(-1)?.text === \"?\";\n if (fallback !== void 0 && !(nullable && fallback === \"null\")) {\n fail(file, part[0], `composable parameter ${name} may only default to null`);\n }\n const optional = fallback !== void 0;\n const callback = callbackProp(file, name, typeTokens, optional, \"kotlin\", named);\n if (callback) return callback;\n const resolved = tsType(file, typeTokens, \"kotlin\", named);\n return { name, type: resolved.text, nativeType, optional, callback: null, wire: resolved.wire ?? void 0 };\n}\nconst PLAIN_ATTRIBUTES = /* @__PURE__ */ new Set([\"MainActor\", \"available\", \"objc\", \"nonobjc\", \"preconcurrency\"]);\nfunction storedProperty(file, list, i, previous, end, owner) {\n const at = list[i];\n const own = list.slice(declarationStart(list, previous, i), i).map((token) => token.text);\n const propName = list[i + 1]?.text ?? \"\";\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(propName)) fail(file, list[i], `${owner} has a property without a simple name`);\n let stop = i + 2;\n let depth = 0;\n while (stop < end) {\n const value = list[stop].text;\n if (depth === 0 && (value === \"=\" || value === \"{\" || value === \";\" || list[stop].line !== list[stop - 1].line)) break;\n if (value === \"(\" || value === \"[\" || value === \"<\") depth++;\n if (value === \")\" || value === \"]\" || value === \">\") depth--;\n stop++;\n }\n const typeTokens = list[i + 2]?.text === \":\" ? list.slice(i + 3, stop) : [];\n const valued = list[stop]?.text === \"=\";\n let next = stop;\n if (valued) {\n const valueLine = list[stop].line;\n while (next < end && list[next].line === valueLine && list[next].text !== \"{\") next++;\n }\n const block = list[next]?.text === \"{\";\n const computed = block && !valued && ![\"willSet\", \"didSet\"].includes(list[next + 1]?.text);\n const resume = block ? close(file, list, next, \"{\", \"}\") + 1 : next;\n return { at, own, propName, typeTokens, valued, stop, computed, resume };\n}\nfunction swiftView(file, list, keyword, floor, body, end, named) {\n const modifiers = declarationModifiers(list, floor, keyword);\n if (list[keyword].text !== \"struct\" || !modifiers.includes(\"public\")) return null;\n if (!list.slice(keyword + 2, body).some((token) => token.text === \"View\")) return null;\n const name = list[keyword + 1].text;\n if (!/^[A-Z][A-Za-z0-9_]*$/.test(name)) fail(file, list[keyword], \"an imported view needs a capitalized name\");\n if (list[keyword + 2]?.text === \"<\") fail(file, list[keyword], `generic view ${name} is unsupported`);\n const props = [];\n let i = body + 1;\n let previous = i;\n while (i < end) {\n const text = list[i].text;\n if (text === \"{\") {\n i = close(file, list, i, \"{\", \"}\") + 1;\n previous = i;\n continue;\n }\n if (text === \"init\" && list[i + 1]?.text === \"(\" && list[i - 1]?.text !== \".\") {\n fail(file, list[i], `view ${name} is imported through its memberwise initializer; remove init(...)`);\n }\n if (text !== \"let\" && text !== \"var\") {\n i++;\n continue;\n }\n const property = storedProperty(file, list, i, previous, end, `view ${name}`);\n const { at, own, propName, typeTokens, valued, stop } = property;\n i = property.resume;\n previous = i;\n const wrapper = own.findIndex((value, index) => own[index - 1] === \"@\" && !PLAIN_ATTRIBUTES.has(value));\n if (property.computed || own.includes(\"static\")) continue;\n if (wrapper >= 0) {\n if (valued || own[wrapper + 1] === \"(\") continue;\n fail(file, at, `@${own[wrapper]} ${propName} in view ${name} needs a value; pass a plain value and a callback instead`);\n }\n if (own.includes(\"private\") || own.includes(\"fileprivate\")) {\n if (valued) continue;\n fail(file, at, `private ${propName} in view ${name} needs a value, or the view cannot be built from javascript`);\n }\n if (valued && text === \"let\") continue;\n if (typeTokens.length === 0) fail(file, at, `view prop ${propName} needs an explicit type`);\n const nullable = typeTokens.at(-1)?.text === \"?\";\n if (valued && !(nullable && list[stop + 1]?.text === \"nil\" && list[stop + 2]?.line !== list[stop + 1].line)) {\n fail(file, list[stop], `view prop ${propName} may only default to nil`);\n }\n const callback = callbackProp(file, propName, typeTokens, nullable, \"swift\", named);\n if (callback) {\n props.push(callback);\n } else {\n const resolved = tsType(file, typeTokens, \"swift\", named);\n props.push({\n name: propName,\n type: resolved.text,\n nativeType: typeTokens.map((token) => token.text).join(\"\"),\n optional: nullable,\n callback: null,\n wire: resolved.wire ?? void 0\n });\n }\n }\n return { name, props };\n}\nfunction collectDataClass(file, list, keyword, name, token, generic, packageName) {\n const modifiers = declarationModifiers(list, 0, keyword - 1);\n let problem = null;\n if (modifiers.includes(\"private\")) {\n problem = `data class ${name} must be public to cross the boundary`;\n }\n let scan = keyword + 2;\n if (list[scan]?.text === \"<\") scan = close(file, list, scan, \"<\", \">\") + 1;\n while ([\"private\", \"protected\", \"public\", \"internal\", \"constructor\"].includes(list[scan]?.text)) scan++;\n const params = [];\n if (list[scan]?.text === \"(\") {\n const closing = close(file, list, scan, \"(\", \")\");\n for (const part of split(list.slice(scan + 1, closing), \",\")) {\n if (part.length > 0) params.push(part);\n }\n } else {\n return null;\n }\n if (list.slice(keyword + 2, scan).some((entry) => entry.text === \"private\" || entry.text === \"protected\")) {\n problem = problem ?? `data class ${name} must be public to cross the boundary`;\n }\n return { name, token, generic, codable: true, problem, body: [], params, packageName };\n}\nfunction collectSwiftEnum(file, body, name, token, generic, header) {\n const backing = header.some((entry) => entry.text === \"String\") ? \"string\" : header.some((entry) => entry.text === \"Int\") ? \"number\" : null;\n if (generic) {\n return { name, token, generic, usable: false, problem: `generic enum ${name} is unsupported`, backing: \"string\", cases: [] };\n }\n if (!backing) {\n return { name, token, generic, usable: false, problem: `enum ${name} needs a String or Int backing to cross the boundary`, backing: \"string\", cases: [] };\n }\n const inherits = header.map((entry) => entry.text);\n if (!inherits.includes(\"Codable\") && !(inherits.includes(\"Decodable\") && inherits.includes(\"Encodable\"))) {\n return { name, token, generic, usable: false, problem: `enum ${name} must conform to Codable to cross the boundary`, backing, cases: [] };\n }\n const memberStarters = /* @__PURE__ */ new Set([\n \"func\",\n \"var\",\n \"let\",\n \"init\",\n \"deinit\",\n \"subscript\",\n \"static\",\n \"public\",\n \"private\",\n \"fileprivate\",\n \"internal\",\n \"open\",\n \"final\",\n \"mutating\",\n \"nonmutating\",\n \"override\",\n \"lazy\",\n \"weak\",\n \"unowned\",\n \"required\",\n \"convenience\",\n \"dynamic\",\n \"indirect\",\n \"typealias\",\n \"import\"\n ]);\n const cases = [];\n let problem = null;\n let counter = 0;\n let i = 0;\n let depth = 0;\n while (i < body.length) {\n if (body[i].text === \"{\") {\n depth++;\n i++;\n continue;\n }\n if (body[i].text === \"}\") {\n depth--;\n i++;\n continue;\n }\n if (depth !== 0 || body[i].text !== \"case\") {\n i++;\n continue;\n }\n let stop = i + 1;\n let inner = 0;\n while (stop < body.length) {\n const value = body[stop].text;\n if (inner === 0 && (value === \";\" || value === \"case\" || memberStarters.has(value))) break;\n if (value === \"(\" || value === \"[\" || value === \"<\") inner++;\n if (value === \")\" || value === \"]\" || value === \">\") inner--;\n stop++;\n if (inner < 0) break;\n }\n for (const item of split(body.slice(i + 1, stop), \",\")) {\n const itemName = item[0]?.text ?? \"\";\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(itemName)) continue;\n if (item.some((entry) => entry.text === \"(\")) {\n problem = problem ?? `enum ${name} has associated values, which cannot cross the boundary`;\n continue;\n }\n if (item.some((entry) => entry.text === \"=\")) {\n problem = problem ?? `enum ${name} has an explicit raw value, which cannot cross the boundary`;\n continue;\n }\n cases.push({ name: itemName, value: backing === \"string\" ? itemName : counter });\n counter++;\n }\n i = stop;\n }\n return {\n name,\n token,\n generic,\n usable: problem === null,\n problem: problem ?? \"\",\n backing,\n cases\n };\n}\nfunction collectKotlinEnum(file, body, name, token) {\n const cases = [];\n let i = 0;\n const stopWords = /* @__PURE__ */ new Set([\n \";\",\n \"fun\",\n \"val\",\n \"var\",\n \"init\",\n \"companion\",\n \"constructor\",\n \"object\",\n \"inner\",\n \"abstract\",\n \"open\",\n \"override\",\n \"lateinit\",\n \"const\",\n \"public\",\n \"private\",\n \"protected\",\n \"internal\"\n ]);\n while (i < body.length && !stopWords.has(body[i].text)) {\n if (body[i].text === \",\") {\n i++;\n continue;\n }\n if (body[i].text === \"@\") {\n i += 2;\n if (body[i]?.text === \"(\") i = close(file, body, i, \"(\", \")\") + 1;\n continue;\n }\n const entry = body[i].text;\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(entry)) break;\n cases.push({ name: entry, value: entry });\n i++;\n while (i < body.length && (body[i].text === \"(\" || body[i].text === \"{\")) {\n i = close(file, body, i, body[i].text, body[i].text === \"(\" ? \")\" : \"}\") + 1;\n }\n }\n return {\n name,\n token,\n generic: false,\n usable: cases.length > 0,\n problem: cases.length > 0 ? \"\" : `enum class ${name} has no entries to cross the boundary`,\n backing: \"string\",\n cases\n };\n}\nconst STRUCT_MEMBER_WORDS = /* @__PURE__ */ new Set([\n \"init\",\n \"deinit\",\n \"func\",\n \"subscript\",\n \"struct\",\n \"enum\",\n \"class\",\n \"extension\",\n \"object\",\n \"static\"\n]);\nfunction swiftStructFields(file, struct, named) {\n const fields = [];\n const body = struct.body;\n const end = body.length;\n let i = 0;\n let previous = 0;\n while (i < end) {\n const text = body[i].text;\n if (text === \"{\") {\n i = close(file, body, i, \"{\", \"}\") + 1;\n previous = i;\n continue;\n }\n if (STRUCT_MEMBER_WORDS.has(text)) {\n let scan = i + 1;\n let angle = 0;\n let round = 0;\n while (scan < end) {\n const value = body[scan].text;\n if (value === \"<\") angle++;\n else if (value === \">\") angle--;\n else if (value === \"(\") round++;\n else if (value === \")\") round--;\n else if (value === \"{\" && angle === 0 && round === 0) break;\n else if (value === \";\" && angle === 0 && round === 0) break;\n scan++;\n }\n i = body[scan]?.text === \"{\" ? close(file, body, scan, \"{\", \"}\") + 1 : scan + 1;\n previous = i;\n continue;\n }\n if (text !== \"let\" && text !== \"var\") {\n i++;\n continue;\n }\n const property = storedProperty(file, body, i, previous, end, `struct ${struct.name}`);\n const { at, own, propName, typeTokens, valued } = property;\n i = property.resume;\n previous = i;\n if (property.computed || own.includes(\"static\")) continue;\n const wrapper = own.findIndex((value, index) => own[index - 1] === \"@\" && !PLAIN_ATTRIBUTES.has(value));\n if (wrapper >= 0) {\n fail(file, at, `@${own[wrapper]} ${propName} in struct ${struct.name} is unsupported; cross a plain value instead`);\n }\n if (own.includes(\"private\") || own.includes(\"fileprivate\")) {\n if (valued) continue;\n fail(file, at, `private ${propName} in struct ${struct.name} needs a value, or calls cannot supply it`);\n }\n if (typeTokens.length === 0) fail(file, at, `struct ${struct.name} field ${propName} needs an explicit type`);\n const resolved = tsType(file, typeTokens, \"swift\", named);\n fields.push({\n name: propName,\n type: resolved.text,\n nativeType: typeTokens.map((token) => token.text).join(\"\"),\n optional: valued,\n wire: resolved.wire ?? void 0\n });\n }\n return fields;\n}\nfunction kotlinStructFields(file, struct, named) {\n const fields = [];\n for (const part of struct.params) {\n const keyword = part.findIndex((token) => token.text === \"val\" || token.text === \"var\");\n if (keyword < 0) fail(file, part[0], `data class ${struct.name} field needs val or var`);\n if (part.some((token) => token.text === \"vararg\")) {\n fail(file, part[0], `data class ${struct.name} field ${part[keyword + 1]?.text ?? \"\"} is vararg, which cannot cross the boundary`);\n }\n const fieldName = part[keyword + 1]?.text ?? \"\";\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(fieldName)) {\n fail(file, part[keyword], `data class ${struct.name} has a field without a simple name`);\n }\n let colon = -1;\n let equals = -1;\n let depth = 0;\n for (let t = keyword + 2; t < part.length; t++) {\n const value = part[t].text;\n if (value === \"(\" || value === \"[\" || value === \"<\") depth++;\n else if (value === \")\" || value === \"]\" || value === \">\") depth--;\n else if (depth === 0 && value === \":\" && colon < 0) colon = t;\n else if (depth === 0 && value === \"=\" && equals < 0) equals = t;\n }\n if (colon < 0) fail(file, part[keyword], `data class ${struct.name} field ${fieldName} needs an explicit type`);\n const typeTokens = part.slice(colon + 1, equals < 0 ? part.length : equals);\n const fallback = equals < 0 ? void 0 : part.slice(equals + 1).map((token) => token.text).join(\"\");\n const resolved = tsType(file, typeTokens, \"kotlin\", named);\n fields.push({\n name: fieldName,\n type: resolved.text,\n nativeType: typeTokens.map((token) => token.text).join(\"\"),\n optional: equals >= 0,\n wire: resolved.wire ?? void 0,\n fallback\n });\n }\n return fields;\n}\nfunction finalizeNamedTypes(file, language, named, structs, enums, modules, views) {\n const reached = /* @__PURE__ */ new Set();\n const queue = [];\n const visitWire = (wire) => {\n if (!wire) return;\n if (wire.kind === \"struct\" || wire.kind === \"enum\") {\n if (!reached.has(wire.name)) {\n reached.add(wire.name);\n if (wire.kind === \"struct\") queue.push(wire.name);\n }\n } else if (wire.kind === \"array\") visitWire(wire.element);\n else if (wire.kind === \"map\") visitWire(wire.value);\n else if (wire.kind === \"nullable\") visitWire(wire.inner);\n };\n for (const module of modules) {\n for (const method of module.methods) {\n for (const param of method.parameters) visitWire(param.wire);\n visitWire(method.resultWire);\n for (const arg of method.subscription?.payload ?? []) visitWire(arg.wire);\n }\n }\n for (const view of views) {\n for (const prop of view.props) {\n visitWire(prop.wire);\n for (const arg of prop.callback ?? []) visitWire(arg.wire);\n }\n }\n const byName = new Map(structs.map((entry) => [entry.name, entry]));\n const parsed = /* @__PURE__ */ new Map();\n while (queue.length > 0) {\n const name = queue.pop();\n if (parsed.has(name)) continue;\n const decl = byName.get(name);\n if (!decl) continue;\n const fields = language === \"swift\" ? swiftStructFields(file, decl, named) : kotlinStructFields(file, decl, named);\n parsed.set(name, fields);\n for (const field of fields) visitWire(field.wire);\n }\n return {\n structs: structs.filter((entry) => reached.has(entry.name)).map((entry) => ({ name: entry.name, fields: parsed.get(entry.name) ?? [] })),\n enums: enums.filter((entry) => reached.has(entry.name)).map((entry) => ({ name: entry.name, backing: entry.backing, cases: entry.cases }))\n };\n}\nfunction collectNamedTypes(file, list, language, packageName) {\n const structs = [];\n const enums = [];\n let depth = 0;\n let i = 0;\n while (i < list.length) {\n const text = list[i].text;\n if (text === \"{\") {\n depth++;\n i++;\n continue;\n }\n if (text === \"}\") {\n depth--;\n i++;\n continue;\n }\n if (depth !== 0) {\n i++;\n continue;\n }\n const isSwiftStruct = language === \"swift\" && text === \"struct\";\n const isSwiftEnum = language === \"swift\" && text === \"enum\";\n const isDataClass = language === \"kotlin\" && text === \"class\" && list[i - 1]?.text === \"data\";\n const isKotlinEnum = language === \"kotlin\" && text === \"class\" && list[i - 1]?.text === \"enum\";\n if (!isSwiftStruct && !isSwiftEnum && !isDataClass && !isKotlinEnum) {\n i++;\n continue;\n }\n const name = list[i + 1]?.text;\n if (!name || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) {\n i++;\n continue;\n }\n const token = list[i + 1];\n const generic = list[i + 2]?.text === \"<\";\n if (isDataClass) {\n const dataClass = collectDataClass(file, list, i, name, token, generic, packageName);\n let scan = i + 2;\n if (list[scan]?.text === \"<\") scan = close(file, list, scan, \"<\", \">\") + 1;\n while ([\"private\", \"protected\", \"public\", \"internal\", \"constructor\"].includes(list[scan]?.text)) scan++;\n i = list[scan]?.text === \"(\" ? close(file, list, scan, \"(\", \")\") + 1 : i + 2;\n if (dataClass) structs.push(dataClass);\n continue;\n }\n let body = i + 2;\n let angle = 0;\n let round = 0;\n while (body < list.length) {\n const value = list[body].text;\n if (value === \"<\") angle++;\n else if (value === \">\") angle--;\n else if (value === \"(\") round++;\n else if (value === \")\") round--;\n else if (value === \"{\" && angle === 0 && round === 0) break;\n body++;\n }\n if (body >= list.length) {\n i++;\n continue;\n }\n const end = close(file, list, body, \"{\", \"}\");\n const header = list.slice(i + 2, body);\n if (isSwiftStruct) {\n const inherits = header.map((entry) => entry.text);\n const modifiers = declarationModifiers(list, 0, i);\n structs.push({\n name,\n token,\n generic,\n codable: inherits.includes(\"Codable\") || inherits.includes(\"Decodable\") && inherits.includes(\"Encodable\"),\n problem: modifiers.includes(\"private\") || modifiers.includes(\"fileprivate\") ? `struct ${name} is private to its file and cannot cross the boundary` : null,\n body: list.slice(body + 1, end),\n params: [],\n packageName: void 0\n });\n } else {\n enums.push(\n language === \"swift\" ? collectSwiftEnum(file, list.slice(body + 1, end), name, token, generic, header) : collectKotlinEnum(file, list.slice(body + 1, end), name, token)\n );\n }\n i = end + 1;\n }\n return {\n structs,\n enums,\n names: {\n structs: new Map(\n structs.map((entry) => [entry.name, { codable: entry.codable, generic: entry.generic, problem: entry.problem }])\n ),\n enums: new Map(\n enums.map((entry) => [entry.name, { usable: entry.usable, problem: entry.problem }])\n )\n }\n };\n}\nfunction composableView(file, list, keyword, floor, named) {\n const modifiers = declarationModifiers(list, floor, keyword);\n if (!modifiers.some((value, index) => value === \"@\" && modifiers[index + 1] === \"Composable\")) return null;\n if (modifiers.includes(\"private\") || modifiers.includes(\"internal\")) return null;\n const name = list[keyword + 1]?.text;\n if (!name || !/^[A-Z][A-Za-z0-9_]*$/.test(name)) fail(file, list[keyword], \"an imported composable needs a capitalized name\");\n if (list[keyword + 2]?.text !== \"(\") fail(file, list[keyword], \"generic or extension composables are unsupported\");\n const closing = close(file, list, keyword + 2, \"(\", \")\");\n if (list[closing + 1]?.text === \":\") fail(file, list[closing + 1], `composable ${name} must return Unit`);\n const inner = list.slice(keyword + 3, closing);\n const props = inner.length === 0 ? [] : split(inner, \",\").flatMap((part) => {\n if (part.length === 0) return [];\n const prop = viewProp(file, part, named);\n return prop ? [prop] : [];\n });\n return { name, props };\n}\nfunction nativeSourceContract(file, source) {\n const language = file.endsWith(\".swift\") ? \"swift\" : file.endsWith(\".kt\") ? \"kotlin\" : void 0;\n if (!language) throw new Error(`${file}: expected a .swift or .kt source file`);\n const list = tokens(file, source);\n const packageToken = language === \"kotlin\" ? list.findIndex((token) => token.text === \"package\") : -1;\n const packageLine = packageToken < 0 ? [] : list.slice(packageToken + 1).filter((token) => token.line === list[packageToken].line);\n while (packageLine.at(-1)?.text === \";\") packageLine.pop();\n const packageName = packageToken < 0 ? void 0 : packageLine.map((token) => token.text).join(\"\");\n if (packageName && !/^[A-Za-z_][A-Za-z0-9_]*(\\.[A-Za-z_][A-Za-z0-9_]*)*$/.test(packageName)) {\n fail(file, list[packageToken], `unsupported kotlin package ${packageName}`);\n }\n const collected = collectNamedTypes(file, list, language, packageName);\n const named = collected.names;\n const modules = [];\n const views = [];\n let defaultView = false;\n let i = 0;\n let previous = 0;\n while (i < list.length) {\n const kind = list[i].text;\n const declaration2 = language === \"swift\" ? kind === \"class\" || kind === \"struct\" : kind === \"object\";\n if (language === \"kotlin\" && kind === \"fun\") {\n const view2 = composableView(file, list, i, previous, named);\n if (view2) {\n if (views.some((other) => other.name === view2.name)) fail(file, list[i], `overloaded composable ${view2.name} is unsupported`);\n views.push(view2);\n }\n i++;\n continue;\n }\n if (!declaration2) {\n if (kind === \"{\") {\n i = close(file, list, i, \"{\", \"}\") + 1;\n previous = i;\n } else i++;\n continue;\n }\n const name = list[i + 1]?.text;\n if (!name) fail(file, list[i], \"native type has no name\");\n let body = i + 2;\n while (body < list.length && list[body].text !== \"{\") body++;\n if (body === list.length) fail(file, list[i], \"native type has no body\");\n const end = close(file, list, body, \"{\", \"}\");\n const prefix = list.slice(previous, i).map((token) => token.text);\n if (language === \"swift\" && prefix.some((value, index) => value === \"@\" && prefix[index + 1] === \"main\")) {\n defaultView = true;\n }\n const inherits = list.slice(i + 2, body).map((token) => token.text);\n if (inherits.includes(language === \"swift\" ? \"PeachModule\" : \"OneModule\")) {\n modules.push({ name, methods: methods(file, list, body, end, language, named) });\n }\n const view = language === \"swift\" ? swiftView(file, list, i, previous, body, end, named) : null;\n if (view) views.push(view);\n i = end + 1;\n previous = i;\n }\n const finalized = finalizeNamedTypes(file, language, named, collected.structs, collected.enums, modules, views);\n const structs = finalized.structs;\n const enums = finalized.enums;\n const canonical = JSON.stringify({ language, packageName, modules, views, structs, enums, defaultView });\n const hash = createHash(\"sha256\").update(canonical).digest(\"hex\");\n const declarations = structs.map(\n (struct) => `export interface ${struct.name} {${struct.fields.map((field) => ` ${field.name}${field.optional ? \"?\" : \"\"}: ${field.type};`).join(\"\")} }`\n );\n declarations.push(...enums.map(\n (type) => `export type ${type.name} = ${type.cases.map((entry) => typeof entry.value === \"string\" ? JSON.stringify(entry.value) : String(entry.value)).join(\" | \")}`\n ));\n declarations.push(...modules.map((module) => [\n `export declare const ${module.name}: {`,\n ...module.methods.map(\n (method) => method.subscription ? ` ${method.name}(listener: (${method.subscription.payload.map((arg, index) => `value${index}: ${arg.type}`).join(\", \")}) => void): () => void` : ` ${method.name}(${method.parameters.map((param) => `${param.name}: ${param.type}`).join(\", \")}): Promise<${method.result}>`\n ),\n \"}\"\n ].join(\"\\n\")));\n declarations.push(...views.map(\n (view) => `export declare function ${view.name}(props: {${view.props.map((prop) => ` ${prop.name}${prop.optional ? \"?\" : \"\"}: ${prop.type};`).join(\"\")} style?: StyleProp<ViewStyle> }): ReactElement`\n ));\n if (defaultView) {\n declarations.unshift(\"export default function SwiftPackage(props: Record<string, unknown>): ReactElement\");\n }\n if (views.length > 0) declarations.unshift(\"import type { StyleProp, ViewStyle } from 'react-native'\");\n if (defaultView || views.length > 0) declarations.unshift(\"import type { ReactElement } from 'react'\");\n const declaration = `${GENERATED_HEADER}${declarations.join(\"\\n\\n\")}\n`;\n return { language, packageName, modules, views, structs, enums, defaultView, hash, declaration };\n}\nfunction kotlinSourceId(root, file) {\n const path = relative(root, file).replaceAll(\"\\\\\", \"/\");\n if (path.startsWith(\"../\") || !path.endsWith(\".kt\")) {\n throw new Error(`${file} is not a kotlin source under ${root}`);\n }\n return `K_${createHash(\"sha256\").update(path).digest(\"hex\").slice(0, 16)}`;\n}\nfunction swiftPodManifest(file, source) {\n const list = tokens(file, source);\n const modes = /* @__PURE__ */ new Set();\n let mainActorIsolation = false;\n for (let i = 0; i < list.length; i++) {\n if (list[i].text === \".\" && list[i + 1]?.text === \"package\" && list[i + 2]?.text === \"(\") {\n fail(file, list[i], \"SwiftPM package dependencies are unsupported by One prebuild\");\n }\n if (list[i].text === \".\" && list[i + 1]?.text === \"swiftLanguageMode\" && list[i + 2]?.text === \"(\") {\n const mode = /^v(\\d+)$/.exec(list[i + 4]?.text ?? \"\");\n if (list[i + 3]?.text !== \".\" || !mode) fail(file, list[i], \"unsupported swift language mode\");\n modes.add(Number(mode[1]));\n }\n if (list[i].text === \"swiftLanguageModes\" && list[i + 1]?.text === \":\") {\n const opening = i + 2;\n if (list[opening]?.text !== \"[\") fail(file, list[i], \"unsupported swift language modes\");\n const ending = close(file, list, opening, \"[\", \"]\");\n for (let j = opening; j < ending; j++) {\n if (list[j].text === \".\" && /^v\\d+$/.test(list[j + 1]?.text ?? \"\")) {\n modes.add(Number(list[j + 1].text.slice(1)));\n }\n }\n }\n if (list[i].text === \".\" && list[i + 1]?.text === \"defaultIsolation\" && list[i + 2]?.text === \"(\") {\n if (list[i + 3]?.text !== \"MainActor\") fail(file, list[i], \"unsupported swift default isolation\");\n mainActorIsolation = true;\n }\n }\n if (modes.size > 1) throw new Error(`${file}: One pod needs one swift language mode; found ${[...modes].join(\", \")}`);\n const languageMode = modes.values().next().value ?? 5;\n if (languageMode !== 5 && languageMode !== 6) {\n throw new Error(`${file}: unsupported swift language mode v${languageMode}`);\n }\n return { languageMode, mainActorIsolation };\n}\nfunction writeNativeSourceDeclaration(file) {\n const contract = nativeSourceContract(file, readFileSync(file, \"utf8\"));\n const extension = contract.language === \"swift\" ? \".swift\" : \".kt\";\n const declaration = join(dirname(file), `${basename(file, extension)}.d${extension}.ts`);\n if (contract.modules.length === 0 && contract.views.length === 0 && !contract.defaultView) {\n if (existsSync(declaration) && readFileSync(declaration, \"utf8\").startsWith(GENERATED_HEADER)) {\n rmSync(declaration, { force: true });\n }\n return contract;\n }\n writeGeneratedFile(declaration, contract.declaration);\n return contract;\n}\nfunction writeNativeSourceDeclarations(root) {\n const contracts = [];\n const visit = (dir) => {\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n if (entry.name.startsWith(\".\") || SKIP_SOURCE_DIRS.has(entry.name)) continue;\n const file = join(dir, entry.name);\n if (entry.isDirectory()) visit(file);\n else if (entry.isFile() && /\\.(swift|kt)$/.test(entry.name) && entry.name !== \"Package.swift\") {\n contracts.push(writeNativeSourceDeclaration(file));\n }\n }\n };\n visit(root);\n for (const packageDir of swiftPackageDirectories(root).values()) {\n writeSwiftPackageArtifacts(packageDir);\n }\n return contracts;\n}\nfunction writeSwiftPackageArtifacts(packageDir) {\n const contracts = [];\n const files = {};\n const modules = {};\n const views = {};\n const defaultViewFiles = [];\n const visit = (dir) => {\n const entries = readdirSync(dir, { withFileTypes: true }).sort((a, b) => a.name < b.name ? -1 : a.name > b.name ? 1 : 0);\n for (const entry of entries) {\n if (entry.name.startsWith(\".\") || SKIP_SOURCE_DIRS.has(entry.name)) continue;\n const file = join(dir, entry.name);\n if (entry.isDirectory()) visit(file);\n else if (entry.isFile() && entry.name.endsWith(\".swift\") && entry.name !== \"Package.swift\") {\n const contract = writeNativeSourceDeclaration(file);\n contracts.push(contract);\n const name = relative(packageDir, file).replaceAll(\"\\\\\", \"/\");\n files[name] = [...contract.modules, ...contract.views].map((entry2) => entry2.name);\n for (const module of contract.modules) modules[module.name] = module.methods.map((method) => method.name);\n for (const view of contract.views) views[view.name] = view.props.map((prop) => prop.name);\n if (contract.defaultView) defaultViewFiles.push(name);\n }\n }\n };\n visit(packageDir);\n const packageId = swiftPackageId(packageDir);\n const rendered = renderSwiftSourceGlue(packageId, contracts);\n const descriptor = join(packageDir, \".one-native-source.json\");\n const glue = join(packageDir, \".one-native-source.swift.txt\");\n const exported = contracts.some((contract) => contract.modules.length > 0 || contract.views.length > 0);\n if (exported) {\n const json = `${JSON.stringify({ generatedBy: \"one typegen\", packageId, hash: rendered.hash, files, modules, views, defaultViewFiles }, null, 2)}\n`;\n writeGeneratedFile(descriptor, json);\n writeGeneratedFile(glue, rendered.source);\n } else if (existsSync(descriptor) && readFileSync(descriptor, \"utf8\").includes('\"generatedBy\": \"one typegen\"')) {\n rmSync(descriptor, { force: true });\n rmSync(glue, { force: true });\n }\n return { packageId, hash: rendered.hash, files, modules, views, defaultViewFiles, contracts, glue: exported ? rendered.source : null };\n}\nfunction renderSwiftSourceGlue(packageId, contracts) {\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(packageId)) {\n throw new Error(`invalid swift package id ${packageId}`);\n }\n for (const contract of contracts) {\n if (contract.language !== \"swift\") throw new Error(\"swift glue received a kotlin contract\");\n }\n const modules = contracts.flatMap((contract) => contract.modules);\n const views = contracts.flatMap((contract) => contract.views);\n const names = /* @__PURE__ */ new Set();\n for (const { name } of [...modules, ...views]) {\n if (names.has(name)) throw new Error(`swift package ${packageId} declares ${name} twice`);\n names.add(name);\n }\n const hash = createHash(\"sha256\").update(JSON.stringify({ packageId, modules, views })).digest(\"hex\");\n const hasMain = contracts.some((contract) => contract.defaultView);\n const bodyName = `OneNativeSourceBody_${packageId}`;\n const className = `OneNativeSource_${packageId}`;\n const viewsName = `OneNativeSourceViews_${packageId}`;\n const renderCase = (method, module) => {\n const subscription = method.subscription;\n if (subscription) {\n const channel = `OneNativeSource.${packageId}.${module.name}.${method.name}`;\n const closureArgs = subscription.payload.map((arg, index) => `a${index}: ${arg.nativeType}`).join(\", \");\n const emitArgs = subscription.payload.map((_, index) => `a${index}`).join(\", \");\n const prefix2 = `${method.throws ? \"try \" : \"\"}${method.async ? \"await \" : \"\"}`;\n return [\n ` case ${JSON.stringify(method.name)}:`,\n ` guard values.isEmpty else { throw NSError(domain: \"OneNativeSource\", code: 2, userInfo: [NSLocalizedDescriptionKey: \"${packageId}.${module.name}.${method.name} subscribes; it takes no arguments\"]) }`,\n ` let channel = ${JSON.stringify(channel)}`,\n ` ${prefix2}${module.name}Instance.${method.name}({ ${closureArgs ? `(${closureArgs}) in ` : \"\"}postEvent(channel, args([${emitArgs}])) })`,\n ' return \"null\"'\n ];\n }\n const lines = [\n ` case ${JSON.stringify(method.name)}:`,\n ` guard values.count == ${method.parameters.length} else { throw NSError(domain: \"OneNativeSource\", code: 2, userInfo: [NSLocalizedDescriptionKey: \"${packageId}.${module.name}.${method.name} expects ${method.parameters.length} arguments\"]) }`\n ];\n method.parameters.forEach((parameter, index) => {\n lines.push(` let arg${index} = try decode(values[${index}], as: ${parameter.nativeType}.self)`);\n });\n const argumentsText = method.parameters.map(\n (parameter, index) => `${parameter.label === \"_\" ? \"\" : `${parameter.label}: `}arg${index}`\n ).join(\", \");\n const prefix = `${method.throws ? \"try \" : \"\"}${method.async ? \"await \" : \"\"}`;\n const call = `${module.name}Instance.${method.name}(${argumentsText})`;\n if (method.result === \"void\") {\n lines.push(` ${prefix}${call}`, ' return \"null\"');\n } else {\n lines.push(` let result = ${prefix}${call}`);\n if (method.nativeResult === \"Int\") {\n lines.push(' guard abs(Double(result)) <= 9_007_199_254_740_991 else { throw NSError(domain: \"OneNativeSource\", code: 2, userInfo: [NSLocalizedDescriptionKey: \"result exceeds the JavaScript safe integer range\"]) }');\n }\n lines.push(\" return try encode(result)\");\n }\n return lines;\n };\n const notLinked = ' throw NSError(domain: \"OneNativeSource\", code: 1, userInfo: [NSLocalizedDescriptionKey: \"native module \\\\(module) is not linked; rebuild the app\"])';\n const renderCall = () => modules.length === 0 ? [\n \" static func call(_ module: String, _ method: String, _ argsJson: String) async throws -> String {\",\n notLinked,\n \" }\"\n ] : [\n \" static func call(_ module: String, _ method: String, _ argsJson: String) async throws -> String {\",\n \" guard let values = try JSONSerialization.jsonObject(with: Data(argsJson.utf8)) as? [Any] else {\",\n ' throw NSError(domain: \"OneNativeSource\", code: 2, userInfo: [NSLocalizedDescriptionKey: \"arguments must be a JSON array\"])',\n \" }\",\n \" switch module {\",\n ...modules.flatMap((module) => [\n ` case ${JSON.stringify(`${packageId}.${module.name}`)}:`,\n \" switch method {\",\n ...module.methods.flatMap((method) => renderCase(method, module)),\n ' default: throw NSError(domain: \"OneNativeSource\", code: 1, userInfo: [NSLocalizedDescriptionKey: \"native method \\\\(module).\\\\(method) is not linked; rebuild the app\"])',\n \" }\"\n ]),\n \" default:\",\n ` ${notLinked}`,\n \" }\",\n \" }\"\n ];\n const renderViews = () => {\n const notLinked2 = ' default: throw NSError(domain: \"OneNativeSource\", code: 1, userInfo: [NSLocalizedDescriptionKey: \"swift view \\\\(name) is not linked; rebuild the app\"])';\n const fieldsOf = (view) => view.props.filter((prop) => !prop.callback || prop.optional).map((prop, index) => {\n const type = prop.callback ? \"Bool?\" : prop.nativeType;\n const optional = type.endsWith(\"?\");\n const list = /^\\[(.*)\\]\\??$/.exec(type);\n return {\n name: prop.name,\n type,\n optional,\n list: list && !list[1].includes(\":\") ? list[1] : null,\n key: `p${index}`\n };\n });\n return [\n \" private struct OneListPatch<E: Decodable>: Decodable {\",\n \" let length: Int\",\n \" let set: [(Int, E)]\",\n \" private struct Entry: Decodable {\",\n \" let index: Int\",\n \" let value: E\",\n \" init(from decoder: Decoder) throws {\",\n \" var c = try decoder.unkeyedContainer()\",\n \" index = try c.decode(Int.self)\",\n \" value = try c.decode(E.self)\",\n \" }\",\n \" }\",\n \" private enum CodingKeys: String, CodingKey { case length, set }\",\n \" init(from decoder: Decoder) throws {\",\n \" let c = try decoder.container(keyedBy: CodingKeys.self)\",\n \" length = try c.decode(Int.self, forKey: .length)\",\n \" set = try c.decode([Entry].self, forKey: .set).map { ($0.index, $0.value) }\",\n \" }\",\n \" }\",\n // truncate to the new length, replace held indices, append the rest in order\n \" private nonisolated static func patch<E>(_ list: inout [E], _ patch: OneListPatch<E>) -> Bool {\",\n \" if patch.length < 0 { return false }\",\n \" if list.count > patch.length { list.removeLast(list.count - patch.length) }\",\n \" for (index, value) in patch.set {\",\n \" if index < list.count { list[index] = value } else if index == list.count && index < patch.length { list.append(value) } else { return false }\",\n \" }\",\n \" return list.count == patch.length\",\n \" }\",\n \" private nonisolated static func missing(_ prop: String) -> Error {\",\n ' NSError(domain: \"OneNativeSource\", code: 1, userInfo: [NSLocalizedDescriptionKey: \"missing prop \\\\(prop)\"])',\n \" }\",\n ...views.flatMap((view) => {\n const fields = fieldsOf(view);\n const lists = fields.filter((field) => field.list);\n return [\n // one pass over the document text: an absent key is nil and a present\n // one carries its value, which may itself be null for an optional type\n ...lists.length > 0 ? [\n ` private struct Lists_${view.name}: Decodable {`,\n ...lists.map((field) => ` let ${field.key}: OneListPatch<${field.list}>?`),\n ` private enum CodingKeys: String, CodingKey { ${lists.map((field) => `case ${field.key} = ${JSON.stringify(field.name)}`).join(\"; \")} }`,\n \" }\"\n ] : [],\n ` private struct Doc_${view.name}: Decodable {`,\n \" let seq: Int\",\n \" let base: Int?\",\n ...lists.length > 0 ? [` let lists: Lists_${view.name}?`] : [],\n ...fields.map((field) => ` let ${field.key}: Optional<${field.type}>`),\n ` private enum CodingKeys: String, CodingKey { ${['case seq = \"$seq\"', 'case base = \"$base\"', 'case lists = \"$lists\"', ...fields.map((field) => `case ${field.key} = ${JSON.stringify(field.name)}`)].join(\"; \")} }`,\n \" init(from decoder: Decoder) throws {\",\n \" let c = try decoder.container(keyedBy: CodingKeys.self)\",\n \" seq = try c.decodeIfPresent(Int.self, forKey: .seq) ?? 0\",\n \" base = try c.decodeIfPresent(Int.self, forKey: .base)\",\n ...lists.length > 0 ? [` lists = try c.decodeIfPresent(Lists_${view.name}.self, forKey: .lists)`] : [],\n ...fields.map(\n (field) => ` ${field.key} = try c.contains(.${field.key}) ? Optional<${field.type}>.some(c.decode(${field.type}.self, forKey: .${field.key})) : Optional<${field.type}>.none`\n ),\n \" }\",\n \" }\",\n ` private final class Held_${view.name} {`,\n \" var oneSeq: Int\",\n ...fields.map((field) => ` var \\`${field.name}\\`: ${field.type}`),\n ` init(_ d: Doc_${view.name}) throws {`,\n \" oneSeq = d.seq\",\n ...fields.flatMap(\n (field) => field.optional ? [` \\`${field.name}\\` = d.${field.key}.flatMap { $0 }`] : [\n ` guard let ${field.key} = d.${field.key} else { throw ${bodyName}.missing(${JSON.stringify(field.name)}) }`,\n ` \\`${field.name}\\` = ${field.key}`\n ]\n ),\n \" }\",\n // all or nothing: lists are patched into copies first\n ` func apply(_ d: Doc_${view.name}) -> Bool {`,\n \" if d.base != oneSeq { return false }\",\n ...lists.flatMap((field) => [\n ` var ${field.key} = \\`${field.name}\\``,\n ` if let v = d.${field.key} { ${field.key} = v }`,\n ` if let p = d.lists?.${field.key} {`,\n ...field.optional ? [\n ` guard var items = ${field.key} else { return false }`,\n ` if !${bodyName}.patch(&items, p) { return false }`,\n ` ${field.key} = items`\n ] : [` if !${bodyName}.patch(&${field.key}, p) { return false }`],\n \" }\"\n ]),\n ...fields.map(\n (field) => field.list ? ` \\`${field.name}\\` = ${field.key}` : ` if let v = d.${field.key} { \\`${field.name}\\` = v }`\n ),\n \" oneSeq = d.seq\",\n \" return true\",\n \" }\",\n \" }\"\n ];\n }),\n // nil asks the host for a full document\n \" static func update(_ held: AnyObject?, _ name: String, _ text: String) throws -> AnyObject? {\",\n \" let data = Data(text.utf8)\",\n \" switch name {\",\n ...views.flatMap((view) => [\n ` case ${JSON.stringify(view.name)}:`,\n ` let doc = try decode(Doc_${view.name}.self, from: data)`,\n ` if doc.base == nil { return try Held_${view.name}(doc) }`,\n ` guard let h = held as? Held_${view.name}, h.apply(doc) else { return nil }`,\n \" return h\"\n ]),\n notLinked2,\n \" }\",\n \" }\",\n \" static func build(_ held: AnyObject, _ name: String, _ emit: @escaping (String, String) -> Void) throws -> AnyView {\",\n \" switch name {\",\n ...views.flatMap((view) => [\n ` case ${JSON.stringify(view.name)}:`,\n ` guard ${fieldsOf(view).length > 0 ? \"let props = held as?\" : \"held is\"} Held_${view.name} else { throw NSError(domain: \"OneNativeSource\", code: 1, userInfo: [NSLocalizedDescriptionKey: \"props of another view for \\\\(name)\"]) }`,\n ` return AnyView(${view.name}(`,\n ...view.props.map((prop, index) => {\n const comma = index === view.props.length - 1 ? \"\" : \",\";\n const key = JSON.stringify(prop.name);\n if (prop.callback) {\n const params = prop.callback.map((arg, n) => `a${n}: ${arg.nativeType}`).join(\", \");\n const lambda = `{ (${params}) -> Void in emit(${key}, args([${prop.callback.map((_, n) => `a${n}`).join(\", \")}])) }`;\n return ` ${prop.name}: ${prop.optional ? `props.\\`${prop.name}\\` == true ? ${lambda} : nil` : lambda}${comma}`;\n }\n return ` ${prop.name}: props.\\`${prop.name}\\`${comma}`;\n }),\n \" ))\"\n ]),\n notLinked2,\n \" }\",\n \" }\",\n // one-shot entry for hosts that keep no held props (peach)\n \" static func view(_ name: String, _ propsJson: String, _ emit: @escaping (String, String) -> Void) throws -> AnyView {\",\n ' guard let held = try update(nil, name, propsJson) else { throw NSError(domain: \"OneNativeSource\", code: 1, userInfo: [NSLocalizedDescriptionKey: \"\\\\(name) needs a full props document\"]) }',\n \" return try build(held, name, emit)\",\n \" }\"\n ];\n };\n const source = [\n \"import Foundation\",\n \"import SwiftUI\",\n \"\",\n `@MainActor public enum ${bodyName} {`,\n ` public static let hash = ${JSON.stringify(hash)}`,\n \"#if os(WASI)\",\n \" private struct Request: Decodable { let module: String; let method: String; let argsJson: String; let contractHash: String }\",\n \" private struct Reply: Encodable { let ok: Bool; let value: String?; let error: String?; let pending: Int32? }\",\n \" private static var output: [UInt8] = []\",\n \" private static var finished: [Int32: Reply] = [:]\",\n \" private static var nextCall: Int32 = 0\",\n \" // peach runs tasks inline, so a call finishes before its task launch returns\",\n \" // unless it waits on the clock; then it answers pending and the host polls\",\n \" // it after running the timers.\",\n \" static func callWasm(_ payload: UnsafePointer<UInt8>?, _ length: Int32) -> UnsafeMutablePointer<UInt8>? {\",\n \" let id = nextCall\",\n \" nextCall &+= 1\",\n \" do {\",\n ' guard let payload, length >= 0 else { throw NSError(domain: \"OneNativeSource\", code: 2, userInfo: [NSLocalizedDescriptionKey: \"missing call payload\"]) }',\n \" let request = try JSONDecoder().decode(Request.self, from: Data(bytes: payload, count: Int(length)))\",\n ' guard request.contractHash == hash else { throw NSError(domain: \"OneNativeSource\", code: 4, userInfo: [NSLocalizedDescriptionKey: \"native module \\\\(request.module) changed; rebuild the app\"]) }',\n \" Task {\",\n \" do {\",\n \" finished[id] = Reply(ok: true, value: try await call(request.module, request.method, request.argsJson), error: nil, pending: nil)\",\n \" } catch {\",\n \" // the native hosts name the method on everything a call throws\",\n ' finished[id] = Reply(ok: false, value: nil, error: \"\\\\(request.module).\\\\(request.method): \\\\(error.localizedDescription)\", pending: nil)',\n \" }\",\n \" }\",\n \" } catch {\",\n \" finished[id] = Reply(ok: false, value: nil, error: error.localizedDescription, pending: nil)\",\n \" }\",\n \" return pollWasm(id)\",\n \" }\",\n \" static func pollWasm(_ id: Int32) -> UnsafeMutablePointer<UInt8>? {\",\n \" let reply = finished.removeValue(forKey: id) ?? Reply(ok: true, value: nil, error: nil, pending: id)\",\n ' let bytes = (try? JSONEncoder().encode(reply)) ?? Data(\"{\\\\\"ok\\\\\":false,\\\\\"error\\\\\":\\\\\"encoding failed\\\\\"}\".utf8)',\n \" let count = UInt32(bytes.count)\",\n \" output = [UInt8(count & 0xff), UInt8((count >> 8) & 0xff), UInt8((count >> 16) & 0xff), UInt8(count >> 24)] + Array(bytes)\",\n \" return output.withUnsafeMutableBufferPointer { $0.baseAddress }\",\n \" }\",\n \" private struct Event: Encodable { let channel: String; let args: String }\",\n \" private static var pendingEvents: [Event] = []\",\n \" // under wasi there is no javascript runtime, so posted events queue\",\n \" // here and the peach host drains them with peach_poll_events, using\",\n \" // the same length-prefixed framing as pollWasm.\",\n \" static func pollEvents() -> UnsafeMutablePointer<UInt8>? {\",\n \" let events = pendingEvents\",\n \" pendingEvents = []\",\n ' let bytes = (try? JSONEncoder().encode(events)) ?? Data(\"[]\".utf8)',\n \" let count = UInt32(bytes.count)\",\n \" output = [UInt8(count & 0xff), UInt8((count >> 8) & 0xff), UInt8((count >> 16) & 0xff), UInt8(count >> 24)] + Array(bytes)\",\n \" return output.withUnsafeMutableBufferPointer { $0.baseAddress }\",\n \" }\",\n \"#endif\",\n ...modules.map((module) => ` private static let ${module.name}Instance = ${module.name}()`),\n // dates cross as ISO strings in both directions; the fractional reader\n // runs first because javascript always writes milliseconds.\n \" private nonisolated static let isoDate = Date.ISO8601FormatStyle()\",\n \" private nonisolated static let isoDateFractional = Date.ISO8601FormatStyle(includingFractionalSeconds: true)\",\n \" private nonisolated static func decodeDate(_ decoder: Decoder) throws -> Date {\",\n \" let container = try decoder.singleValueContainer()\",\n \" let text = try container.decode(String.self)\",\n \" if let date = (try? isoDateFractional.parse(text)) ?? (try? isoDate.parse(text)) { return date }\",\n ' throw DecodingError.dataCorruptedError(in: container, debugDescription: \"expected ISO date\")',\n \" }\",\n \" private static func decode<T: Decodable>(_ type: T.Type, from data: Data) throws -> T {\",\n \" let decoder = JSONDecoder()\",\n \" decoder.dateDecodingStrategy = .custom { try decodeDate($0) }\",\n \" decoder.dataDecodingStrategy = .base64\",\n \" return try decoder.decode(T.self, from: data)\",\n \" }\",\n \" private static func decode<T: Decodable>(_ value: Any, as type: T.Type) throws -> T {\",\n \" try decode(T.self, from: try JSONSerialization.data(withJSONObject: value, options: [.fragmentsAllowed]))\",\n \" }\",\n \" private static func encode(_ value: any Encodable) throws -> String {\",\n \" let encoder = JSONEncoder()\",\n \" encoder.dateEncodingStrategy = .iso8601\",\n \" encoder.dataEncodingStrategy = .base64\",\n \" return String(decoding: try encoder.encode(value), as: UTF8.self)\",\n \" }\",\n \" private static func encodeAny(_ value: any Encodable) -> String {\",\n ' (try? encode(value)) ?? \"null\"',\n \" }\",\n \" // subscribe cases and view callbacks both encode callback arguments\",\n \" // as a json array, so this helper stays outside the view-only glue.\",\n \" private static func args(_ values: [any Encodable]) -> String {\",\n ' \"[\" + values.map { encodeAny($0) }.joined(separator: \",\") + \"]\"',\n \" }\",\n \" // native events post over the one event bridge on device; under wasi\",\n \" // they queue for the peach host, which drains them with peach_poll_events.\",\n \" private static func postEvent(_ channel: String, _ args: String) {\",\n \" #if os(WASI)\",\n \" pendingEvents.append(Event(channel: channel, args: args))\",\n \" #else\",\n \" OneNativeSourceEmitter.send(channel, args)\",\n \" #endif\",\n \" }\",\n ...renderCall(),\n ...views.length > 0 ? renderViews() : [],\n \"}\",\n \"\",\n \"#if os(WASI)\",\n '@_expose(wasm, \"peach_call\")',\n '@_cdecl(\"peach_call\")',\n `@MainActor public func peach_call(_ payload: UnsafePointer<UInt8>?, _ length: Int32) -> UnsafeMutablePointer<UInt8>? { ${bodyName}.callWasm(payload, length) }`,\n '@_expose(wasm, \"peach_call_poll\")',\n '@_cdecl(\"peach_call_poll\")',\n `@MainActor public func peach_call_poll(_ id: Int32) -> UnsafeMutablePointer<UInt8>? { ${bodyName}.pollWasm(id) }`,\n \" // the host drains queued native events with this export, polling it\",\n \" // after running timers like it polls pending calls.\",\n '@_expose(wasm, \"peach_poll_events\")',\n '@_cdecl(\"peach_poll_events\")',\n `@MainActor public func peach_poll_events() -> UnsafeMutablePointer<UInt8>? { ${bodyName}.pollEvents() }`,\n // peach registers the typed views once per instance: the package's own\n // @main, if any, stays its default view, as on device\n ...views.length > 0 ? [\n '@_expose(wasm, \"peach_register_views\")',\n '@_cdecl(\"peach_register_views\")',\n \"@MainActor public func peach_register_views() {\",\n \" PeachTypedViews.register { name, contractHash, propsJson, emit in\",\n ` guard contractHash == ${bodyName}.hash else { return AnyView(Text(\"swift view ${packageId}.\\\\(name) changed; rebuild the app\").foregroundStyle(.red)) }`,\n ` do { return try ${bodyName}.view(name, propsJson, emit) } catch { return AnyView(Text(\"\\\\(name): \\\\(error.localizedDescription)\").foregroundStyle(.red)) }`,\n \" }\",\n \"}\"\n ] : [],\n ...!hasMain ? [\n `@main struct OneNativeSourceMain_${packageId}: App {`,\n \" var body: some Scene { WindowGroup { EmptyView() } }\",\n \"}\"\n ] : [],\n \"#endif\",\n \"\",\n // the dispatch class answers nitro on device; wasi uses the peach_call\n // exports above, and its sdk mirrors objectivec, so gate it off.\n \"#if canImport(ObjectiveC) && !os(WASI)\",\n `@objc(${className}) @MainActor public final class ${className}: NSObject, OneNativeSourceDispatch {`,\n \" public required override init() {}\",\n ` public var contractHash: String { ${bodyName}.hash }`,\n ` public func call(_ module: String, _ method: String, _ argsJson: String) async throws -> String { try await ${bodyName}.call(module, method, argsJson) }`,\n \"}\",\n ...views.length > 0 ? [\n `@objc(${viewsName}) @MainActor public final class ${viewsName}: NSObject, OneNativeSourceViewDispatch {`,\n \" public required override init() {}\",\n ` public var contractHash: String { ${bodyName}.hash }`,\n ` public func view(_ name: String, _ propsJson: String, _ emit: @escaping (String, String) -> Void) throws -> AnyView { try ${bodyName}.view(name, propsJson, emit) }`,\n ` public func updateView(_ held: AnyObject?, _ name: String, _ document: String) throws -> AnyObject? { try ${bodyName}.update(held, name, document) }`,\n ` public func buildView(_ held: AnyObject, _ name: String, _ emit: @escaping (String, String) -> Void) throws -> AnyView { try ${bodyName}.build(held, name, emit) }`,\n \"}\"\n ] : [],\n \"#endif\",\n \"\"\n ].join(\"\\n\");\n return { hash, source };\n}\nfunction unboxedZero(type) {\n if (type === \"Int\") return \"0\";\n if (type === \"Long\") return \"0L\";\n if (type === \"Double\") return \"0.0\";\n if (type === \"Float\") return \"0f\";\n if (type === \"Boolean\") return \"false\";\n return null;\n}\nfunction renderKotlinSourceGlue(sourceId, contract) {\n if (contract.language !== \"kotlin\") throw new Error(\"kotlin glue received a swift contract\");\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(sourceId)) throw new Error(`invalid kotlin source id ${sourceId}`);\n const hash = createHash(\"sha256\").update(JSON.stringify({ sourceId, contract: contract.hash })).digest(\"hex\");\n const readerClass = `OneJsonReader_${sourceId}`;\n const tokenClass = `OneJsonToken_${sourceId}`;\n const structsByName = new Map(contract.structs.map((entry) => [entry.name, entry]));\n const enumsByName = new Map(contract.enums.map((entry) => [entry.name, entry]));\n const qualified = (name) => contract.packageName ? `${contract.packageName}.${name}` : name;\n const isDateType = (type) => type === \"Date\" || type === \"java.util.Date\";\n const qualifiedType = (type) => {\n if (type.endsWith(\"?\")) return `${qualifiedType(type.slice(0, -1))}?`;\n if (type.startsWith(\"List<\") && type.endsWith(\">\")) return `List<${qualifiedType(type.slice(5, -1))}>`;\n if (type.startsWith(\"Map<String,\") && type.endsWith(\">\")) return `Map<String, ${qualifiedType(type.slice(11, -1))}>`;\n if (structsByName.has(type) || enumsByName.has(type)) return qualified(type);\n if (isDateType(type)) return \"java.util.Date\";\n if ([\"String\", \"Boolean\", \"Double\", \"Float\", \"Int\", \"Long\", \"ByteArray\"].includes(type)) return type;\n throw new Error(`unsupported kotlin glue type ${type}`);\n };\n const mentions = (type, match) => {\n let rest = type;\n while (rest.endsWith(\"?\")) rest = rest.slice(0, -1);\n if (rest.startsWith(\"List<\") && rest.endsWith(\">\")) return mentions(rest.slice(5, -1), match);\n if (rest.startsWith(\"Map<String,\") && rest.endsWith(\">\")) return mentions(rest.slice(11, -1), match);\n return match(rest);\n };\n const nativeTypes = [\n ...contract.modules.flatMap(\n (module) => module.methods.flatMap((method) => [\n ...method.parameters.map((parameter) => parameter.nativeType),\n method.nativeResult,\n ...method.subscription?.payload.map((arg) => arg.nativeType) ?? []\n ])\n ),\n ...contract.structs.flatMap((struct) => struct.fields.map((field) => field.nativeType)),\n ...contract.views.flatMap(\n (view) => view.props.flatMap((prop) => [\n prop.nativeType,\n ...prop.callback?.map((arg) => arg.nativeType) ?? []\n ])\n )\n ];\n const needsEvents = contract.modules.some(\n (module) => module.methods.some((method) => method.subscription)\n );\n const needsDate = nativeTypes.some((type) => mentions(type, isDateType));\n const needsData = nativeTypes.some((type) => mentions(type, (leaf) => leaf === \"ByteArray\"));\n const value = (type, reader, path) => {\n if (type.endsWith(\"?\")) {\n return `(if (${reader}.peek() == ${tokenClass}.NULL) { ${reader}.nextNull(); null } else ${value(type.slice(0, -1), reader, path)})`;\n }\n if (type === \"String\") return `readString(${reader}, ${path})`;\n if (type === \"Boolean\") return `readBoolean(${reader}, ${path})`;\n if (type === \"Double\") return `readDouble(${reader}, ${path})`;\n if (type === \"Float\") return `readDouble(${reader}, ${path}).toFloat()`;\n if (type === \"Int\") return `readInt(${reader}, ${path})`;\n if (type === \"Long\") return `readLong(${reader}, ${path})`;\n if (isDateType(type)) return `readDate(${reader}, ${path})`;\n if (type === \"ByteArray\") return `readData(${reader}, ${path})`;\n if (structsByName.has(type)) return `read${type}(${reader}, ${path})`;\n if (enumsByName.has(type)) return `read${type}(${reader}, ${path})`;\n if (type.startsWith(\"List<\") && type.endsWith(\">\")) {\n return `readList(${reader}, ${path}) { itemReader, itemPath -> ${value(type.slice(5, -1), \"itemReader\", \"itemPath\")} }`;\n }\n if (type.startsWith(\"Map<String,\") && type.endsWith(\">\")) {\n return `readMap(${reader}, ${path}) { itemReader, itemPath -> ${value(type.slice(11, -1), \"itemReader\", \"itemPath\")} }`;\n }\n throw new Error(`unsupported kotlin glue type ${type}`);\n };\n const encode = (type, accessor) => {\n if (type.endsWith(\"?\")) {\n return `(${accessor}?.let { ${encode(type.slice(0, -1), \"it\")} } ?: JSONObject.NULL)`;\n }\n if (isDateType(type)) return `dateToString(${accessor})`;\n if (type === \"ByteArray\") return `android.util.Base64.encodeToString(${accessor}, android.util.Base64.NO_WRAP)`;\n if (structsByName.has(type)) return `encode${type}(${accessor})`;\n if (enumsByName.has(type)) return `${accessor}.name`;\n if (type.startsWith(\"List<\") && type.endsWith(\">\")) {\n return `JSONArray().apply { for (item in ${accessor}) put(${encode(type.slice(5, -1), \"item\")}) }`;\n }\n if (type.startsWith(\"Map<String,\") && type.endsWith(\">\")) {\n return `JSONObject().apply { for ((key, entry) in ${accessor}) put(key, ${encode(type.slice(11, -1), \"entry\")}) }`;\n }\n return `JSONObject.wrap(${accessor})`;\n };\n const cap = (name) => name.slice(0, 1).toUpperCase() + name.slice(1);\n const structHelpers = contract.structs.flatMap((struct) => [\n `private fun read${struct.name}(reader: ${readerClass}, path: String): ${qualified(struct.name)} {`,\n ` if (reader.peek() != ${tokenClass}.BEGIN_OBJECT) error(\"$path: expected object\")`,\n \" reader.beginObject()\",\n // required fields start null and fail at the constructor when the key\n // never arrived; a required nullable needs its own flag so an explicit\n // null does not read as missing. defaulted fields start at the default.\n ...struct.fields.flatMap((field) => {\n const declared = qualifiedType(field.nativeType);\n if (field.optional) return [` var ${field.name}: ${declared} = ${field.fallback}`];\n const zero = unboxedZero(field.nativeType);\n if (zero !== null) return [` var ${field.name} = ${zero}`, ` var has${cap(field.name)} = false`];\n const boxed = declared.endsWith(\"?\") ? declared : `${declared}?`;\n return [\n ` var ${field.name}: ${boxed} = null`,\n ...field.nativeType.endsWith(\"?\") ? [` var has${cap(field.name)} = false`] : []\n ];\n }),\n \" while (reader.hasNext()) {\",\n ` when (reader.selectName(${struct.fields.map((field) => JSON.stringify(field.name)).join(\", \")})) {`,\n ...struct.fields.map((field, index) => {\n const fieldPath = `\"$path.${field.name}\"`;\n const read = `${field.name} = ${value(field.nativeType, \"reader\", fieldPath)}`;\n const needsFlag = !field.optional && (field.nativeType.endsWith(\"?\") || unboxedZero(field.nativeType) !== null);\n return needsFlag ? ` ${index} -> { ${read}; has${cap(field.name)} = true }` : ` ${index} -> ${read}`;\n }),\n \" else -> reader.skipValue()\",\n \" }\",\n \" }\",\n \" reader.endObject()\",\n ...struct.fields.flatMap(\n (field) => !field.optional && unboxedZero(field.nativeType) !== null ? [` if (!has${cap(field.name)}) error(\"$path.${field.name}: required\")`] : []\n ),\n ` return ${qualified(struct.name)}(`,\n ...struct.fields.map((field) => {\n if (field.optional) return ` ${field.name} = ${field.name},`;\n if (field.nativeType.endsWith(\"?\")) return ` ${field.name} = (if (has${cap(field.name)}) ${field.name} else error(\"$path.${field.name}: required\")),`;\n if (unboxedZero(field.nativeType) !== null) return ` ${field.name} = ${field.name},`;\n return ` ${field.name} = (${field.name} ?: error(\"$path.${field.name}: required\")),`;\n }),\n \" )\",\n \"}\",\n `private fun encode${struct.name}(value: ${qualified(struct.name)}): JSONObject {`,\n \" return JSONObject()\",\n ...struct.fields.map(\n (field) => ` .put(${JSON.stringify(field.name)}, ${encode(field.nativeType, `value.${field.name}`)})`\n ),\n \"}\"\n ]);\n const enumHelpers = contract.enums.flatMap((entry) => [\n `private fun read${entry.name}(reader: ${readerClass}, path: String): ${qualified(entry.name)} {`,\n \" val text = readString(reader, path)\",\n ` return try { ${qualified(entry.name)}.valueOf(text) } catch (e: IllegalArgumentException) { error(\"$path: expected one of ${entry.cases.map((item) => item.name).join(\", \")}\") }`,\n \"}\"\n ]);\n const source = [\n \"import androidx.annotation.Keep\",\n ...contract.views.length === 0 ? [] : [\"import androidx.compose.runtime.Composable\", \"import dev.onejs.one.OneNativeSourceKeyedState\", \"import dev.onejs.one.OneNativeSourceViewDispatch\"],\n \"import dev.onejs.one.OneNativeSourceDispatch\",\n ...needsEvents ? [\"import dev.onejs.one.source.OneNativeSourceEvents\"] : [],\n \"import org.json.JSONArray\",\n \"import org.json.JSONObject\",\n \"\",\n `private enum class ${tokenClass} { BEGIN_OBJECT, END_OBJECT, BEGIN_ARRAY, END_ARRAY, STRING, NUMBER, BOOLEAN, NULL }`,\n \"\",\n \"// a forward-only json reader over the props text: values decode straight\",\n \"// into typed props in one pass with no intermediate JSONObject. pure\",\n \"// kotlin with no java or android imports, so the same glue compiles for\",\n \"// kotlin/wasm.\",\n `private class ${readerClass}(private val text: String) {`,\n \" private var pos = 0\",\n \"\",\n \" private fun skipSpace() {\",\n \" while (pos < text.length) {\",\n \" when (text[pos]) {\",\n \" ' ', '\\\\t', '\\\\n', '\\\\r' -> pos++\",\n \" else -> return\",\n \" }\",\n \" }\",\n \" }\",\n \"\",\n ' private fun fail(message: String): Nothing = throw IllegalStateException(\"$message near offset $pos\")',\n \"\",\n ` fun peek(): ${tokenClass} {`,\n \" skipSpace()\",\n ' if (pos >= text.length) fail(\"unexpected end of json\")',\n \" return when (text[pos]) {\",\n ` '{' -> ${tokenClass}.BEGIN_OBJECT`,\n ` '}' -> ${tokenClass}.END_OBJECT`,\n ` '[' -> ${tokenClass}.BEGIN_ARRAY`,\n ` ']' -> ${tokenClass}.END_ARRAY`,\n ` '\"' -> ${tokenClass}.STRING`,\n ` 't', 'f' -> ${tokenClass}.BOOLEAN`,\n ` 'n' -> ${tokenClass}.NULL`,\n ` '-', in '0'..'9' -> ${tokenClass}.NUMBER`,\n ' else -> fail(\"unexpected character\")',\n \" }\",\n \" }\",\n \"\",\n \" private fun expect(char: Char) {\",\n \" skipSpace()\",\n ` if (pos >= text.length || text[pos] != char) fail(\"expected '$char'\")`,\n \" pos++\",\n \" }\",\n \"\",\n \" fun beginObject() = expect('{')\",\n \" fun endObject() = expect('}')\",\n \" fun beginArray() = expect('[')\",\n \" fun endArray() = expect(']')\",\n \"\",\n \" // inside an object or array: true when another value follows, consuming\",\n \" // a comma first; false at the closing bracket.\",\n \" fun hasNext(): Boolean {\",\n \" skipSpace()\",\n ' if (pos >= text.length) fail(\"unexpected end of json\")',\n \" if (text[pos] == ',') {\",\n \" pos++\",\n \" return true\",\n \" }\",\n \" return text[pos] != '}' && text[pos] != ']'\",\n \" }\",\n \"\",\n \" fun nextName(): String {\",\n \" skipSpace()\",\n ` if (pos >= text.length || text[pos] != '\"') fail(\"expected a name\")`,\n \" val name = readString()\",\n \" skipSpace()\",\n ` if (pos >= text.length || text[pos] != ':') fail(\"expected ':'\")`,\n \" pos++\",\n \" return name\",\n \" }\",\n \"\",\n \" fun nextString(): String {\",\n \" skipSpace()\",\n ` if (pos >= text.length || text[pos] != '\"') fail(\"expected a string\")`,\n \" return readString()\",\n \" }\",\n \"\",\n \" // matches an object name against the expected keys without allocating\",\n \" // it: the index of the match, or -1 for an unknown key. the name and\",\n \" // colon are consumed either way, so the caller skips the value on -1.\",\n \" fun selectName(vararg options: String): Int {\",\n \" skipSpace()\",\n ` if (pos >= text.length || text[pos] != '\"') fail(\"expected a name\")`,\n \" var end = pos + 1\",\n ` while (end < text.length && text[end] != '\"' && text[end] != '\\\\\\\\') end++`,\n \" if (end < text.length && text[end] == '\\\\\\\\') {\",\n \" val decoded = readString()\",\n \" skipSpace()\",\n ` if (pos >= text.length || text[pos] != ':') fail(\"expected ':'\")`,\n \" pos++\",\n \" return options.indexOf(decoded)\",\n \" }\",\n ' if (end >= text.length) fail(\"unterminated string\")',\n \" val length = end - pos - 1\",\n \" var index = -1\",\n \" for (i in options.indices) {\",\n \" if (options[i].length == length && text.regionMatches(pos + 1, options[i], 0, length)) { index = i; break }\",\n \" }\",\n \" pos = end + 1\",\n \" skipSpace()\",\n ` if (pos >= text.length || text[pos] != ':') fail(\"expected ':'\")`,\n \" pos++\",\n \" return index\",\n \" }\",\n \"\",\n \" private fun readString(): String {\",\n \" pos++ // the opening quote\",\n \" var end = pos\",\n ` while (end < text.length && text[end] != '\"' && text[end] != '\\\\\\\\') end++`,\n ` if (end < text.length && text[end] == '\"') {`,\n \" val out = text.substring(pos, end)\",\n \" pos = end + 1\",\n \" return out\",\n \" }\",\n \" val out = StringBuilder(text.substring(pos, end))\",\n \" pos = end\",\n \" while (true) {\",\n ' if (pos >= text.length) fail(\"unterminated string\")',\n \" val char = text[pos++]\",\n ` if (char == '\"') return out.toString()`,\n \" if (char != '\\\\\\\\') {\",\n \" out.append(char)\",\n \" continue\",\n \" }\",\n ' if (pos >= text.length) fail(\"unterminated escape\")',\n \" when (text[pos++]) {\",\n ` '\"', '\\\\\\\\', '/' -> out.append(text[pos - 1])`,\n \" 'b' -> out.append('\\\\b')\",\n \" 'f' -> out.append('\\\\u000C')\",\n \" 'n' -> out.append('\\\\n')\",\n \" 'r' -> out.append('\\\\r')\",\n \" 't' -> out.append('\\\\t')\",\n \" 'u' -> {\",\n ' if (pos + 4 > text.length) fail(\"bad unicode escape\")',\n \" var code = 0\",\n \" for (i in 0 until 4) {\",\n \" val digit = text[pos + i].lowercaseChar()\",\n ` val value = if (digit in '0'..'9') digit - '0' else if (digit in 'a'..'f') digit - 'a' + 10 else fail(\"bad unicode escape\")`,\n \" code = code * 16 + value\",\n \" }\",\n \" pos += 4\",\n \" out.append(code.toChar())\",\n \" }\",\n ' else -> fail(\"bad escape\")',\n \" }\",\n \" }\",\n \" }\",\n \"\",\n \" fun nextDouble(): Double {\",\n \" skipSpace()\",\n \" val start = pos\",\n \" while (pos < text.length && (text[pos] in '0'..'9' || text[pos] == '.' || text[pos] == 'e' || text[pos] == 'E' || text[pos] == '+' || text[pos] == '-')) pos++\",\n ' if (pos == start) fail(\"expected a number\")',\n ' return text.substring(start, pos).toDoubleOrNull() ?: fail(\"bad number\")',\n \" }\",\n \"\",\n \" // plain-digit fast paths: the value when the token at pos is an integer\",\n \" // in range, null when it needs the double slow path. nothing is\",\n \" // consumed on null, so the caller falls back to nextDouble.\",\n \" fun nextIntOrNull(): Int? {\",\n \" var i = pos\",\n \" val negative = i < text.length && text[i] == '-'\",\n \" if (negative) i++\",\n \" var value = 0L\",\n \" val digits = i\",\n \" while (i < text.length && text[i] in '0'..'9') {\",\n \" value = value * 10 + (text[i] - '0')\",\n \" if (value > 2147483648L) return null\",\n \" i++\",\n \" }\",\n \" if (i == digits) return null\",\n \" if (i < text.length && (text[i] == '.' || text[i] == 'e' || text[i] == 'E')) return null\",\n \" if (!negative && value > 2147483647L) return null\",\n \" pos = i\",\n \" return if (negative) -value.toInt() else value.toInt()\",\n \" }\",\n \"\",\n \" fun nextLongOrNull(): Long? {\",\n \" var i = pos\",\n \" val negative = i < text.length && text[i] == '-'\",\n \" if (negative) i++\",\n \" var value = 0L\",\n \" val digits = i\",\n \" while (i < text.length && text[i] in '0'..'9') {\",\n \" val digit = (text[i] - '0').toLong()\",\n \" if (value > (9007199254740991L - digit) / 10) return null\",\n \" value = value * 10 + digit\",\n \" i++\",\n \" }\",\n \" if (i == digits) return null\",\n \" if (i < text.length && (text[i] == '.' || text[i] == 'e' || text[i] == 'E')) return null\",\n \" pos = i\",\n \" return if (negative) -value else value\",\n \" }\",\n \"\",\n \" fun nextBoolean(): Boolean {\",\n \" skipSpace()\",\n ' if (text.startsWith(\"true\", pos)) {',\n \" pos += 4\",\n \" return true\",\n \" }\",\n ' if (text.startsWith(\"false\", pos)) {',\n \" pos += 5\",\n \" return false\",\n \" }\",\n ' fail(\"expected a boolean\")',\n \" }\",\n \"\",\n \" fun nextNull() {\",\n \" skipSpace()\",\n ' if (!text.startsWith(\"null\", pos)) fail(\"expected null\")',\n \" pos += 4\",\n \" }\",\n \"\",\n \" fun skipValue() {\",\n \" when (peek()) {\",\n ` ${tokenClass}.BEGIN_OBJECT -> {`,\n \" beginObject()\",\n \" while (hasNext()) {\",\n \" nextName()\",\n \" skipValue()\",\n \" }\",\n \" endObject()\",\n \" }\",\n ` ${tokenClass}.BEGIN_ARRAY -> {`,\n \" beginArray()\",\n \" while (hasNext()) {\",\n \" skipValue()\",\n \" }\",\n \" endArray()\",\n \" }\",\n ` ${tokenClass}.STRING -> nextString()`,\n ` ${tokenClass}.NUMBER -> nextDouble()`,\n ` ${tokenClass}.BOOLEAN -> nextBoolean()`,\n ` ${tokenClass}.NULL -> nextNull()`,\n ' else -> fail(\"unexpected value\")',\n \" }\",\n \" }\",\n \"\",\n \" fun endDocument() {\",\n \" skipSpace()\",\n ' if (pos != text.length) fail(\"trailing characters\")',\n \" }\",\n \"}\",\n \"\",\n `private fun readString(reader: ${readerClass}, path: String): String {`,\n ` if (reader.peek() != ${tokenClass}.STRING) error(\"$path: expected string\")`,\n \" return reader.nextString()\",\n \"}\",\n `private fun readBoolean(reader: ${readerClass}, path: String): Boolean {`,\n ` if (reader.peek() != ${tokenClass}.BOOLEAN) error(\"$path: expected boolean\")`,\n \" return reader.nextBoolean()\",\n \"}\",\n `private fun readDouble(reader: ${readerClass}, path: String): Double {`,\n ` if (reader.peek() != ${tokenClass}.NUMBER) error(\"$path: expected number\")`,\n \" val result = reader.nextDouble()\",\n ' if (!result.isFinite()) error(\"$path: expected finite number\")',\n \" return result\",\n \"}\",\n `private fun readInt(reader: ${readerClass}, path: String): Int {`,\n ` if (reader.peek() != ${tokenClass}.NUMBER) error(\"$path: expected number\")`,\n \" reader.nextIntOrNull()?.let { return it }\",\n \" val result = readDouble(reader, path)\",\n ' if (result % 1.0 != 0.0 || result < Int.MIN_VALUE || result > Int.MAX_VALUE) error(\"$path: expected Int\")',\n \" return result.toInt()\",\n \"}\",\n `private fun readLong(reader: ${readerClass}, path: String): Long {`,\n ` if (reader.peek() != ${tokenClass}.NUMBER) error(\"$path: expected number\")`,\n \" reader.nextLongOrNull()?.let { return it }\",\n \" val result = readDouble(reader, path)\",\n ' if (result % 1.0 != 0.0 || result < -9007199254740991.0 || result > 9007199254740991.0) error(\"$path: expected safe Long\")',\n \" return result.toLong()\",\n \"}\",\n \"// the host sends true for each callback the element passed; any other\",\n \"// value reads as absent.\",\n `private fun readOptBoolean(reader: ${readerClass}): Boolean {`,\n ` if (reader.peek() != ${tokenClass}.BOOLEAN) {`,\n \" reader.skipValue()\",\n \" return false\",\n \" }\",\n \" return reader.nextBoolean()\",\n \"}\",\n `private fun <T> readList(reader: ${readerClass}, path: String, read: (${readerClass}, String) -> T): List<T> {`,\n ` if (reader.peek() != ${tokenClass}.BEGIN_ARRAY) error(\"$path: expected array\")`,\n \" reader.beginArray()\",\n \" val result = mutableListOf<T>()\",\n \" var index = 0\",\n \" while (reader.hasNext()) {\",\n ' result.add(read(reader, \"$path[$index]\"))',\n \" index++\",\n \" }\",\n \" reader.endArray()\",\n \" return result\",\n \"}\",\n `private fun <T> readMap(reader: ${readerClass}, path: String, read: (${readerClass}, String) -> T): Map<String, T> {`,\n ` if (reader.peek() != ${tokenClass}.BEGIN_OBJECT) error(\"$path: expected object\")`,\n \" reader.beginObject()\",\n \" val result = mutableMapOf<String, T>()\",\n \" while (reader.hasNext()) {\",\n \" val key = reader.nextName()\",\n ' result[key] = read(reader, \"$path.$key\")',\n \" }\",\n \" reader.endObject()\",\n \" return result\",\n \"}\",\n // the encoder writes ISO with milliseconds and reads with or without\n // them, so swift, kotlin and javascript dates all parse everywhere.\n ...needsDate ? [\n `private fun readDate(reader: ${readerClass}, path: String): java.util.Date {`,\n \" val text = readString(reader, path)\",\n ` for (pattern in arrayOf(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\", \"yyyy-MM-dd'T'HH:mm:ss'Z'\")) {`,\n \" try {\",\n ' return java.text.SimpleDateFormat(pattern, java.util.Locale.US).apply { timeZone = java.util.TimeZone.getTimeZone(\"UTC\"); isLenient = false }.parse(text) ?: error(\"$path: expected date\")',\n \" } catch (parseError: java.text.ParseException) { }\",\n \" }\",\n ' error(\"$path: expected ISO date\")',\n \"}\",\n \"private fun dateToString(value: java.util.Date): String =\",\n ` java.text.SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\", java.util.Locale.US).apply { timeZone = java.util.TimeZone.getTimeZone(\"UTC\") }.format(value)`\n ] : [],\n ...needsData ? [\n `private fun readData(reader: ${readerClass}, path: String): ByteArray {`,\n \" try {\",\n \" return android.util.Base64.decode(readString(reader, path), android.util.Base64.NO_WRAP)\",\n \" } catch (decodeError: IllegalArgumentException) {\",\n ' error(\"$path: expected base64 data\")',\n \" }\",\n \"}\"\n ] : [],\n ...structHelpers,\n ...enumHelpers,\n \"\",\n `@Keep class OneNativeSource_${sourceId}: OneNativeSourceDispatch {`,\n ` override val contractHash = ${JSON.stringify(hash)}`,\n \" override suspend fun call(module: String, method: String, argsJson: String): String {\",\n ` val reader = ${readerClass}(argsJson)`,\n ` if (reader.peek() != ${tokenClass}.BEGIN_ARRAY) error(\"args must be a JSON array\")`,\n \" reader.beginArray()\",\n \" return when (module) {\",\n ...contract.modules.flatMap((module) => [\n ` ${JSON.stringify(`${sourceId}.${module.name}`)} -> when (method) {`,\n ...module.methods.flatMap((method) => {\n const subscription = method.subscription;\n if (subscription) {\n const channel = `OneNativeSource.${sourceId}.${module.name}.${method.name}`;\n const closure = subscription.payload.length === 0 ? `{ OneNativeSourceEvents.send(${JSON.stringify(channel)}, JSONArray().toString()) }` : `{ ${subscription.payload.map((_, index) => `a${index}`).join(\", \")} -> OneNativeSourceEvents.send(${JSON.stringify(channel)}, JSONArray()${subscription.payload.map((arg, index) => `.put(${encode(arg.nativeType, `a${index}`)})`).join(\"\")}.toString()) }`;\n return [\n ` ${JSON.stringify(method.name)} -> {`,\n ` require(!reader.hasNext()) { \"${sourceId}.${module.name}.${method.name} subscribes; it takes no arguments\" }`,\n \" reader.endArray()\",\n \" reader.endDocument()\",\n ` ${qualified(module.name)}.${method.name}(${closure})`,\n ' \"null\"',\n \" }\"\n ];\n }\n const lines = [\n ` ${JSON.stringify(method.name)} -> {`\n ];\n const arityMessage = `${sourceId}.${module.name}.${method.name} expects ${method.parameters.length} arguments`;\n method.parameters.forEach((parameter, index) => {\n lines.push(` val arg${index} = ${value(parameter.nativeType, \"reader\", JSON.stringify(`args[${index}]`))}`);\n if (index < method.parameters.length - 1) {\n lines.push(` require(reader.hasNext()) { ${JSON.stringify(arityMessage)} }`);\n }\n });\n lines.push(` require(!reader.hasNext()) { ${JSON.stringify(arityMessage)} }`);\n lines.push(\" reader.endArray()\", \" reader.endDocument()\");\n const call = `${qualified(module.name)}.${method.name}(${method.parameters.map((_, index) => `arg${index}`).join(\", \")})`;\n if (method.result === \"void\") {\n lines.push(` ${call}`, ' \"null\"');\n } else {\n lines.push(` val result = ${call}`);\n if (method.nativeResult === \"Long\") {\n lines.push(' require(result >= -9007199254740991L && result <= 9007199254740991L) { \"result exceeds the JavaScript safe integer range\" }');\n }\n lines.push(` JSONArray().put(${encode(method.nativeResult, \"result\")}).toString().drop(1).dropLast(1)`);\n }\n return [...lines, \" }\"];\n }),\n ' else -> error(\"native method $module.$method is not linked; rebuild the app\")',\n \" }\"\n ]),\n ' else -> error(\"native module $module is not linked; rebuild the app\")',\n \" }\",\n \" }\",\n \"}\",\n \"\",\n ...contract.views.length === 0 ? [] : viewGlue(sourceId, contract, hash, value, encode, qualifiedType)\n ].join(\"\\n\");\n return { hash, source };\n}\nfunction viewGlue(sourceId, contract, hash, value, encode, qualifiedType) {\n const qualifier = contract.packageName ? `${contract.packageName}.` : \"\";\n const cap = (name) => name.slice(0, 1).toUpperCase() + name.slice(1);\n const readerClass = `OneJsonReader_${sourceId}`;\n const tokenClass = `OneJsonToken_${sourceId}`;\n const SEQ_KEY = '\"\\\\$seq\"';\n const BASE_KEY = '\"\\\\$base\"';\n const LISTS_KEY = '\"\\\\$lists\"';\n const listElement = (type) => {\n const inner = type.endsWith(\"?\") ? type.slice(0, -1) : type;\n return inner.startsWith(\"List<\") && inner.endsWith(\">\") ? inner.slice(5, -1) : null;\n };\n const holders = contract.views.flatMap((view) => [\n `private class Held${view.name}_${sourceId} {`,\n ...view.props.flatMap((prop) => {\n if (prop.callback) {\n return prop.nativeType.endsWith(\"?\") ? [` var has${cap(prop.name)}: Boolean = false`] : [];\n }\n const declared = qualifiedType(prop.nativeType);\n if (prop.optional || prop.nativeType.endsWith(\"?\")) return [` var ${prop.name}: ${declared} = null`];\n const zero = unboxedZero(prop.nativeType);\n if (zero !== null) return [` var ${prop.name}: ${declared} = ${zero}`];\n if (prop.nativeType === \"String\") return [` var ${prop.name}: String = \"\"`];\n return [` var ${prop.name}: ${declared}? = null`];\n }),\n \"}\"\n ]);\n const mergers = contract.views.flatMap(\n (view) => view.props.flatMap((prop) => {\n if (prop.callback) return [];\n const elem = listElement(prop.nativeType);\n if (elem === null) return [];\n const element = qualifiedType(elem);\n return [\n `private fun mergeLists${view.name}${cap(prop.name)}(reader: ${readerClass}, old: List<${element}>?, prop: String): List<${element}>? {`,\n ` if (reader.peek() != ${tokenClass}.BEGIN_OBJECT) error(\"lists.$prop: expected object\")`,\n \" reader.beginObject()\",\n \" var length = -1\",\n ` var set: List<Pair<Int, ${element}>>? = null`,\n \" while (reader.hasNext()) {\",\n ' when (reader.selectName(\"length\", \"set\")) {',\n ` 0 -> length = readInt(reader, \"lists.$prop.length\")`,\n ` 1 -> set = readList(reader, \"lists.$prop.set\") { itemReader, itemPath -> itemReader.beginArray(); val si = readInt(itemReader, itemPath); if (!itemReader.hasNext()) error(\"$itemPath: expected element\"); val sv = ${value(elem, \"itemReader\", \"itemPath\")}; itemReader.endArray(); si to sv }`,\n \" else -> reader.skipValue()\",\n \" }\",\n \" }\",\n \" reader.endObject()\",\n ' if (length < 0) error(\"lists.$prop: needs length\")',\n // no held list, or a patch that does not fit it, is what a change\n // on a mismatched base looks like: return null so apply refuses and\n // the host resyncs. the caller errors when the base matches and the\n // merge still failed, which is a real protocol bug.\n \" val current = old ?: return null\",\n \" val entries = set ?: emptyList()\",\n ' for (j in 1 until entries.size) require(entries[j].first > entries[j - 1].first) { \"lists.$prop: set out of order\" }',\n ` val fresh = ArrayList<${element}>(length)`,\n \" var s = 0\",\n \" for (i in 0 until length) {\",\n \" if (s < entries.size && entries[s].first == i) { fresh.add(entries[s].second); s++ }\",\n \" else if (i < current.size) fresh.add(current[i])\",\n \" else return null\",\n \" }\",\n \" return fresh\",\n \"}\"\n ];\n })\n );\n return [\n ...holders,\n ...mergers,\n \"\",\n `@Keep class OneNativeSourceViews_${sourceId}: OneNativeSourceViewDispatch {`,\n ` override val contractHash = ${JSON.stringify(hash)}`,\n \" override fun apply(view: String, propsJson: String, state: OneNativeSourceKeyedState): Boolean {\",\n ` val reader = ${readerClass}(propsJson)`,\n ` if (reader.peek() != ${tokenClass}.BEGIN_OBJECT) error(\"props must be a JSON object\")`,\n \" reader.beginObject()\",\n \" when (view) {\",\n ...contract.views.flatMap((view) => {\n const holder = `Held${view.name}_${sourceId}`;\n const lists = view.props.filter((prop) => !prop.callback && listElement(prop.nativeType) !== null);\n const options = [SEQ_KEY, BASE_KEY, LISTS_KEY, ...view.props.map((prop) => JSON.stringify(prop.name))].join(\", \");\n return [\n ` ${JSON.stringify(view.name)} -> {`,\n ` var held = state.views[${JSON.stringify(view.name)}] as? ${holder}`,\n // the envelope plus the props decoded from this document; presence\n // flags gate the change commit so absent props keep held values.\n \" var seq = -1\",\n \" var hasSeq = false\",\n \" var base = -1\",\n \" var hasBase = false\",\n \" var sawLists = false\",\n ...view.props.flatMap((prop) => {\n if (prop.callback) {\n return prop.nativeType.endsWith(\"?\") ? [` var ${prop.name}Doc: Boolean? = null`] : [];\n }\n const declared = qualifiedType(prop.nativeType);\n if (prop.optional || prop.nativeType.endsWith(\"?\")) {\n return [` var ${prop.name}: ${declared} = null`, ` var has${cap(prop.name)} = false`];\n }\n const zero = unboxedZero(prop.nativeType);\n if (zero !== null) return [` var ${prop.name} = ${zero}`, ` var has${cap(prop.name)} = false`];\n return [` var ${prop.name}: ${declared}? = null`];\n }),\n ...lists.map((prop) => ` var ${prop.name}MergeFailed = false`),\n \" while (reader.hasNext()) {\",\n ` when (reader.selectName(${options})) {`,\n ' 0 -> { seq = readInt(reader, \"seq\"); hasSeq = true }',\n ' 1 -> { base = readInt(reader, \"base\"); hasBase = true }',\n \" 2 -> {\",\n \" sawLists = true\",\n ` if (reader.peek() != ${tokenClass}.BEGIN_OBJECT) error(\"lists: expected object\")`,\n \" reader.beginObject()\",\n \" while (reader.hasNext()) {\",\n ` when (reader.selectName(${lists.map((prop) => JSON.stringify(prop.name)).join(\", \")})) {`,\n ...lists.map(\n (prop, listsIndex) => ` ${listsIndex} -> { val merged${cap(prop.name)} = mergeLists${view.name}${cap(prop.name)}(reader, held?.${prop.name}, ${JSON.stringify(prop.name)}); if (merged${cap(prop.name)} == null) ${prop.name}MergeFailed = true else ${prop.name} = merged${cap(prop.name)} }`\n ),\n \" else -> reader.skipValue()\",\n \" }\",\n \" }\",\n \" reader.endObject()\",\n \" }\",\n ...view.props.map((prop, index) => {\n const arm = index + 3;\n if (prop.callback) {\n return prop.nativeType.endsWith(\"?\") ? ` ${arm} -> ${prop.name}Doc = readOptBoolean(reader)` : ` ${arm} -> reader.skipValue()`;\n }\n const path = JSON.stringify(`props.${prop.name}`);\n const read = `${prop.name} = ${value(prop.nativeType, \"reader\", path)}`;\n const needsFlag = prop.optional || prop.nativeType.endsWith(\"?\") || unboxedZero(prop.nativeType) !== null;\n return needsFlag ? ` ${arm} -> { ${read}; has${cap(prop.name)} = true }` : ` ${arm} -> ${read}`;\n }),\n \" else -> reader.skipValue()\",\n \" }\",\n \" }\",\n \" reader.endObject()\",\n \" reader.endDocument()\",\n ' if (hasBase && !hasSeq) error(\"seq: required\")',\n ' if (sawLists && !hasBase) error(\"lists: needs a change document\")',\n // full documents fill every field; a change already applied is a\n // no-op, one based on the held seq merges and advances it, and\n // anything else refuses so the host asks for a resync.\n \" if (!hasBase) {\",\n ...view.props.flatMap((prop) => {\n if (prop.callback || prop.optional) return [];\n if (prop.nativeType.endsWith(\"?\") || unboxedZero(prop.nativeType) !== null) {\n return [` if (!has${cap(prop.name)}) error(\"props.${prop.name}: required\")`];\n }\n return [];\n }),\n ` val h = held ?: ${holder}().also { state.views[${JSON.stringify(view.name)}] = it }`,\n ...view.props.flatMap((prop) => {\n if (prop.callback) {\n return prop.nativeType.endsWith(\"?\") ? [` h.has${cap(prop.name)} = ${prop.name}Doc == true`] : [];\n }\n if (prop.optional || prop.nativeType.endsWith(\"?\") || unboxedZero(prop.nativeType) !== null) {\n return [` h.${prop.name} = ${prop.name}`];\n }\n return [` h.${prop.name} = (${prop.name} ?: error(\"props.${prop.name}: required\"))`];\n }),\n \" if (hasSeq) state.seq = seq\",\n \" state.revision++\",\n \" return true\",\n \" }\",\n \" if (seq == state.seq) return true\",\n \" val h = held\",\n \" if (base == state.seq && h != null) {\",\n ...view.props.flatMap((prop) => {\n if (prop.callback) {\n return prop.nativeType.endsWith(\"?\") ? [` if (${prop.name}Doc != null) h.has${cap(prop.name)} = ${prop.name}Doc`] : [];\n }\n const mergeFailed = listElement(prop.nativeType) !== null ? [` if (${prop.name}MergeFailed) error(\"lists.${prop.name}: cannot merge\")`] : [];\n if (prop.optional || prop.nativeType.endsWith(\"?\") || unboxedZero(prop.nativeType) !== null) {\n return [...mergeFailed, ` if (has${cap(prop.name)}) h.${prop.name} = ${prop.name}`];\n }\n return [...mergeFailed, ` if (${prop.name} != null) h.${prop.name} = ${prop.name}`];\n }),\n \" state.seq = seq\",\n \" state.revision++\",\n \" return true\",\n \" }\",\n \" return false\",\n \" }\"\n ];\n }),\n ' else -> error(\"composable $view is not linked; rebuild the app\")',\n \" }\",\n \" }\",\n \" @Composable\",\n \" override fun Content(view: String, state: OneNativeSourceKeyedState, emit: (String, String) -> Unit) {\",\n \" when (view) {\",\n ...contract.views.flatMap((view) => {\n const holder = `Held${view.name}_${sourceId}`;\n return [\n ` ${JSON.stringify(view.name)} -> {`,\n \" // the revision read resubscribes this scope on every apply\",\n \" val revision = state.revision\",\n ` val held = state.views[${JSON.stringify(view.name)}] as? ${holder}`,\n \" held?.let { h ->\",\n ` ${qualifier}${view.name}(`,\n ...view.props.map((prop) => {\n if (prop.callback) {\n const args = prop.callback.map((_, index) => `a${index}`);\n const types = prop.callback.map((arg) => arg.nativeType);\n const body = `emit(${JSON.stringify(prop.name)}, JSONArray()${args.map((arg, index) => `.put(${encode(types[index], arg)})`).join(\"\")}.toString())`;\n const lambda = `{ ${args.length > 0 ? `${args.join(\", \")} -> ` : \"\"}${body} }`;\n return ` ${prop.name} = ${prop.nativeType.endsWith(\"?\") ? `if (h.has${cap(prop.name)}) (${lambda}) else null` : lambda},`;\n }\n if (prop.optional || prop.nativeType.endsWith(\"?\") || unboxedZero(prop.nativeType) !== null || prop.nativeType === \"String\") {\n return ` ${prop.name} = h.${prop.name},`;\n }\n return ` ${prop.name} = h.${prop.name}!!,`;\n }),\n \" )\",\n \" }\",\n \" }\"\n ];\n }),\n ' else -> error(\"composable $view is not linked; rebuild the app\")',\n \" }\",\n \" }\",\n \"}\",\n \"\"\n ];\n}\nexport {\n kotlinSourceId,\n nativeSourceContract,\n renderKotlinSourceGlue,\n renderSwiftSourceGlue,\n swiftPodManifest,\n writeNativeSourceDeclaration,\n writeNativeSourceDeclarations,\n writeSwiftPackageArtifacts\n};\n//# sourceMappingURL=nativeSourceContract.js.map\n"],"mappings":"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AAM,MAAM,KAAK,UAAU,KAAK,IAAI;KACpC,IAAI,KAAK,UAAU;MACjB,MAAM,SAAS,KAAK,SAAS,KAAK,KAAK,MAAM,IAAI,EAAE,IAAI,IAAI,YAAY,CAAC,CAAC,KAAK,IAAI;MAClF,MAAM,SAAS,MAAM,OAAO,oBAAoB,IAAI,UAAU,KAAK,SAAS,KAAK,GAAG,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;MAC9G,OAAO,WAAW,KAAK,KAAK,IAAI,KAAK,WAAW,WAAW,KAAK,KAAK,eAAe,OAAO,UAAU,SAAS;KAChH;KACA,OAAO,WAAW,KAAK,KAAK,YAAY,KAAK,KAAK,IAAI;IACxD,CAAC;IACD;GACF,CAAC;GACD;GACA;GACA;GAEA;GACA;GACA;GACA;EACF;CACF;CACA,MAAM,SAAS;EACb;EACA;EACA;EACA,0BAA0B,SAAS;EACnC,8BAA8B,KAAK,UAAU,IAAI;EACjD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAAG,QAAQ,KAAK,WAAW,wBAAwB,OAAO,KAAK,aAAa,OAAO,KAAK,GAAG;EAG3F;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GAAG,WAAW;EACd,GAAG,MAAM,SAAS,IAAI,YAAY,IAAI,CAAC;EACvC;EACA;EACA;EACA;EACA;EACA,0HAA0H,SAAS;EACnI;EACA;EACA,yFAAyF,SAAS;EAClG;EACA;EACA;EACA;EACA,gFAAgF,SAAS;EAGzF,GAAG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,UAAU,MAAM,IAAI,EAAE;EAC9F;EACA,kBAAkB,UAAU,MAAM,IAAI,EAAE,uFAAuF,MAAM,MAAM,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE;EAC/K;CACF,CAAC;CACD,MAAM,SAAS;EACb;EACA,GAAG,SAAS,MAAM,WAAW,IAAI,CAAC,IAAI;GAAC;GAA8C;GAAkD;EAAkD;EACzL;EACA,GAAG,cAAc,CAAC,mDAAmD,IAAI,CAAC;EAC1E;EACA;EACA;EACA,sBAAsB,WAAW;EACjC;EACA;EACA;EACA;EACA;EACA,iBAAiB,YAAY;EAC7B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,iBAAiB,WAAW;EAC5B;EACA;EACA;EACA,gBAAgB,WAAW;EAC3B,gBAAgB,WAAW;EAC3B,gBAAgB,WAAW;EAC3B,gBAAgB,WAAW;EAC3B,gBAAgB,WAAW;EAC3B,qBAAqB,WAAW;EAChC,gBAAgB,WAAW;EAC3B,6BAA6B,WAAW;EACxC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,WAAW;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,WAAW;EACpB;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,WAAW;EACpB,SAAS,WAAW;EACpB,SAAS,WAAW;EACpB,SAAS,WAAW;EACpB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kCAAkC,YAAY;EAC9C,0BAA0B,WAAW;EACrC;EACA;EACA,mCAAmC,YAAY;EAC/C,0BAA0B,WAAW;EACrC;EACA;EACA,kCAAkC,YAAY;EAC9C,0BAA0B,WAAW;EACrC;EACA;EACA;EACA;EACA,+BAA+B,YAAY;EAC3C,0BAA0B,WAAW;EACrC;EACA;EACA;EACA;EACA;EACA,gCAAgC,YAAY;EAC5C,0BAA0B,WAAW;EACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,sCAAsC,YAAY;EAClD,0BAA0B,WAAW;EACrC;EACA;EACA;EACA;EACA;EACA,oCAAoC,YAAY,yBAAyB,YAAY;EACrF,0BAA0B,WAAW;EACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,mCAAmC,YAAY,yBAAyB,YAAY;EACpF,0BAA0B,WAAW;EACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA,GAAG,YAAY;GACb,gCAAgC,YAAY;GAC5C;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,IAAI,CAAC;EACL,GAAG,YAAY;GACb,gCAAgC,YAAY;GAC5C;GACA;GACA;GACA;GACA;GACA;EACF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"}
|