@swiftuijs/twill 0.2.0 → 0.3.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.
Files changed (34) hide show
  1. package/README.md +22 -7
  2. package/dist/cli.js +3 -3
  3. package/dist/{compilation-cache-CuCGz02_.js → compilation-cache-7SugqJ4n.js} +2 -2
  4. package/dist/{compilation-cache-CuCGz02_.js.map → compilation-cache-7SugqJ4n.js.map} +1 -1
  5. package/dist/{compiler-DY1N07np.js → compiler-CbNSBUI2.js} +54 -15
  6. package/dist/compiler-CbNSBUI2.js.map +1 -0
  7. package/dist/config.js +1 -1
  8. package/dist/{configuration-CTJjSu_h.js → configuration-BVMf6Q_j.js} +17 -7
  9. package/dist/configuration-BVMf6Q_j.js.map +1 -0
  10. package/dist/defer.d.ts +1 -1
  11. package/dist/doctor.js +1 -1
  12. package/dist/doctor.js.map +1 -1
  13. package/dist/esbuild.js +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/{loader-compiler-DIw9aw5n.js → loader-compiler-D1teTrXw.js} +3 -3
  16. package/dist/{loader-compiler-DIw9aw5n.js.map → loader-compiler-D1teTrXw.js.map} +1 -1
  17. package/dist/loader.js +2 -2
  18. package/dist/{plugin-Bks2hxCJ.js → plugin-BHfiQ2L-.js} +3 -3
  19. package/dist/{plugin-Bks2hxCJ.js.map → plugin-BHfiQ2L-.js.map} +1 -1
  20. package/dist/project.js +14 -10
  21. package/dist/project.js.map +1 -1
  22. package/dist/recovery.d.ts +2 -2
  23. package/dist/rollup.js +1 -1
  24. package/dist/rspack.js +1 -1
  25. package/dist/syntax.js +1 -1
  26. package/dist/{transpile-DG81yfVs.js → transpile-D8P8Lsbx.js} +2 -2
  27. package/dist/{transpile-DG81yfVs.js.map → transpile-D8P8Lsbx.js.map} +1 -1
  28. package/dist/typescript-plugin.cjs +65 -22
  29. package/dist/typescript-plugin.cjs.map +1 -1
  30. package/dist/vite.js +1 -1
  31. package/dist/webpack.js +1 -1
  32. package/package.json +2 -2
  33. package/dist/compiler-DY1N07np.js.map +0 -1
  34. package/dist/configuration-CTJjSu_h.js.map +0 -1
package/dist/vite.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as twillPlugin } from "./plugin-Bks2hxCJ.js";
1
+ import { t as twillPlugin } from "./plugin-BHfiQ2L-.js";
2
2
  //#region src/vite.ts
3
3
  var vite_default = twillPlugin.vite;
4
4
  //#endregion
package/dist/webpack.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as twillPlugin } from "./plugin-Bks2hxCJ.js";
1
+ import { t as twillPlugin } from "./plugin-BHfiQ2L-.js";
2
2
  //#region src/webpack.ts
3
3
  var webpack_default = twillPlugin.webpack;
4
4
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@swiftuijs/twill",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Twill extends TypeScript with Swift-inspired syntax: trailing closures, guards, defer and checked switch expressions. Compiles to ordinary JavaScript.",
5
5
  "main": "./dist/typescript-plugin.cjs",
6
6
  "repository": {
@@ -163,7 +163,7 @@
163
163
  "vue": "^3.5.43",
164
164
  "webpack": "^5.111.1",
165
165
  "@playwright/test": "^1.63.0",
166
- "@swiftuijs/twill-runtime": "0.2.0"
166
+ "@swiftuijs/twill-runtime": "0.3.0"
167
167
  },
168
168
  "scripts": {
169
169
  "build": "node ../../scripts/generate-runtime-helper.mjs && vite build && vite build --config vite.plugin.config.ts && node scripts/prepare-core.mjs",
@@ -1 +0,0 @@
1
- {"version":3,"file":"compiler-DY1N07np.js","names":["tt"],"sources":["../src/parser.js","../src/defer-helper.ts","../src/defer.ts","../src/branches.ts","../src/enums.ts","../src/compiler.ts"],"sourcesContent":["// Acorn's extension hooks intentionally use its internal AST shape. Keep that\n// boundary here; the public compiler API is typed in compiler.ts.\nimport { Parser, tokTypes as tt } from 'acorn';\nimport { tsPlugin } from 'acorn-typescript';\nimport jsx from 'acorn-jsx';\n\nconst options = { ecmaVersion: 'latest', sourceType: 'module', locations: true };\nconst bases = {\n js: Parser,\n jsx: Parser.extend(jsx()),\n ts: Parser.extend(tsPlugin({ allowSatisfies: true })),\n tsx: Parser.extend(tsPlugin({ allowSatisfies: true })),\n};\n\n// `guard` remains an ordinary JS identifier unless its expression is followed\n// by a top-level `else`. Token lookahead ignores strings/comments and balanced\n// groups; it never rewrites source or attempts to parse the expression itself.\nfunction guardAt(input, offset, implicitMember = false) {\n const lexer = Parser.tokenizer(input.slice(offset), { ecmaVersion: 'latest' });\n const stack = [];\n let first = true;\n try {\n for (;;) {\n const token = lexer.getToken();\n const label = token.type.label;\n if (\n first &&\n ['=', '.', '?.', ':', '++/--', '*', '/', '%', '==/!=/===/!==', 'in', 'instanceof'].includes(\n label,\n ) &&\n !(implicitMember && label === '.')\n )\n return false;\n if (\n !stack.length &&\n ['if', 'for', 'while', 'switch', 'try', 'return', 'throw', 'var', 'export'].includes(label)\n )\n return false;\n if (!first && !stack.length && label === 'const') return false;\n first = false;\n if (!stack.length && label === 'else') return true;\n if (!stack.length && ['eof', ';', '}'].includes(label)) return false;\n if (['(', '[', '{', '${'].includes(label)) stack.push(label);\n else if ([')', ']', '}'].includes(label)) {\n if (!stack.length) return false;\n stack.pop();\n }\n }\n } catch {\n return false;\n }\n}\n\n// Deliberately conservative: do not infer exits from calls, loops or a nested\n// function's return. JS/TS still checks the legality of break/continue/return.\nfunction exits(node) {\n switch (node.type) {\n case 'ReturnStatement':\n case 'ThrowStatement':\n case 'BreakStatement':\n case 'ContinueStatement':\n return true;\n case 'BlockStatement':\n return node.body.some(exits);\n case 'IfStatement':\n case 'TwillIfBinding':\n return !!node.alternate && exits(node.consequent) && exits(node.alternate);\n default:\n return false;\n }\n}\n\nfunction awaits(node) {\n if (!node || typeof node !== 'object') return false;\n if (node.type === 'AwaitExpression' || node.await === true || node.kind === 'await using')\n return true;\n if (node.type === 'DeferStatement') return node.awaited;\n if (['FunctionDeclaration', 'FunctionExpression', 'ArrowFunctionExpression'].includes(node.type))\n return false;\n if (['ClassDeclaration', 'ClassExpression'].includes(node.type)) {\n return (\n awaits(node.superClass) ||\n node.body.body.some((member) => member.computed && awaits(member.key))\n );\n }\n return Object.entries(node).some(([key, value]) => {\n if (key === 'loc' || key === 'trailing') return false;\n return Array.isArray(value) ? value.some(awaits) : !!value?.type && awaits(value);\n });\n}\n\nfunction deferAt(input, offset) {\n try {\n const next = Parser.tokenizer(input.slice(offset), { ecmaVersion: 'latest' }).getToken();\n return (\n next.type === tt.braceL &&\n !/[\\r\\n\\u2028\\u2029]/.test(input.slice(offset, offset + next.start))\n );\n } catch {\n // The isolated tokenizer may read JS division as a regexp. Let the real\n // expression parser handle ordinary uses of the identifier instead.\n return false;\n }\n}\n\n// Inspect only the possible parameter header, using real tokens so comments,\n// strings, default arguments and destructuring cannot confuse the delimiter.\nfunction headerAt(input, offset) {\n const lexer = Parser.tokenizer(input.slice(offset), options);\n const stack = [];\n let first = true;\n const tokens = [];\n try {\n for (;;) {\n const token = lexer.getToken();\n const label = token.type.label;\n if (first && label !== 'name' && label !== '(') return null;\n first = false;\n if (!stack.length && label === 'in') {\n const async = tokens.length > 1 && tokens[0].value === 'async';\n const firstParam = tokens[async ? 1 : 0];\n return {\n start: offset,\n end: offset + token.end,\n inStart: offset + token.start,\n text: input.slice(offset + tokens[0].start, offset + tokens.at(-1).end),\n textStart: offset + tokens[0].start,\n async,\n asyncEnd: async ? offset + tokens[0].end : null,\n parenthesized: firstParam.type.label === '(',\n };\n }\n if (label === 'eof' || (!stack.length && [';', '{', '}', '=>'].includes(label))) return null;\n if (['(', '[', '{'].includes(label)) stack.push(label);\n if ([')', ']', '}'].includes(label)) {\n if (!stack.length) return null;\n stack.pop();\n }\n tokens.push(token);\n }\n } catch {\n return null;\n }\n}\n\nfunction moveNodes(node, delta, locate) {\n if (!node || typeof node !== 'object') return;\n if (typeof node.start === 'number') {\n node.start += delta;\n node.end += delta;\n node.loc = { start: locate(node.start), end: locate(node.end) };\n }\n for (const [key, value] of Object.entries(node)) {\n if (key === 'loc') continue;\n if (Array.isArray(value)) value.forEach((item) => moveNodes(item, delta, locate));\n else if (value && typeof value === 'object') moveNodes(value, delta, locate);\n }\n}\n\nconst parsers = new Map();\nfunction associatedEnumAt(input, offset) {\n try {\n const tokens = Parser.tokenizer(input.slice(offset), { ecmaVersion: 'latest' });\n tokens.getToken(); // Declaration name; the TS parser validates it.\n const next = tokens.getToken();\n return (\n next.value === '<' ||\n (next.type === tt.braceL &&\n tokens.getToken().type === tt._case &&\n tokens.getToken().type === tt.name)\n );\n } catch {\n // Let the original parser diagnose malformed native syntax at its real offset.\n return false;\n }\n}\n\nfunction parserFor(language) {\n if (parsers.has(language)) return parsers.get(language);\n const Base = bases[language];\n class TwillParser extends Base {\n skipHeader = null;\n closures = [];\n lineStarts = null;\n classSuperDepth = null;\n subscriptDepth = 0;\n conditionDepth = null;\n derivedClassElement = false;\n implicitClosure = null;\n\n tsParseEnumDeclaration(node, modifiers = {}) {\n if (!associatedEnumAt(this.input, this.end))\n return super.tsParseEnumDeclaration(node, modifiers);\n if (modifiers.const || modifiers.declare || this.isAmbientContext)\n this.raise(node.start, 'Associated-value enums cannot be const or ambient declarations.');\n this.expectContextual('enum');\n node.id = this.parseIdent();\n this.checkLValSimple(node.id, 2);\n node.typeParameters = this.tsTryParseTypeParameters(() => {\n if (this.type === tt._in || (this.isContextual('out') && this.lookahead().type === tt.name))\n this.raise(\n this.start,\n 'Associated-value enum type parameters cannot have const/in/out modifiers.',\n );\n });\n const constant = node.typeParameters?.params.find((parameter) => parameter.const);\n if (constant)\n this.raise(\n constant.start,\n 'Associated-value enum type parameters cannot have const/in/out modifiers.',\n );\n node.braceStart = this.start;\n this.expect(tt.braceL);\n node.cases = [];\n const names = new Set();\n while (this.type !== tt.braceR) {\n const branch = this.startNode();\n this.expect(tt._case);\n branch.id = this.parseIdent();\n if (names.has(branch.id.name)) this.raise(branch.id.start, 'Duplicate enum case.');\n names.add(branch.id.name);\n branch.params = [];\n branch.hasParens = this.eat(tt.parenL);\n if (branch.hasParens) {\n const fields = new Set();\n while (this.type !== tt.parenR) {\n const field = this.parseIdent();\n this.checkLValSimple(field);\n if (field.name === 'kind')\n this.raise(\n field.start,\n 'Enum payload fields cannot use the discriminator name kind.',\n );\n if (fields.has(field.name)) this.raise(field.start, 'Duplicate enum payload field.');\n fields.add(field.name);\n if (this.type !== tt.colon)\n this.raise(\n this.start,\n 'Enum payload fields require a name and type; optional/default/rest fields are unsupported.',\n );\n field.typeAnnotation = this.tsParseTypeAnnotation();\n branch.params.push(field);\n if (!this.eat(tt.comma)) break;\n }\n this.expect(tt.parenR);\n }\n branch.valueEnd = this.lastTokEnd;\n this.semicolon();\n node.cases.push(this.finishNode(branch, 'TwillEnumCase'));\n }\n if (!node.cases.length)\n this.raise(node.start, 'An associated-value enum needs at least one case.');\n this.next();\n return this.finishNode(node, 'TwillEnumDeclaration');\n }\n\n locate(offset) {\n if (!this.lineStarts) {\n this.lineStarts = [0];\n const breaks = /\\r\\n?|\\n|\\u2028|\\u2029/g;\n let match;\n while ((match = breaks.exec(this.input))) this.lineStarts.push(breaks.lastIndex);\n }\n let low = 0;\n let high = this.lineStarts.length;\n while (low + 1 < high) {\n const mid = (low + high) >>> 1;\n if (this.lineStarts[mid] <= offset) low = mid;\n else high = mid;\n }\n return { line: low + 1, column: offset - this.lineStarts[low] };\n }\n\n parseStatement(context, ...args) {\n if (this.isContextual('defer') && deferAt(this.input, this.end)) {\n // A newline leaves an ordinary identifier expression and separate JS\n // block. Calls, member access, assignments and labels are unchanged.\n const node = this.startNode();\n const async = this.canAwait;\n this.next();\n const enclosing = this.implicitClosure;\n const implicit =\n enclosing && this.currentVarScope() === this.scopeStack[enclosing.scopeIndex]\n ? enclosing\n : null;\n const previousScope = implicit?.scopeIndex;\n if (implicit) implicit.scopeIndex = this.scopeStack.length;\n let cleanup;\n try {\n // A defer body captures its enclosing callback's receiver, like a\n // named parameter. Ordinary nested functions remain separate scopes.\n cleanup = this.parseArrowExpression(this.startNode(), [], async, false);\n } finally {\n if (implicit) implicit.scopeIndex = previousScope;\n }\n node.awaited = awaits(cleanup.body);\n cleanup.async = node.awaited;\n node.cleanup = cleanup;\n return this.finishNode(node, 'DeferStatement');\n }\n if (!this.isContextual('guard') || !guardAt(this.input, this.end, !!this.implicitClosure)) {\n const statement = super.parseStatement(context, ...args);\n if (context && statement.type === 'TwillEnumDeclaration')\n this.raise(\n statement.start,\n 'An associated-value enum requires a block; add braces around this body.',\n );\n return statement;\n }\n const node = this.startNode();\n node.singleStatement = !!context;\n this.next();\n node.binding = null;\n if (this.type === tt._const) {\n if (context)\n this.raise(node.start, 'A guard binding requires a block; add braces around this body.');\n const declaration = this.startNode();\n this.next();\n this.parseVar(declaration, false, 'const');\n node.binding = this.finishNode(declaration, 'VariableDeclaration');\n if (node.binding.declarations.length !== 1)\n this.raise(node.start, 'guard const requires one binding declaration.');\n } else node.test = this.parseExpression();\n node.elseStart = this.start;\n this.expect(tt._else);\n if (this.type !== tt.braceL) this.unexpected();\n node.failure = this.parseBlock();\n if (!exits(node.failure))\n this.raise(\n node.failure.start,\n 'Every guard else path must exit with return, throw, break or continue.',\n );\n return this.finishNode(node, 'GuardStatement');\n }\n\n parseIfStatement(node) {\n // Native parenthesized if statements keep the host parser's contract.\n // Look only for the new binding introducer; lexical errors belong to\n // the main parser so their offsets remain absolute.\n if (/^\\s*\\(/.test(this.input.slice(this.end))) return super.parseIfStatement(node);\n let binding;\n try {\n binding = Parser.tokenizer(this.input.slice(this.end), options).getToken().type;\n } catch {}\n if (binding !== tt._const) return super.parseIfStatement(node);\n this.next();\n const declaration = this.startNode();\n this.next();\n this.enterScope(0);\n const previous = this.conditionDepth;\n this.conditionDepth = this.subscriptDepth;\n try {\n this.parseVar(declaration, false, 'const');\n } finally {\n this.conditionDepth = previous;\n }\n node.binding = this.finishNode(declaration, 'VariableDeclaration');\n if (node.binding.declarations.length !== 1)\n this.raise(node.start, 'if const requires one binding declaration.');\n if (this.type !== tt.braceL)\n this.raise(this.start, 'if const requires a braced success branch.');\n // The binding and success body share a scope; else belongs to the outer\n // scope. The initializer's references are checked in the lowered outer\n // scope, before the successful const declaration exists.\n node.consequent = this.parseBlock(false);\n this.exitScope();\n node.alternate = null;\n if (this.eat(tt._else)) {\n if (this.type !== tt.braceL && this.type !== tt._if)\n this.raise(this.start, 'if const else requires a block or another if.');\n node.alternate = this.parseStatement('if');\n }\n return this.finishNode(node, 'TwillIfBinding');\n }\n\n tsParseTypeParameter(...args) {\n const start = this.start;\n const loc = this.startLoc;\n const constant = this.type === tt._const;\n if (constant) this.next();\n const parameter = super.tsParseTypeParameter(...args);\n if (constant) {\n parameter.const = true;\n parameter.start = start;\n parameter.loc.start = loc;\n }\n return parameter;\n }\n\n parseExprSubscripts(...args) {\n this.subscriptDepth++;\n try {\n return super.parseExprSubscripts(...args);\n } finally {\n this.subscriptDepth--;\n }\n }\n\n parseClassSuper(...args) {\n const previous = this.classSuperDepth;\n this.classSuperDepth = this.subscriptDepth;\n try {\n return super.parseClassSuper(...args);\n } finally {\n this.classSuperDepth = previous;\n }\n }\n\n parseClassElement(...args) {\n const previous = this.derivedClassElement;\n this.derivedClassElement = !!args[0];\n try {\n return super.parseClassElement(...args);\n } finally {\n this.derivedClassElement = previous;\n }\n }\n\n raise(position, message, ...args) {\n // acorn-typescript 1.4.13 inverts the subclass check for `override`.\n // Permit this valid syntax; TypeScript still checks override semantics.\n if (\n language.startsWith('ts') &&\n this.derivedClassElement &&\n typeof message === 'string' &&\n message.includes(\"cannot have an 'override' modifier\")\n )\n return;\n return super.raise(position, message, ...args);\n }\n\n readToken(code) {\n // acorn-typescript enables JSX by default. Plain .twill follows TypeScript's\n // non-JSX grammar, including angle-bracket assertions.\n if (language === 'ts' && code === 60 && !this.inType && this.exprAllowed)\n return this.readToken_lt_gt(code);\n return super.readToken(code);\n }\n\n parseExprAtom(...args) {\n if (this.type === tt.dot) {\n const closure = this.implicitClosure;\n if (!closure || this.currentVarScope() !== this.scopeStack[closure.scopeIndex])\n this.raise(\n this.start,\n 'Implicit member access requires a trailing closure without a parameter header.',\n );\n // A zero-width receiver lets Acorn parse the original dot/property chain.\n // The compiler supplies one hygienic parameter; property tokens stay mapped.\n const node = this.startNode();\n node.name = '__twillImplicit';\n closure.members.push(node);\n return this.finishNodeAt(node, 'Identifier', this.start, this.startLoc);\n }\n if (this.type === tt._switch) return this.parseSwitchExpression();\n if (language === 'ts' && this.type === tt.relational && this.value === '<') {\n const node = this.startNode();\n this.tsInType(() => {\n this.next();\n node.typeAnnotation = this.tsParseType();\n if (!this.tsMatchRightRelational()) this.unexpected();\n this.next();\n });\n node.expression = this.parseMaybeUnary(null, false, false, args[1]);\n // Let the TS plugin backtrack and recognize a generic arrow function.\n if (node.expression.type === 'ArrowFunctionExpression') this.unexpected(node.start);\n return this.finishNode(node, 'TSTypeAssertion');\n }\n return super.parseExprAtom(...args);\n }\n\n parseSwitchExpression(call) {\n const node = call ? this.startNodeAt(call.start, call.loc.start) : this.startNode();\n node.keyword = call ? 'match' : 'switch';\n if (call) {\n if (call.arguments.length !== 1 || call.arguments[0].type === 'SpreadElement')\n this.raise(\n call.start,\n 'A match expression requires one subject; parenthesize comma expressions.',\n );\n const opening = Parser.tokenizer(this.input.slice(call.callee.end), options).getToken();\n node.parenStart = call.callee.end + opening.start;\n node.discriminant = call.arguments[0];\n node.parenEnd = call.end - 1;\n } else {\n this.next();\n node.parenStart = this.start;\n node.discriminant = this.parseParenExpression();\n node.parenEnd = this.lastTokStart;\n }\n this.expect(tt.braceL);\n node.cases = [];\n let mode,\n discriminator,\n sawDefault = false;\n while (this.type !== tt.braceR) {\n const branch = this.startNode();\n const isCase = this.type === tt._case;\n if (!isCase && this.type !== tt._default) this.unexpected();\n this.next();\n this.enterScope(0); // Each expression arm has its own lexical bindings.\n if (!isCase) {\n if (sawDefault) this.raise(branch.start, 'Multiple default clauses.');\n sawDefault = true;\n branch.test = null;\n } else if (\n (call && this.type !== tt.braceL) ||\n (!call && this.type.label === 'name' && this.value === 'enum' && !this.containsEsc)\n ) {\n if (mode === 'value')\n this.raise(branch.start, 'Cannot mix enum patterns and value cases.');\n if (discriminator !== undefined && discriminator !== 'kind')\n this.raise(branch.start, 'Enum patterns require the kind discriminator.');\n mode = 'pattern';\n discriminator = 'kind';\n const pattern = this.startNode();\n pattern.explicitKeyword = !call;\n if (!call) this.next();\n let reference = this.parseIdent();\n while (this.eat(tt.dot)) {\n const member = this.startNodeAt(reference.start, reference.loc.start);\n member.object = reference;\n member.property = this.parseIdent(true);\n member.computed = false;\n member.optional = false;\n reference = this.finishNode(member, 'MemberExpression');\n }\n if (reference.type !== 'MemberExpression')\n this.raise(reference.start, 'An enum pattern requires a qualified case reference.');\n pattern.reference = reference;\n pattern.parenStart = this.start;\n this.expect(tt.parenL);\n if (this.type === tt.braceL) {\n pattern.binding = this.parseObj(true);\n this.checkLValPattern(pattern.binding, 2, false);\n }\n pattern.parenEnd = this.start;\n this.expect(tt.parenR);\n branch.enumPattern = this.finishNode(pattern, 'TwillEnumPattern');\n } else if (this.type === tt.braceL) {\n if (mode === 'value')\n this.raise(branch.start, 'Cannot mix object patterns and value cases.');\n mode = 'pattern';\n const errors = {\n shorthandAssign: -1,\n trailingComma: -1,\n parenthesizedAssign: -1,\n parenthesizedBind: -1,\n doubleProto: -1,\n };\n const pattern = this.parseObj(false, errors);\n const tags = pattern.properties.filter(\n (property) =>\n property.type === 'Property' &&\n !property.computed &&\n !property.method &&\n property.kind === 'init' &&\n ((property.value.type === 'Literal' && !property.value.regex) ||\n (property.value.type === 'UnaryExpression' &&\n ['+', '-'].includes(property.value.operator) &&\n property.value.argument.type === 'Literal' &&\n typeof property.value.argument.value === 'number')),\n );\n if (tags.length !== 1)\n this.raise(\n pattern.start,\n 'An object case needs exactly one literal discriminator; other properties bind values.',\n );\n const tag = tags[0];\n const key = String(tag.key.name ?? tag.key.value);\n if (discriminator !== undefined && key !== discriminator)\n this.raise(tag.start, 'Object cases must use the same discriminator property.');\n discriminator = key;\n pattern.properties = pattern.properties.filter((property) => property !== tag);\n this.toAssignable(pattern, true, errors);\n this.checkLValPattern(pattern, 2, false);\n pattern.properties.push(tag);\n pattern.properties.sort((a, b) => a.start - b.start);\n branch.pattern = pattern;\n branch.tag = tag;\n } else {\n if (mode === 'pattern')\n this.raise(branch.start, 'Cannot mix object patterns and value cases.');\n mode = 'value';\n branch.test = this.parseExpression();\n }\n branch.colonStart = this.start;\n this.expect(tt.colon);\n if (this.type === tt._throw) {\n const thrown = this.parseThrowStatement(this.startNode());\n branch.value = thrown.argument;\n branch.throw = true;\n branch.valueEnd = thrown.end;\n } else {\n branch.value = this.parseMaybeAssign();\n branch.valueEnd = this.lastTokEnd;\n this.semicolon();\n }\n this.exitScope();\n node.cases.push(this.finishNode(branch, 'TwillSwitchCase'));\n }\n this.next();\n if (!node.cases.length)\n this.raise(node.start, `A ${node.keyword} expression requires at least one arm.`);\n node.discriminator = discriminator;\n return this.finishNode(node, 'TwillSwitchExpression');\n }\n\n next(...args) {\n super.next(...args);\n if (this.skipHeader !== null) {\n const end = this.skipHeader;\n this.skipHeader = null;\n while (this.start < end && this.type !== tt.eof) super.next(...args);\n }\n }\n\n parseTrailingClosure(callee, label) {\n const start = this.start;\n const header = headerAt(this.input, this.end);\n let params = [];\n let async = false;\n let parameterText = '()';\n if (header) {\n let text = header.text.trim();\n async = header.async;\n if (async) text = text.replace(/^async\\s+/, '');\n parameterText = text.startsWith('(') ? text : `(${text})`;\n const prefix = async ? 'async ' : '';\n try {\n const arrow = Base.parse(`${prefix}${parameterText} => {}`, {\n ...options,\n sourceType: this.options.sourceType,\n }).body[0].expression;\n params = arrow.params;\n const sourceStart = header.textStart + header.text.indexOf(text);\n const addedParen = text.startsWith('(') ? 0 : 1;\n params.forEach((param) =>\n moveNodes(param, sourceStart - prefix.length - addedParen, (offset) =>\n this.locate(offset),\n ),\n );\n } catch (error) {\n this.raise(start, `Invalid trailing closure parameters: ${error.message}`);\n }\n }\n const node = this.startNode();\n // parseArrowExpression supplies the real function scope, including return,\n // await, lexical this/super, duplicate bindings and strict-mode checks.\n this.skipHeader = header?.end ?? null;\n const previous = this.implicitClosure;\n const implicit = header ? null : { scopeIndex: this.scopeStack.length, members: [] };\n this.implicitClosure = implicit;\n let arrow;\n try {\n arrow = this.parseArrowExpression(node, params, async, false);\n } finally {\n this.implicitClosure = previous;\n }\n this.closures.push({\n node: arrow,\n callee,\n label,\n header,\n parameterText,\n async,\n implicitMembers: implicit?.members ?? [],\n });\n return arrow;\n }\n\n parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n // The TS parser treats a same-line brace after type arguments as an\n // expression operand. In this dialect it can instead begin the callback.\n const classBody =\n this.classSuperDepth !== null && this.subscriptDepth === this.classSuperDepth + 1;\n // Inspect only the arm-leading token after the ordinary call parser has\n // parsed the subject once. Native calls/TSX subjects and trailing closures\n // named match remain intact; case/default cannot start a native callback.\n if (\n !noCalls &&\n !classBody &&\n this.type === tt.braceL &&\n base.type === 'CallExpression' &&\n !base.optional &&\n !base.typeParameters &&\n base.callee.type === 'Identifier' &&\n base.callee.name === 'match' &&\n base.callee.start === base.start &&\n this.input.slice(base.callee.start, base.callee.end) === 'match'\n ) {\n let first;\n try {\n first = Parser.tokenizer(this.input.slice(this.end), options).getToken().type;\n } catch {\n // The main parser reports lexical errors at their original offsets,\n // rather than the lookahead tokenizer's relative slice positions.\n }\n if (first === tt._case || first === tt._default) return this.parseSwitchExpression(base);\n }\n if (!noCalls && !classBody && this.tsMatchLeftRelational?.() && this.start === base.end) {\n const parameters = this.tsTryParseAndCatch(() => {\n const parsed = this.tsParseTypeArgumentsInExpression();\n return parsed &&\n this.type === tt.braceL &&\n !/[\\r\\n\\u2028\\u2029]/.test(this.input.slice(parsed.end, this.start))\n ? parsed\n : undefined;\n });\n if (parameters) {\n const instantiation = this.startNodeAt(startPos, startLoc);\n instantiation.expression = base;\n instantiation.typeParameters = parameters;\n base = this.finishNode(instantiation, 'TSInstantiationExpression');\n }\n }\n const supported = [\n 'CallExpression',\n 'Identifier',\n 'MemberExpression',\n 'TSInstantiationExpression',\n ].includes(base.type);\n // Swift separates statement conditions from ordinary expressions. At\n // condition depth, the brace starts the statement body. Parentheses and\n // arguments enter deeper expression contexts and retain trailing calls.\n const conditionBody =\n this.conditionDepth !== null && this.subscriptDepth === this.conditionDepth + 1;\n if (conditionBody && this.type === tt.braceL) return base;\n // Only the outer heritage expression owns the class body brace. Nested\n // calls, parenthesized expressions and computed lookups allow callbacks.\n if (!noCalls && supported && this.type === tt.braceL && !classBody) {\n if (base.trailing)\n this.raise(\n this.start,\n 'Additional trailing closures require labels (for example completion: { ... }).',\n );\n // Bare names on a new line remain ordinary JavaScript statements.\n if (base.type !== 'CallExpression' && /[\\r\\n]/.test(this.input.slice(base.end, this.start)))\n return base;\n const hadParens = base.type === 'CallExpression' && base.end === this.lastTokEnd;\n const callee = hadParens\n ? base.callee\n : base.type === 'TSInstantiationExpression'\n ? base.expression\n : base;\n const node = this.startNodeAt(startPos, startLoc);\n node.callee = callee;\n node.arguments = hadParens ? [...base.arguments] : [];\n node.optional = base.optional ?? false;\n if ((hadParens || base.type === 'TSInstantiationExpression') && base.typeParameters)\n node.typeParameters = base.typeParameters;\n const callEnd = this.lastTokEnd;\n const args = [this.parseTrailingClosure(callee, null)];\n while (this.type === tt.name) {\n const tail = this.input.slice(this.end);\n // Only recognize a label when a colon and opening brace follow it.\n const lexer = Parser.tokenizer(tail, options);\n const colon = lexer.getToken();\n if (colon.type !== tt.colon || lexer.getToken().type !== tt.braceL) break;\n const label = { name: this.value, start: this.start, end: this.end };\n this.next();\n this.expect(tt.colon);\n args.push(this.parseTrailingClosure(callee, label));\n }\n node.arguments.push(...args);\n node.trailing = {\n callEnd,\n hadParens,\n originalArgs: hadParens ? base.arguments : [],\n closures: args,\n };\n return this.finishNode(node, 'CallExpression');\n }\n return super.parseSubscript(\n base,\n startPos,\n startLoc,\n noCalls,\n maybeAsyncArrow,\n optionalChained,\n forInit,\n );\n }\n }\n parsers.set(language, TwillParser);\n return TwillParser;\n}\n\nexport function parse(source, language = 'ts', sourceType = 'module') {\n const TwillParser = parserFor(language);\n const comments = [];\n const parser = new TwillParser(\n { ...options, sourceType, allowHashBang: true, onComment: comments },\n source,\n );\n const ast = parser.parse();\n const live = new Set();\n const calls = [];\n const guards = [];\n const ifBindings = [];\n const defers = [];\n const switches = [];\n const enums = [];\n const visit = (node) => {\n if (!node || typeof node !== 'object') return;\n if (\n node.type === 'ArrowFunctionExpression' ||\n (node.type === 'Identifier' && node.start === node.end && node.name === '__twillImplicit')\n )\n live.add(node);\n if (node.trailing) calls.push(node);\n if (node.type === 'GuardStatement') guards.push(node);\n if (node.type === 'TwillIfBinding') ifBindings.push(node);\n if (node.type === 'DeferStatement') defers.push(node);\n if (node.type === 'TwillSwitchExpression') switches.push(node);\n if (node.type === 'TwillEnumDeclaration') enums.push(node);\n for (const [key, value] of Object.entries(node)) {\n if (key === 'trailing' || key === 'loc') continue;\n if (Array.isArray(value)) value.forEach(visit);\n else if (value?.type) visit(value);\n }\n };\n visit(ast);\n return {\n ast,\n calls,\n guards,\n ifBindings,\n defers,\n switches,\n enums,\n comments,\n closures: parser.closures\n .filter((closure) => live.has(closure.node))\n .map((closure) => ({\n ...closure,\n // TS backtracking can discard tentative expression parses. Only receivers\n // reachable in the final tree may add a parameter or source insertion.\n implicitMembers: closure.implicitMembers\n .filter((node) => live.has(node))\n .map((node) => node.start),\n })),\n };\n}\n","// Generated by scripts/generate-runtime-helper.mjs from runtime helper ABI v1.\n// Source SHA-256: d1a6b960405fad1da869b081aac018695b28372341cad8a077caa645310f32ef\n// Edit packages/runtime/src/helpers/v1.js, then regenerate.\nexport function syncDeferBody(\n names: Record<'stack' | 'failed' | 'failure' | 'cleanup' | 'error', string>,\n): string {\n return (\n '\\n let ' +\n names.failed +\n ' = false,\\n ' +\n names.failure +\n ';\\n while (' +\n names.stack +\n '?.length) {\\n const ' +\n names.cleanup +\n ' = ' +\n names.stack +\n '.pop();\\n if (' +\n names.cleanup +\n ') {\\n try {\\n ' +\n names.cleanup +\n '();\\n } catch (' +\n names.error +\n ') {\\n ' +\n names.failed +\n ' = true;\\n ' +\n names.failure +\n ' = ' +\n names.error +\n ';\\n }\\n }\\n }\\n if (' +\n names.failed +\n ') throw ' +\n names.failure +\n ';\\n'\n );\n}\n","import MagicString from 'magic-string';\nimport type { Language } from './compiler.js';\nimport { syncDeferBody } from './defer-helper.js';\n\ntype Node = { type: string; start: number; end: number; [key: string]: any };\ntype Comment = { start: number; end: number; value: string; type: string };\ntype Scope = { block: Node; functionBody: boolean; defers: Node[] };\nconst functions = new Set(['FunctionDeclaration', 'FunctionExpression', 'ArrowFunctionExpression']);\n\nfunction children(node: Node, visit: (child: Node) => void) {\n for (const [key, value] of Object.entries(node)) {\n if (key === 'loc' || key === 'trailing') continue;\n if (Array.isArray(value))\n value.forEach((child) => {\n if (child?.type) visit(child);\n });\n else if (value?.type) visit(value);\n }\n}\n\n/** Scope-local cleanup callbacks; dynamic registrations use lazy stacks. */\nexport function lowerDefers(\n source: string,\n ast: Node,\n code: MagicString,\n language: Language,\n usedNames: Set<string>,\n contentStarts: Map<Node, number>,\n comments: Comment[],\n runtime: 'inline' | 'external',\n sourceType: 'module' | 'script',\n fail: (node: Node, message: string) => never,\n) {\n const scopes: Scope[] = [];\n const visit = (node: Node, scope: Scope | undefined, parent?: Node) => {\n if (functions.has(node.type) || ['Program', 'TSModuleBlock', 'SwitchCase'].includes(node.type))\n scope = undefined;\n if (node.type === 'BlockStatement' || node.type === 'StaticBlock') {\n scope = {\n block: node,\n functionBody: !!parent && functions.has(parent.type) && parent.body === node,\n defers: [],\n };\n scopes.push(scope);\n }\n if (node.type === 'DeferStatement') {\n if (!scope)\n fail(\n node,\n 'defer requires an explicit block or function body; wrap a switch case in braces.',\n );\n scope.defers.push(node);\n const check = (item: Node) => {\n if (functions.has(item.type)) return;\n if (item.type === 'ReturnStatement')\n fail(\n item,\n 'A defer cleanup cannot return; use a nested function for local early returns.',\n );\n children(item, check);\n };\n check(node.cleanup.body);\n }\n children(node, (child) => visit(child, scope, node));\n };\n visit(ast, undefined);\n let counter = 0;\n const fresh = (part: string) => {\n let name: string;\n do name = `__twill${part}${counter++}`;\n while (usedNames.has(name));\n usedNames.add(name);\n return name;\n };\n const sortedComments = [...comments].sort((a, b) => b.end - a.end);\n const leadingComment = (statement: Node, minimum: number) => {\n let start = statement.start;\n // Move adjacent JSDoc with hoisted function initializers, retaining checkJs\n // annotations. Comments emitted during TS backtracking may be duplicated.\n for (const comment of sortedComments) {\n if (comment.end > start || comment.start < minimum) continue;\n if (/\\S/.test(source.slice(comment.end, start))) break;\n if (comment.type === 'Block' && comment.value.startsWith('*')) start = comment.start;\n else break;\n }\n return start;\n };\n let sharedHelper: string | undefined;\n for (const scope of scopes) {\n if (!scope.defers.length) continue;\n const { block } = scope;\n const statements = block.body as Node[];\n // A direct statement executes at most once per block entry. Nested or\n // unbraced-loop registrations still require the dynamic stack.\n const single = scope.defers.length === 1 && statements.includes(scope.defers[0]!);\n const stack = fresh(single ? 'Cleanup' : 'Defers');\n const failure = single ? '' : fresh('Failure');\n const failed = single ? '' : fresh('Failed');\n const callback = single ? stack : fresh('Cleanup');\n const error = single ? '' : fresh('Error');\n const anyAsync = scope.defers.some((node) => node.awaited);\n const allAsync = scope.defers.every((node) => node.awaited);\n const mixed = anyAsync && !allAsync;\n const callbackType = mixed ? '{ run: () => unknown; async: boolean }' : '() => unknown';\n const storageType = single\n ? '(() => unknown) | undefined'\n : `Array<${callbackType}> | undefined`;\n const annotation = language.startsWith('ts') ? `: ${storageType}` : '';\n const jsdoc = language.startsWith('js') ? `\\n/** @type {${storageType}} */\\n` : '';\n let start = contentStarts.get(block) ?? block.start + 1;\n // StaticBlock.start includes the `static` token, unlike BlockStatement.\n if (block.type === 'StaticBlock') start = statements[0]!.start;\n let index = 0;\n while (statements[index]?.directive) start = statements[index++]!.end;\n const ordinary = statements.slice(index);\n const declarations = scope.functionBody\n ? ordinary.filter((node) => node.type === 'FunctionDeclaration')\n : [];\n if (scope.functionBody && ordinary.some((node) => node.type === 'TSDeclareFunction'))\n fail(\n ordinary.find((node) => node.type === 'TSDeclareFunction')!,\n 'Function overloads/ambient function declarations in a defer scope are not supported; move them to a separate scope.',\n );\n const names = [...new Set(declarations.map((node) => node.id.name as string))];\n code.prependLeft(\n start,\n `;${jsdoc}let ${stack}${annotation};${names.length ? `var ${names.join(',')};` : ''}try {\\n`,\n );\n // Function-body declarations bind like var, including parameter aliases.\n // Initializers stay in the try's lexical environment so they still capture\n // let/const declared anywhere in the original body. Preserve the name token\n // and parameter/body tokens rather than regenerating function source.\n let anchor = start;\n const initial = new Set<Node>();\n for (const statement of ordinary) {\n if (statement.type !== 'FunctionDeclaration') break;\n initial.add(statement);\n anchor = statement.end;\n }\n for (const declaration of declarations) {\n const commentStart = leadingComment(declaration, start);\n if (!initial.has(declaration)) code.move(commentStart, declaration.end, anchor);\n if (commentStart < declaration.start) code.prependLeft(commentStart, '\\n');\n code.move(declaration.start, declaration.id.start, declaration.id.end);\n code.appendLeft(declaration.id.end, ' = ');\n code.appendLeft(declaration.end, ';');\n }\n for (const node of scope.defers) {\n const arrow = `${node.awaited ? 'async ' : ''}() => `;\n const prefix = single\n ? `${stack} = ${arrow}`\n : `(${stack} ??= []).push(${mixed ? `{ async: ${node.awaited}, run: ` : ''}${arrow}`;\n code.overwrite(node.start, node.cleanup.body.start, prefix);\n code.appendLeft(node.end, single ? ';' : `${mixed ? '}' : ''});`);\n }\n if (single) {\n // Guard the await as well as the call: unreached async cleanup must not\n // add a microtask turn. Native finally preserves all completion kinds.\n const call = allAsync ? `if (${stack}) await ${stack}();` : `${stack}?.();`;\n code.appendLeft(block.end - 1, `\\n} finally { ${call} }\\n`);\n continue;\n }\n if (!anyAsync) {\n let body: string;\n if (runtime === 'external') {\n if (sourceType !== 'module')\n fail(\n scope.defers[0]!,\n 'External runtime helpers require module sourceType; use runtime: inline for scripts.',\n );\n sharedHelper ??= fresh('RunDefers');\n body = `${sharedHelper}(${stack});`;\n } else body = syncDeferBody({ stack, failed, failure, cleanup: callback, error });\n code.appendLeft(block.end - 1, `} finally { ${body} }`);\n continue;\n }\n const call = mixed\n ? `if (${callback}.async) await ${callback}.run(); else ${callback}.run();`\n : `${allAsync ? 'await ' : ''}${callback}();`;\n // Nested-finally semantics: every registered cleanup runs, and the last\n // cleanup failure replaces an earlier cleanup/body failure (even undefined).\n code.appendLeft(\n block.end - 1,\n `} finally { let ${failed} = false, ${failure}; while (${stack}?.length) { const ${callback} = ${stack}.pop(); if (${callback}) { try { ${call} } catch (${error}) { ${failed} = true; ${failure} = ${error}; } } } if (${failed}) throw ${failure}; }`,\n );\n }\n if (sharedHelper) {\n // Keep shebangs, file pragmas and the directive prologue before imports.\n // An adjacent declaration JSDoc/suppression stays with its original node.\n const statement = ast.body.find((node: Node) => !node.directive)!;\n let start = statement.start;\n for (const comment of sortedComments) {\n if (comment.end > start) continue;\n if (/\\S/.test(source.slice(comment.end, start))) break;\n if (\n (source.startsWith('/**', comment.start) ||\n /@ts-(?:ignore|expect-error)\\b/.test(comment.value)) &&\n !/@(?:ts-(?:check|nocheck)|jsxImportSource|jsxRuntime)\\b/.test(comment.value)\n )\n start = comment.start;\n else break;\n }\n code.prependLeft(\n start,\n `\\nimport { runDefers as ${sharedHelper} } from '@swiftuijs/twill-runtime/helpers/v1';\\n`,\n );\n }\n}\n","import MagicString from 'magic-string';\nimport { Parser, tokTypes } from 'acorn';\nimport type { Language } from './compiler.js';\n\ntype Node = { type: string; start: number; end: number; [key: string]: any };\nfunction suspension(node: Node): Node | undefined {\n if (['AwaitExpression', 'YieldExpression'].includes(node.type)) return node;\n if (['FunctionDeclaration', 'FunctionExpression', 'ArrowFunctionExpression'].includes(node.type))\n return;\n for (const [key, value] of Object.entries(node)) {\n if (['loc', 'trailing', 'tag'].includes(key)) continue;\n for (const child of Array.isArray(value) ? value : [value]) {\n if (child?.type) {\n const found = suspension(child);\n if (found) return found;\n }\n }\n }\n}\n\n/** Native switches with per-arm scopes. Direct returns and standalone variable\n * initializers need no extra function; other expressions keep a lexical IIFE. */\nexport function lowerSwitchExpressions(\n source: string,\n ast: Node,\n switches: Node[],\n code: MagicString,\n language: Language,\n usedNames: Set<string>,\n comments: { start: number; end: number }[],\n fail: (node: Node, message: string) => never,\n) {\n const returns = new Set<Node>();\n const initializers = new Map<Node, { declaration: Node; statement: Node; prefixStart: number }>();\n const leadingDoc = (start: number) => {\n let low = 0,\n high = comments.length;\n while (low < high) {\n const middle = (low + high) >>> 1;\n if (comments[middle]!.end <= start) low = middle + 1;\n else high = middle;\n }\n const comment = comments[low - 1];\n return comment && /^\\s*$/.test(source.slice(comment.end, start)) ? comment : undefined;\n };\n const directEval = (node: Node): boolean => {\n if (\n ['FunctionDeclaration', 'FunctionExpression', 'ArrowFunctionExpression'].includes(node.type)\n )\n return false;\n if (\n node.type === 'CallExpression' &&\n node.callee.type === 'Identifier' &&\n node.callee.name === 'eval' &&\n !node.optional\n )\n return true;\n return Object.entries(node).some(\n ([key, value]) =>\n !['loc', 'trailing', 'tag'].includes(key) &&\n (Array.isArray(value) ? value : [value]).some((child) => child?.type && directEval(child)),\n );\n };\n const grouping = (start: number, end: number, initializer = false) => {\n const parentheses: { start: number; end: number }[] = [];\n const tokens = Parser.tokenizer(source.slice(start, end), { ecmaVersion: 'latest' });\n for (;;) {\n const token = tokens.getToken();\n if (token.type === tokTypes.eof) break;\n if (initializer && token.type === tokTypes.eq) parentheses.length = 0;\n if (token.type === tokTypes.parenL || token.type === tokTypes.parenR) parentheses.push(token);\n }\n for (const token of parentheses) {\n code.remove(start + token.start, start + token.end);\n }\n };\n const visit = (node: Node, parent?: Node) => {\n if (node.type === 'VariableDeclaration' && node.declarations.length === 1) {\n const declaration = node.declarations[0];\n if (\n declaration.id.type === 'Identifier' &&\n declaration.init?.type === 'TwillSwitchExpression' &&\n ['Program', 'BlockStatement', 'SwitchCase', 'ExportNamedDeclaration'].includes(\n parent?.type ?? '',\n )\n ) {\n const statement = parent?.type === 'ExportNamedDeclaration' ? parent : node;\n const comment = leadingDoc(statement.start);\n const prefixStart =\n comment && source.startsWith('/**', comment.start) ? comment.start : statement.start;\n const pragma =\n comment &&\n /@ts-(?:ignore|expect-error|nocheck|check)\\b/.test(\n source.slice(comment.start, comment.end),\n );\n // A direct eval can observe the old wrapper's function scope. JS JSDoc\n // contextual typing also stays on the existing expression path.\n if (\n !pragma &&\n !directEval(declaration.init) &&\n (language.startsWith('ts') || prefixStart === statement.start)\n )\n initializers.set(declaration.init, { declaration, statement, prefixStart });\n }\n }\n if (node.type === 'ReturnStatement' && node.argument?.type === 'TwillSwitchExpression') {\n returns.add(node.argument);\n code.remove(node.start, node.start + 6);\n // Acorn omits grouping parentheses from expression node ranges.\n // Preserve comments while removing only the return's outer grouping.\n for (const [start, end] of [\n [node.start + 6, node.argument.start],\n [node.argument.end, node.end],\n ]) {\n grouping(start, end);\n }\n }\n for (const [key, value] of Object.entries(node)) {\n if (['loc', 'trailing', 'tag'].includes(key)) continue;\n for (const child of Array.isArray(value) ? value : [value])\n if (child?.type) visit(child, node);\n }\n };\n visit(ast);\n let counter = 0;\n const fresh = (part: string) => {\n let name: string;\n do name = `__twill${part}${counter++}`;\n while (usedNames.has(name));\n usedNames.add(name);\n return name;\n };\n for (const node of switches) {\n const direct = returns.has(node);\n const suspended = !direct && suspension(node);\n if (suspended)\n fail(\n suspended,\n `await/yield inside a ${node.keyword} expression requires a direct return. Bind the subject first, or await the whole result explicitly.`,\n );\n const initializer = initializers.get(node);\n const result = initializer ? fresh('Result') : undefined;\n const exit = initializer ? fresh('Exit') : undefined;\n const subject = fresh('Subject');\n if (initializer) {\n const { declaration, statement, prefixStart } = initializer;\n // Keep the user's const/let/var declaration and its TDZ unchanged. Native\n // control-flow inference computes the temporary's union across the arms.\n // An explicit annotation supplies contextual typing without copying tokens.\n const annotation =\n language.startsWith('ts') && declaration.id.typeAnnotation\n ? `: typeof ${declaration.id.name}`\n : '';\n grouping(declaration.id.end, node.start, true);\n grouping(node.end, statement.end);\n code.appendLeft(prefixStart, `let ${result}${annotation}; ${exit}: {const ${subject} = `);\n if (prefixStart < statement.start) code.prependRight(prefixStart, '\\n');\n code.move(prefixStart, node.start, node.end);\n code.appendRight(node.end, ` ${result}`);\n }\n const valuePrefix = result ? `${result} = (` : 'return ';\n const valueSuffix = result ? `); break ${exit};` : ';';\n const kind = node.cases.some((branch: Node) => branch.enumPattern) ? fresh('Kind') : undefined;\n if (!initializer)\n code.appendLeft(node.start, `${direct ? '{' : '(() => {'}const ${subject} = `);\n code.remove(node.parenStart, node.parenStart + 1);\n if (node.keyword === 'match') {\n // The native call parser permits a trailing comma. It is not part of the\n // subject initializer; preserve intervening comments/grouping tokens.\n const tokens = Parser.tokenizer(source.slice(node.discriminant.end, node.parenEnd), {\n ecmaVersion: 'latest',\n });\n for (;;) {\n const token = tokens.getToken();\n if (token.type === tokTypes.eof) break;\n if (token.type === tokTypes.comma)\n code.remove(node.discriminant.end + token.start, node.discriminant.end + token.end);\n }\n }\n // Keep the keyword source-backed for mapped lint diagnostics.\n const keywordEnd = node.start + (node.keyword === 'match' ? 5 : 6);\n if (node.keyword === 'match') code.overwrite(node.start, keywordEnd, 'switch');\n code.move(node.start, keywordEnd, node.parenEnd);\n code.appendLeft(node.parenEnd, `; ${kind ? `const ${kind} = ${subject}[\"kind\"]; ` : ''}`);\n code.overwrite(\n node.parenEnd,\n node.parenEnd + 1,\n ` (${kind ?? subject}${kind || node.discriminator === undefined ? '' : `[${JSON.stringify(node.discriminator)}]`})`,\n );\n for (const branch of node.cases) {\n if (branch.enumPattern) {\n const { reference, binding, start, parenStart, parenEnd, explicitKeyword } =\n branch.enumPattern;\n const tag = JSON.stringify(reference.property.name);\n if (language.startsWith('ts')) {\n // A type-only factory witness checks the reference and literal tag.\n // Native TS erases it; matching performs no factory/property lookup.\n const witness = `(${tag} satisfies (typeof `;\n if (explicitKeyword) code.overwrite(start, start + 4, witness);\n else code.appendLeft(start, witness);\n code.appendLeft(\n reference.end,\n ` extends (...args: never[]) => { readonly kind: ${tag} } ? ${tag} : never))`,\n );\n } else {\n if (explicitKeyword) {\n code.overwrite(start, start + 4, tag);\n code.remove(reference.start, reference.end);\n } else code.overwrite(reference.start, reference.end, tag);\n }\n code.remove(parenStart, parenStart + 1);\n code.remove(parenEnd, parenEnd + 1);\n if (binding) {\n code.appendLeft(binding.start, ': { const ');\n code.overwrite(\n branch.colonStart,\n branch.colonStart + 1,\n ` = ${subject}; ${branch.throw ? '' : valuePrefix}`,\n );\n code.appendLeft(branch.valueEnd, `${branch.throw ? ';' : valueSuffix} }`);\n if (source[branch.end - 1] === ';') code.remove(branch.end - 1, branch.end);\n } else if (!branch.throw) {\n code.appendLeft(branch.colonStart + 1, ` ${valuePrefix}`);\n if (result) {\n code.appendLeft(branch.valueEnd, valueSuffix);\n if (source[branch.end - 1] === ';') code.remove(branch.end - 1, branch.end);\n }\n }\n } else if (branch.pattern) {\n const { pattern, tag } = branch;\n // A discarded discriminator binding preserves native rest exclusion.\n // Its key remains source-backed; the literal moves to the case label.\n code.appendLeft(tag.value.start, fresh('Tag'));\n code.move(tag.value.start, tag.value.end, pattern.start);\n code.appendLeft(tag.value.end, ': { const ');\n code.overwrite(\n branch.colonStart,\n branch.colonStart + 1,\n ` = ${subject}; ${branch.throw ? '' : valuePrefix}`,\n );\n code.appendLeft(branch.valueEnd, `${branch.throw ? ';' : valueSuffix} }`);\n if (source[branch.end - 1] === ';') code.remove(branch.end - 1, branch.end);\n } else if (!branch.throw) {\n code.appendLeft(branch.colonStart + 1, ` ${valuePrefix}`);\n if (result) {\n code.appendLeft(branch.valueEnd, valueSuffix);\n if (source[branch.end - 1] === ';') code.remove(branch.end - 1, branch.end);\n }\n }\n }\n const hasDefault = node.cases.some(\n (branch: Node) => !branch.pattern && !branch.enumPattern && branch.test === null,\n );\n const check =\n !hasDefault && language.startsWith('ts')\n ? ` ${kind ? `(0 as unknown as typeof ${kind})` : subject} satisfies never;`\n : '';\n // Transpile-only JS hosts cannot prove unions. Unexpected values fail\n // visibly rather than returning an accidental undefined.\n const failure = hasDefault\n ? ''\n : `${check} throw new TypeError('Non-exhaustive switch expression');`;\n code.overwrite(node.end - 1, node.end, `}${failure}${direct || initializer ? '}' : '})()'}`, {\n contentOnly: true,\n });\n }\n}\n","import type MagicString from 'magic-string';\nimport type { SourceMap } from 'magic-string';\nimport {\n TraceMap,\n decodedMappings,\n encodedMappings,\n generatedPositionFor,\n} from '@jridgewell/trace-mapping';\n\ntype Node = { type: string; start: number; end: number; [key: string]: any };\ntype Insertion = {\n anchor: number;\n before: boolean;\n text: string;\n copies: { start: number; sourceStart: number; length: number }[];\n};\n\n/** Find free type references, respecting generic function/mapped/infer binders. */\nfunction references(\n node: Node,\n names: Set<string>,\n found = new Set<string>(),\n bound = new Set<string>(),\n) {\n const local = new Set(bound);\n for (const parameter of node.typeParameters?.params ?? []) local.add(parameter.name);\n if (node.type === 'TSMappedType') local.add(node.typeParameter.name);\n if (node.type === 'TSInferType') local.add(node.typeParameter.name);\n if (node.type === 'TSTypeReference' && node.typeName.type === 'Identifier') {\n const name = node.typeName.name;\n if (names.has(name) && !local.has(name)) found.add(name);\n }\n for (const [key, value] of Object.entries(node)) {\n if (['loc', 'typeName'].includes(key)) continue;\n for (const child of Array.isArray(value) ? value : [value]) {\n if (!child?.type) continue;\n const childBound = new Set(local);\n if (node.type === 'TSConditionalType' && key === 'trueType') {\n const bind = (part: Node) => {\n if (part.type === 'TSInferType') childBound.add(part.typeParameter.name);\n for (const [property, nested] of Object.entries(part)) {\n if (property === 'loc') continue;\n // An inner conditional's extends clause owns its own infer binders.\n // Its check/true/false branches may still infer for this outer clause.\n if (part.type === 'TSConditionalType' && property === 'extendsType') continue;\n for (const item of Array.isArray(nested) ? nested : [nested])\n if (item?.type) bind(item);\n }\n };\n bind(node.extendsType);\n }\n references(child, names, found, childBound);\n }\n }\n return found;\n}\n\nexport function enumTypeParameters(node: Node, branch: Node) {\n const parameters: Node[] = node.typeParameters?.params ?? [];\n const names = new Set(parameters.map((parameter) => parameter.name));\n const used = new Set<string>();\n for (const field of branch.params) references(field.typeAnnotation, names, used);\n // Constraints/defaults may reference an earlier enum type parameter.\n for (let size = -1; size !== used.size;) {\n size = used.size;\n for (const parameter of parameters) {\n if (!used.has(parameter.name)) continue;\n if (parameter.constraint) references(parameter.constraint, names, used);\n if (parameter.default) references(parameter.default, names, used);\n }\n }\n return parameters.filter((parameter) => used.has(parameter.name));\n}\n\n/** Tagged records and precise factories; no application runtime is introduced. */\nexport function lowerEnums(source: string, ast: Node, enums: Node[], code: MagicString) {\n const insertions: Insertion[] = [];\n const exported = new Set<Node>();\n const visit = (node: Node) => {\n if (node.type === 'ExportNamedDeclaration') exported.add(node.declaration);\n for (const [key, value] of Object.entries(node)) {\n if (['loc', 'trailing'].includes(key)) continue;\n for (const child of Array.isArray(value) ? value : [value]) if (child?.type) visit(child);\n }\n };\n visit(ast);\n for (const node of enums) {\n const replacement: Insertion = {\n anchor: node.braceStart,\n before: false,\n text: '= ',\n copies: [],\n };\n for (const [index, branch] of node.cases.entries()) {\n if (index) replacement.text += ' | ';\n replacement.text += `{ readonly kind: ${JSON.stringify(branch.id.name)}; `;\n for (const field of branch.params) {\n replacement.text += 'readonly ';\n const text = source.slice(field.start, field.typeAnnotation.end);\n replacement.copies.push({\n start: replacement.text.length,\n sourceStart: field.start,\n length: text.length,\n });\n replacement.text += text + '; ';\n }\n replacement.text += '}';\n }\n replacement.text += `; ${exported.has(node) ? 'export ' : ''}const `;\n replacement.copies.push({\n start: replacement.text.length,\n sourceStart: node.id.start,\n length: node.id.end - node.id.start,\n });\n replacement.text += source.slice(node.id.start, node.id.end) + ' = {';\n insertions.push(replacement);\n code.overwrite(node.start, node.start + 4, 'type');\n code.overwrite(node.braceStart, node.braceStart + 1, replacement.text);\n for (const branch of node.cases) {\n code.remove(branch.start, branch.start + 4);\n const parameters = enumTypeParameters(node, branch);\n const copied: Insertion = {\n anchor: branch.id.end,\n before: true,\n text: parameters.length ? '<' : '',\n copies: [],\n };\n for (const [index, parameter] of parameters.entries()) {\n if (index) copied.text += ', ';\n const text = source.slice(parameter.start, parameter.end);\n copied.copies.push({\n start: copied.text.length,\n sourceStart: parameter.start,\n length: text.length,\n });\n copied.text += text;\n }\n if (parameters.length) copied.text += '>';\n const generic = copied.text;\n if (generic) insertions.push(copied);\n code.appendLeft(branch.id.end, generic + (branch.hasParens ? '' : '()'));\n const fields = branch.params.map((field: Node) => field.name);\n // Const assertion only narrows the fresh literal; it does not mask type errors.\n code.appendLeft(\n branch.valueEnd,\n `{ return { kind: ${JSON.stringify(branch.id.name)}${fields.length ? ', ' + fields.join(', ') : ''} } as const; },`,\n );\n if (source[branch.end - 1] === ';') code.remove(branch.end - 1, branch.end);\n }\n code.appendLeft(node.end, ';');\n }\n return insertions;\n}\n\n/** Generated type copies map to their actual source tokens, including .d.ts maps. */\nexport function mapEnumCopies(\n source: string,\n generated: string,\n map: SourceMap,\n insertions: Insertion[],\n) {\n const starts = (text: string) => {\n const result = [0];\n for (let index = 0; index < text.length; index++)\n if (text[index] === '\\n') result.push(index + 1);\n return result;\n };\n const originalLines = starts(source),\n generatedLines = starts(generated);\n const position = (lines: number[], offset: number) => {\n let line = 0;\n while (line + 1 < lines.length && lines[line + 1]! <= offset) line++;\n return { line, column: offset - lines[line]! };\n };\n const trace = new TraceMap(map as any);\n const decoded = decodedMappings(trace);\n const copies: { generatedStart: number; sourceStart: number; length: number }[] = [];\n for (const insertion of insertions) {\n const anchor = position(originalLines, insertion.anchor);\n const location = generatedPositionFor(trace, {\n source: map.sources[0]!,\n line: anchor.line + 1,\n column: anchor.column,\n });\n const offset =\n generatedLines[location.line! - 1]! +\n location.column! -\n (insertion.before ? insertion.text.length : 0);\n if (generated.slice(offset, offset + insertion.text.length) !== insertion.text)\n throw new Error('Enum mapping anchor does not match generated text.');\n for (const copy of insertion.copies) {\n copies.push({\n generatedStart: offset + copy.start,\n sourceStart: copy.sourceStart,\n length: copy.length,\n });\n for (let index = 0; index < copy.length; index++) {\n const target = position(generatedLines, offset + copy.start + index);\n const original = position(originalLines, copy.sourceStart + index);\n const line = decoded[target.line]!;\n const entry: [number, number, number, number] = [\n target.column,\n 0,\n original.line,\n original.column,\n ];\n const existing = line.findIndex((segment) => segment[0] === target.column);\n if (existing >= 0) line[existing] = entry;\n else line.push(entry);\n }\n }\n }\n for (const line of decoded) line.sort((left, right) => left[0] - right[0]);\n map.mappings = encodedMappings(\n new TraceMap({ ...JSON.parse(map.toString()), mappings: decoded }),\n );\n return copies;\n}\n","import MagicString from 'magic-string';\nimport { Parser, tokTypes } from 'acorn';\nimport { parse } from './parser.js';\nimport { lowerDefers } from './defer.js';\nimport { lowerSwitchExpressions } from './branches.js';\nimport { lowerEnums, mapEnumCopies } from './enums.js';\nimport {\n originalPositionFor,\n generatedPositionFor,\n TraceMap,\n GREATEST_LOWER_BOUND,\n} from '@jridgewell/trace-mapping';\n\nexport type Language = 'js' | 'jsx' | 'ts' | 'tsx';\nexport interface TransformOptions {\n filename?: string;\n language?: Language;\n sourceType?: 'module' | 'script';\n /** Standard JSX runtime source; normally inherited from tsconfig.json. */\n jsxImportSource?: string;\n /** Swift's single-expression implicit return. Defaults to true. */\n implicitReturn?: boolean;\n /** Share dynamic synchronous cleanup through the optional runtime. Defaults to inline. */\n runtime?: 'inline' | 'external';\n}\nimport { extensions, isTwillFile } from './extensions.js';\nexport { extensions, isTwillFile } from './extensions.js';\nexport function inferLanguage(filename: string): Language {\n if (/\\.(?:twillx|tsx)$/.test(filename)) return 'tsx';\n if (/\\.jsx$/.test(filename)) return 'jsx';\n if (/\\.(?:js|mjs|cjs)$/.test(filename)) return 'js';\n return 'ts';\n}\n\nexport class TwillSyntaxError extends SyntaxError {\n readonly filename: string;\n readonly line: number;\n readonly column: number;\n readonly offset: number;\n readonly frame: string;\n constructor(\n source: string,\n filename: string,\n error: { message: string; pos?: number; loc?: { line: number; column: number } },\n ) {\n const line = error.loc?.line ?? 1;\n const column = error.loc?.column ?? 0;\n super(`${filename}:${line}:${column + 1}: ${error.message.replace(/\\s*\\(\\d+:\\d+\\)$/, '')}`);\n this.name = 'TwillSyntaxError';\n this.filename = filename;\n this.line = line;\n this.column = column;\n this.offset = error.pos ?? 0;\n this.frame = `${source.split(/\\r\\n|[\\r\\n\\u2028\\u2029]/)[line - 1] ?? ''}\\n${' '.repeat(column)}^`;\n }\n}\n\n// The parser boundary uses ESTree, including TS/JSX nodes from Acorn plugins.\ntype Node = { type: string; start: number; end: number; [key: string]: any };\ntype ClosureMetadata = {\n node: Node;\n label: { start: number; end: number } | null;\n header: { end: number; inStart: number; asyncEnd: number | null; parenthesized: boolean } | null;\n async: boolean;\n implicitMembers: number[];\n};\nfunction walk(node: Node, visit: (node: Node) => void): void {\n visit(node);\n for (const [key, value] of Object.entries(node)) {\n if (['loc', 'trailing'].includes(key)) continue;\n if (Array.isArray(value))\n value.forEach((child) => {\n if (child?.type) walk(child, visit);\n });\n else if (value?.type) walk(value, visit);\n }\n}\nfunction calleeName(node: Node): string | undefined {\n if (node.type === 'Identifier') return node.start === node.end ? undefined : node.name;\n if (node.type === 'MemberExpression' && !node.computed) {\n const object = calleeName(node.object);\n if (object) return `${object}.${node.property.name}`;\n }\n}\n\nexport function transform(source: string, options: TransformOptions = {}) {\n if (options.runtime !== undefined && !['inline', 'external'].includes(options.runtime))\n throw new TypeError('runtime must be inline or external');\n const filename = options.filename ?? 'input.twill';\n let parsed: {\n ast: Node;\n calls: Node[];\n guards: Node[];\n ifBindings: Node[];\n defers: Node[];\n switches: Node[];\n enums: Node[];\n comments: { start: number; end: number; value: string; type: string }[];\n closures: ClosureMetadata[];\n };\n try {\n parsed = parse(\n source,\n options.language ?? inferLanguage(filename),\n options.sourceType ?? 'module',\n );\n } catch (error) {\n throw new TwillSyntaxError(\n source,\n filename,\n error as ConstructorParameters<typeof TwillSyntaxError>[2],\n );\n }\n const code = new MagicString(source);\n const enumInsertions = parsed.enums.length\n ? lowerEnums(source, parsed.ast, parsed.enums, code)\n : [];\n const usedNames = new Set<string>();\n const patternGuards = parsed.guards.filter(\n (guard) => guard.binding && guard.binding.declarations[0].id.type !== 'Identifier',\n );\n if (\n patternGuards.length ||\n parsed.ifBindings.length ||\n parsed.switches.length ||\n parsed.defers.length ||\n parsed.closures.some((closure) => closure.implicitMembers.length) ||\n /\\.twillx$/.test(filename.split(/[?#]/, 1)[0]!)\n )\n walk(parsed.ast, (node) => {\n if (node.type === 'Identifier' || node.type === 'JSXIdentifier') usedNames.add(node.name);\n });\n let guardCounter = 0;\n const ifBindingStarts = new Set(parsed.ifBindings.map((node) => node.consequent.start + 1));\n for (const statement of parsed.ifBindings) {\n const binding = statement.binding.declarations[0].id;\n let temporary: string;\n do temporary = `__twillIf${guardCounter++}`;\n while (usedNames.has(temporary));\n usedNames.add(temporary);\n const patternEnd = binding.typeAnnotation?.start ?? binding.end;\n // Evaluate in the outer scope, then move the original binding tokens into\n // the success branch. This preserves maps, narrowing and native defaults.\n code.overwrite(statement.start, binding.start, `{const ${temporary}`);\n code.move(binding.start, patternEnd, statement.consequent.start + 1);\n code.prependRight(binding.start, 'const ');\n code.appendLeft(patternEnd, ` = ${temporary};`);\n code.prependLeft(\n statement.consequent.start,\n `; if (${temporary} !== null && ${temporary} !== void 0) `,\n );\n code.appendLeft(statement.end, '}');\n }\n for (const guard of parsed.guards) {\n // A guard is one source statement. Without these braces an outer `else`\n // would bind to the lowered inner if (JavaScript's dangling-else rule).\n if (guard.singleStatement) {\n code.prependLeft(guard.start, '{');\n code.appendLeft(guard.end, '}');\n }\n if (guard.binding) {\n const binding = guard.binding.declarations[0].id;\n // Nullish checks preserve false, 0 and empty strings. The original\n // initializer runs once and the binding stays in the surrounding scope.\n if (binding.type === 'Identifier') code.remove(guard.start, guard.start + 'guard'.length);\n else {\n let temporary: string;\n do temporary = `__twillGuard${guardCounter++}`;\n while (usedNames.has(temporary));\n usedNames.add(temporary);\n // Move native pattern tokens intact, preserving editor definitions and\n // initializer TDZ/shadowing. A type annotation belongs to the temporary.\n const patternEnd = binding.typeAnnotation?.start ?? binding.end;\n code.overwrite(guard.start, binding.start, `const ${temporary}`);\n code.move(binding.start, patternEnd, guard.end);\n code.prependRight(binding.start, '; const ');\n code.appendLeft(patternEnd, ` = ${temporary};`);\n code.overwrite(guard.elseStart, guard.elseStart + 4, `; if (${temporary} == null)`);\n continue;\n }\n code.overwrite(\n guard.elseStart,\n guard.elseStart + 'else'.length,\n `; if (${binding.name} == null)`,\n );\n } else {\n code.overwrite(guard.start, guard.start + 'guard'.length, 'if (!(');\n code.overwrite(guard.elseStart, guard.elseStart + 'else'.length, '))');\n }\n }\n const uiFile = /\\.twillx$/.test(filename.split(/[?#]/, 1)[0]!);\n const metadataByNode = new Map(parsed.closures.map((item) => [item.node, item]));\n const componentCalls = new Set(\n parsed.calls.filter((node) => {\n const name = calleeName(node.callee);\n // Like JSX tags, uppercase final names opt into component syntax in UI\n // files. Parenthesized callable expressions retain ordinary callback behavior.\n return (\n uiFile &&\n node.start === node.callee.start &&\n !!name &&\n /^[A-Z]/.test(name.split('.').at(-1)!)\n );\n }),\n );\n for (const call of componentCalls) {\n const implicit = call.trailing.closures.flatMap(\n (closure: Node) => metadataByNode.get(closure)!.implicitMembers,\n )[0];\n if (implicit !== undefined)\n throw new TwillSyntaxError(source, filename, {\n message:\n 'Implicit member access is for ordinary callbacks. Use explicit parameters for component render props or slots.',\n pos: implicit,\n loc: {\n line: source.slice(0, implicit).split(/\\r\\n|[\\r\\n\\u2028\\u2029]/).length,\n column: source\n .slice(0, implicit)\n .split(/\\r\\n|[\\r\\n\\u2028\\u2029]/)\n .at(-1)!.length,\n },\n });\n }\n let implicitCounter = 0;\n for (const metadata of parsed.closures) {\n if (!metadata.implicitMembers.length) continue;\n let name: string;\n do name = `__twillArg${implicitCounter++}`;\n while (usedNames.has(name));\n usedNames.add(name);\n code.overwrite(metadata.node.start, metadata.node.start + 1, `(${name}) => {`);\n for (const offset of metadata.implicitMembers) code.appendLeft(offset, name);\n }\n // TypeScript only reads file-level leading pragmas, and the last wins.\n const leadingComments = parsed.comments\n .filter((comment) => comment.start < (parsed.ast.body[0]?.start ?? source.length))\n .map((comment) => comment.value)\n .join('\\n');\n const pragma = [...leadingComments.matchAll(/@jsxImportSource\\s+(\\S+)/g)].at(-1)?.[1];\n const imports = parsed.ast.body\n .filter((node: Node) => node.type === 'ImportDeclaration')\n .map((node: Node) => node.source.value as string);\n const vueImport = imports.some((name: string) => name === 'vue' || name.startsWith('@vue/'));\n const reactImport = imports.some((name: string) => name === 'react' || name.startsWith('react/'));\n if (componentCalls.size && !pragma && !options.jsxImportSource && vueImport && reactImport)\n throw new TwillSyntaxError(source, filename, {\n message:\n 'Both React and Vue are imported. Select the standard JSX runtime with @jsxImportSource or tsconfig jsxImportSource.',\n pos: parsed.calls[0]!.start,\n loc: parsed.calls[0]!.loc.start,\n });\n const jsxImportSource = pragma ?? options.jsxImportSource ?? (vueImport ? 'vue' : 'react');\n const vue = jsxImportSource === 'vue';\n if (uiFile && !pragma && jsxImportSource !== 'react') {\n const start = source.startsWith('#!') ? source.indexOf('\\n') + 1 : 0;\n code.appendLeft(start, `/** @jsxImportSource ${jsxImportSource} */\\n`);\n }\n const attributeClosings: number[] = [];\n const componentProps: {\n start: number;\n end: number;\n properties: { name: string; start: number; end: number; shorthand: boolean }[];\n }[] = [];\n const stripPunctuation = (start: number, end: number, types: readonly unknown[]) => {\n const text = source.slice(start, end);\n const lexer = Parser.tokenizer(text, { ecmaVersion: 'latest' });\n const edits = new MagicString(text);\n for (let token = lexer.getToken(); token.type !== tokTypes.eof; token = lexer.getToken())\n if (types.includes(token.type)) edits.remove(token.start, token.end);\n return edits.toString();\n };\n let counter = 0;\n for (const node of parsed.calls) {\n const { callEnd, hadParens, originalArgs, closures } = node.trailing;\n const component = componentCalls.has(node);\n if (component) {\n if (\n originalArgs.length > 1 ||\n originalArgs[0]?.type === 'SpreadElement' ||\n node.optional ||\n node.callee.optional\n )\n throw new TwillSyntaxError(source, filename, {\n message:\n 'Component syntax accepts one props object and children; optional calls use ordinary callbacks.',\n pos: node.start,\n loc: node.loc.start,\n });\n if (closures.length > 1 && !vue)\n throw new TwillSyntaxError(source, filename, {\n message:\n 'React components accept one children closure. Supply render props in the props object.',\n pos: closures[1].start,\n loc: closures[1].loc.start,\n });\n if (vue) {\n const labels = new Set(['default']);\n for (const closure of closures.slice(1)) {\n const label = metadataByNode.get(closure)!.label!;\n const name = source.slice(label.start, label.end);\n if (labels.has(name))\n throw new TwillSyntaxError(source, filename, {\n message: `Duplicate Vue slot: ${name}`,\n pos: label.start,\n loc: closure.loc.start,\n });\n labels.add(name);\n }\n }\n const opening = vue ? '>{({default: ' : '>{(';\n const tagEnd = node.typeParameters?.end ?? node.callee.end;\n code.appendLeft(node.callee.start, '(<');\n const props = originalArgs[0] as Node | undefined;\n const directAttributes =\n !vue &&\n props?.type === 'ObjectExpression' &&\n props.properties.every(\n (property: Node) =>\n property.type === 'SpreadElement' ||\n (property.kind === 'init' &&\n !property.method &&\n !property.computed &&\n (property.key.name ?? property.key.value) !== '__proto__' &&\n /^[A-Za-z_$][\\w$.:-]*$/.test(String(property.key.name ?? property.key.value))),\n );\n if (directAttributes) {\n componentProps.push({\n start: props!.start,\n end: props!.end,\n properties: props!.properties\n .filter((property: Node) => property.type !== 'SpreadElement')\n .map((property: Node) => ({\n name: String(property.key.name ?? property.key.value),\n start: property.key.start,\n end: property.key.end,\n shorthand: Boolean(property.shorthand),\n })),\n });\n // Literal props become native JSX attributes. This retains contextual\n // callback types and passes keys explicitly, as React's runtime expects.\n code.overwrite(\n tagEnd,\n props!.start + 1,\n ' ' + stripPunctuation(tagEnd, props!.start, [tokTypes.parenL]),\n );\n let previous = props!.start + 1;\n for (const property of props!.properties as Node[]) {\n if (previous < property.start)\n code.overwrite(\n previous,\n property.start,\n stripPunctuation(previous, property.start, [tokTypes.comma]) + ' ',\n );\n if (property.type === 'SpreadElement') code.prependLeft(property.start, '{');\n else {\n const name = String(property.key.name ?? property.key.value);\n if (property.shorthand) code.prependLeft(property.start, `${name}={`);\n else {\n code.overwrite(property.key.start, property.key.end, name);\n const start = property.key.end;\n const colon = Parser.tokenizer(source.slice(start, property.value.start), {\n ecmaVersion: 'latest',\n }).getToken();\n code.overwrite(start + colon.start, start + colon.end, '={');\n }\n }\n attributeClosings.push(property.end);\n previous = property.end;\n }\n const end = props!.end - 1;\n code.overwrite(\n previous,\n callEnd,\n stripPunctuation(previous, end, [tokTypes.comma]) +\n stripPunctuation(props!.end, callEnd, [tokTypes.parenR, tokTypes.comma]) +\n opening,\n );\n } else if (originalArgs.length) {\n const head = source.slice(tagEnd, originalArgs[0].start);\n const paren = Parser.tokenizer(head, { ecmaVersion: 'latest' }).getToken();\n code.overwrite(\n tagEnd,\n originalArgs[0].start,\n ' {...(' + head.slice(0, paren.start) + head.slice(paren.end),\n );\n const tailStart = originalArgs[0].end;\n const tail = Parser.tokenizer(source.slice(tailStart, callEnd - 1), {\n ecmaVersion: 'latest',\n });\n // Parenthesized props may contain closing parentheses before the comma.\n for (let token = tail.getToken(); token.type !== tokTypes.eof; token = tail.getToken())\n if (token.type === tokTypes.comma)\n code.remove(tailStart + token.start, tailStart + token.end);\n code.overwrite(callEnd - 1, callEnd, ')}' + opening);\n } else if (hadParens) {\n const gap = source.slice(tagEnd, callEnd);\n const tokens = Parser.tokenizer(gap, { ecmaVersion: 'latest' });\n const first = tokens.getToken();\n const last = tokens.getToken();\n code.overwrite(tagEnd, callEnd, opening + gap.slice(first.end, last.start));\n } else code.appendLeft(callEnd, opening);\n } else if (hadParens) {\n // Keep comments and trailing commas intact. The closing parenthesis is\n // moved after the closure; remove any comma immediately before it.\n const tailStart = originalArgs.at(-1)?.end ?? callEnd - 1;\n const tail = source.slice(tailStart, callEnd - 1);\n const token = Parser.tokenizer(tail, { ecmaVersion: 'latest' }).getToken();\n if (token.type === tokTypes.comma)\n code.remove(tailStart + token.start, tailStart + token.end);\n code.overwrite(callEnd - 1, callEnd, originalArgs.length ? ',' : '');\n } else code.appendLeft(callEnd, '(');\n let directChild = false;\n for (const closure of closures) {\n const metadata = metadataByNode.get(closure)!;\n const body = closure.body.body as Node[];\n const content = component && (vue || !metadata.header);\n const expressions = body.filter((statement) => statement.type === 'ExpressionStatement');\n const singleContent =\n content &&\n expressions.length === 1 &&\n body.every((statement) =>\n [\n 'ExpressionStatement',\n 'VariableDeclaration',\n 'FunctionDeclaration',\n 'ClassDeclaration',\n 'DeferStatement',\n 'EmptyStatement',\n ].includes(statement.type),\n ) &&\n body.filter((statement) => statement.type !== 'EmptyStatement').at(-1) === expressions[0];\n if (singleContent && body.length === 1 && !vue) {\n // A single JSX child is a value, not an array or an eagerly invoked\n // callback. This also supports libraries requiring ReactElement children.\n directChild = true;\n code.remove(closure.start, closure.start + 1);\n code.remove(closure.end - 1, closure.end);\n const statement = expressions[0]!;\n if (source[statement.end - 1] === ';') code.remove(statement.end - 1, statement.end);\n continue;\n }\n if (metadata.label) {\n const label = source\n .slice(metadata.label.start, metadata.label.end)\n .replace(/\\s*:\\s*$/, '');\n code.overwrite(\n metadata.label.start,\n closure.start,\n component && vue ? `, [${JSON.stringify(label)}]: ` : ', ',\n );\n }\n if (metadata.header) {\n const header = metadata.header;\n // Preserve parameter tokens in place so types, hover and diagnostics map\n // to their original locations instead of a regenerated header string.\n code.overwrite(\n closure.start,\n closure.start + 1,\n header.parenthesized || metadata.async ? '' : '(',\n );\n if (metadata.async && !header.parenthesized) code.appendLeft(header.asyncEnd!, ' (');\n code.overwrite(header.inStart, header.end, `${header.parenthesized ? '' : ') '}=> {`);\n } else if (!metadata.implicitMembers.length)\n code.overwrite(closure.start, closure.start + 1, '() => {');\n if (content && !singleContent) {\n let collector: string;\n do collector = `__twillChildren${counter++}`;\n while (usedNames.has(collector));\n const bodyStart = metadata.header?.end ?? closure.start + 1;\n const collect = (statement: Node): void => {\n switch (statement.type) {\n case 'ExpressionStatement':\n // The prefix belongs to the expression's own chunk. A moved\n // if-binding at this same boundary must remain before it.\n if (ifBindingStarts.has(statement.start))\n code.appendRight(statement.start, `${collector}.push(`);\n else code.prependLeft(statement.start, `${collector}.push(`);\n code.appendLeft(\n source[statement.end - 1] === ';' ? statement.end - 1 : statement.end,\n ')',\n );\n break;\n case 'BlockStatement':\n statement.body.forEach(collect);\n break;\n case 'IfStatement':\n case 'TwillIfBinding':\n collect(statement.consequent);\n if (statement.alternate) collect(statement.alternate);\n break;\n case 'GuardStatement':\n collect(statement.failure);\n break;\n case 'ForStatement':\n case 'ForOfStatement':\n case 'ForInStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n collect(statement.body);\n break;\n case 'SwitchStatement':\n statement.cases.forEach((branch: Node) => branch.consequent.forEach(collect));\n break;\n case 'TryStatement':\n collect(statement.block);\n if (statement.handler) collect(statement.handler.body);\n if (statement.finalizer) collect(statement.finalizer);\n break;\n case 'LabeledStatement':\n collect(statement.body);\n break;\n case 'ReturnStatement':\n throw new TwillSyntaxError(source, filename, {\n message:\n 'Component children collect expressions; use expressions instead of return.',\n pos: statement.start,\n loc: statement.loc.start,\n });\n // Declarations, break/continue, throw, functions and classes keep\n // their normal semantics. Never collect inside a nested function.\n }\n };\n body.forEach(collect);\n // Prefix after collecting so a compact first expression cannot place\n // its push wrapper before the collector declaration at the same offset.\n code.prependLeft(bodyStart, `const ${collector} = [];`);\n code.prependLeft(\n closure.end - 1,\n vue\n ? `;return ${collector};`\n : `;return ${collector}.length === 1 ? ${collector}[0] : ${collector};`,\n );\n } else if (\n singleContent ||\n (options.implicitReturn !== false &&\n body.length === 1 &&\n body[0]!.type === 'ExpressionStatement')\n ) {\n // Parentheses prevent object literals / comma expressions from changing meaning.\n const statement = singleContent ? expressions[0]! : body[0]!;\n code.prependLeft(statement.start, 'return (');\n code.appendLeft(source[statement.end - 1] === ';' ? statement.end - 1 : statement.end, ')');\n }\n }\n if (component)\n code.prependLeft(\n closures.at(-1).end,\n (vue ? '})}' : directChild || metadataByNode.get(closures[0])!.header ? ')}' : ')()}') +\n `</${calleeName(node.callee)}>)`,\n );\n else code.appendLeft(closures.at(-1).end, ')');\n // The parser may visit nested trailing calls after this one. Edits use\n // original offsets throughout, so nested scopes compose without reparsing.\n }\n if (parsed.switches.length)\n lowerSwitchExpressions(\n source,\n parsed.ast,\n parsed.switches,\n code,\n options.language ?? inferLanguage(filename),\n usedNames,\n parsed.comments,\n (node, message) => {\n throw new TwillSyntaxError(source, filename, {\n message,\n pos: node.start,\n loc: node.loc.start,\n });\n },\n );\n // Apply outer attribute braces after nested call suffixes at the same offset.\n for (const end of attributeClosings) code.appendLeft(end, '}');\n if (parsed.defers.length) {\n const starts = new Map<Node, number>();\n for (const metadata of parsed.closures)\n if (metadata.header) starts.set(metadata.node.body, metadata.header.end);\n lowerDefers(\n source,\n parsed.ast,\n code,\n options.language ?? inferLanguage(filename),\n usedNames,\n starts,\n parsed.comments,\n options.runtime ?? 'inline',\n options.sourceType ?? 'module',\n (node, message) => {\n throw new TwillSyntaxError(source, filename, {\n message,\n pos: node.start,\n loc: node.loc.start,\n });\n },\n );\n }\n const map = code.generateMap({\n source: filename,\n file: filename.replace(/\\.twillx?$/, '.js'),\n includeContent: true,\n hires: true,\n });\n const enumCopies = enumInsertions.length\n ? mapEnumCopies(source, code.toString(), map, enumInsertions)\n : [];\n return {\n code: code.toString(),\n map,\n changed: code.hasChanged(),\n closures: parsed.closures.length,\n guards: parsed.guards.length,\n ifBindings: parsed.ifBindings.length,\n defers: parsed.defers.length,\n switches: parsed.switches.length,\n associatedEnums: parsed.enums,\n enumPatterns: parsed.switches.flatMap((node) =>\n node.cases.flatMap((branch: Node) => (branch.enumPattern ? [branch.enumPattern] : [])),\n ),\n enumCopies,\n componentProps,\n };\n}\n\nexport type TransformResult = ReturnType<typeof transform>;\nconst traceMaps = new WeakMap<TransformResult, TraceMap>();\nfunction traceMap(result: TransformResult): TraceMap {\n let map = traceMaps.get(result);\n if (!map) {\n map = new TraceMap(result.map as any);\n traceMaps.set(result, map);\n }\n return map;\n}\nexport function originalPosition(result: TransformResult, line: number, column: number) {\n return originalPositionFor(traceMap(result), {\n line,\n column,\n bias: GREATEST_LOWER_BOUND,\n });\n}\nexport function generatedPosition(result: TransformResult, line: number, column: number) {\n return generatedPositionFor(traceMap(result), {\n source: result.map.sources[0]!,\n line,\n column,\n bias: GREATEST_LOWER_BOUND,\n });\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"configuration-CTJjSu_h.js","names":[],"sources":["../src/configuration.ts"],"sourcesContent":["import { existsSync, readFileSync, statSync } from 'node:fs';\nimport { dirname, resolve } from 'node:path';\nimport ts from 'typescript';\nimport type { TransformOptions } from './compiler.js';\nimport { digest, observe, type ConfigurationObservation } from './compilation-cache.js';\n\ntype Config = Pick<TransformOptions, 'implicitReturn' | 'jsxImportSource' | 'runtime'>;\ntype Observations = Map<string, ConfigurationObservation>;\nconst jsxConfigs = new Map<string, { files: Map<string, number>; source?: string }>();\n\nfunction record(observations: Observations, path: string, kind: ConfigurationObservation['kind']) {\n path = resolve(path);\n observations.set(kind + path, { path, kind, value: observe(path, kind) });\n}\n\n/** Use the project's standard JSX setting, including extended tsconfigs. */\nfunction jsxSource(\n root: string,\n configFile?: string,\n observations?: Observations,\n): string | undefined {\n const system = observations\n ? {\n ...ts.sys,\n fileExists(path: string) {\n record(observations, path, 'file');\n return ts.sys.fileExists(path);\n },\n directoryExists(path: string) {\n record(observations, path, 'directory');\n return ts.sys.directoryExists(path);\n },\n }\n : ts.sys;\n const filename = configFile ?? ts.findConfigFile(root, system.fileExists);\n if (!filename) return undefined;\n const cached = jsxConfigs.get(filename);\n if (\n !observations &&\n cached &&\n [...cached.files].every(\n ([file, time]) => (existsSync(file) ? statSync(file).mtimeMs : -1) === time,\n )\n )\n return cached.source;\n const files = new Map<string, number>();\n const parsed = ts.getParsedCommandLineOfConfigFile(\n filename,\n {},\n {\n ...system,\n // Only read configuration, not the project's source tree.\n readDirectory: () => [],\n readFile(file) {\n files.set(file, existsSync(file) ? statSync(file).mtimeMs : -1);\n if (!observations) return ts.sys.readFile(file);\n const path = resolve(file);\n let bytes: Buffer;\n try {\n bytes = readFileSync(file);\n } catch {\n observations.set('file' + path, { path, kind: 'file', value: 'unavailable' });\n return undefined;\n }\n observations.set('file' + path, { path, kind: 'file', value: digest(bytes) });\n // Match ts.sys.readFile's BOM decoding while hashing the exact read bytes.\n if (bytes[0] === 254 && bytes[1] === 255) {\n for (let i = 0; i < (bytes.length & ~1); i += 2) {\n const byte = bytes[i]!;\n bytes[i] = bytes[i + 1]!;\n bytes[i + 1] = byte;\n }\n return bytes.toString('utf16le', 2);\n }\n if (bytes[0] === 255 && bytes[1] === 254) return bytes.toString('utf16le', 2);\n return bytes.toString(\n 'utf8',\n bytes[0] === 239 && bytes[1] === 187 && bytes[2] === 191 ? 3 : 0,\n );\n },\n getCurrentDirectory: () => root,\n onUnRecoverableConfigFileDiagnostic() {},\n },\n );\n const source = parsed?.options.jsxImportSource;\n jsxConfigs.set(filename, { files, source });\n return source;\n}\n\nfunction readConfig(root: string, configFile?: string, observations?: Observations): Config {\n const filename = resolve(root, 'twill.config.json');\n const jsxImportSource = jsxSource(root, configFile, observations);\n if (observations) record(observations, filename, 'file');\n if (!existsSync(filename)) return { jsxImportSource };\n const text = readFileSync(filename, 'utf8');\n if (observations) {\n observations.set('file' + filename, { path: filename, kind: 'file', value: digest(text) });\n }\n const value = JSON.parse(text);\n if (!value || typeof value !== 'object' || Array.isArray(value))\n throw new Error(`${filename}: expected an object`);\n if (value.implicitReturn !== undefined && typeof value.implicitReturn !== 'boolean')\n throw new Error(`${filename}: implicitReturn must be a boolean`);\n if (value.runtime !== undefined && !['inline', 'external'].includes(value.runtime))\n throw new Error(`${filename}: runtime must be inline or external`);\n for (const key of Object.keys(value))\n if (!['implicitReturn', 'runtime', '$schema'].includes(key))\n throw new Error(`${filename}: unknown option ${key}`);\n return {\n implicitReturn: value.implicitReturn,\n jsxImportSource,\n ...(value.runtime === undefined ? {} : { runtime: value.runtime }),\n };\n}\n\nexport function loadConfig(root = process.cwd(), configFile?: string): Config {\n return readConfig(root, configFile);\n}\n\n/** Config dependencies, including inherited tsconfigs and optional new files. */\nexport function configurationFiles(root: string): string[] {\n jsxSource(root);\n const tsconfig = ts.findConfigFile(root, ts.sys.fileExists);\n return [\n ...new Set(\n [\n resolve(root, 'twill.config.json'),\n resolve(root, 'tsconfig.json'),\n ...(tsconfig ? [...(jsxConfigs.get(tsconfig)?.files.keys() ?? [tsconfig])] : []),\n ].map((file) => resolve(file)),\n ),\n ];\n}\n\n/** Fresh, content-based observations for persistent runner cache validation. */\nexport function loaderConfiguration(filename: string): {\n config: Config;\n observations: ConfigurationObservation[];\n} {\n const observations: Observations = new Map();\n let root = dirname(filename);\n for (;;) {\n const twill = resolve(root, 'twill.config.json');\n const typescript = resolve(root, 'tsconfig.json');\n record(observations, twill, 'file');\n record(observations, typescript, 'file');\n if (existsSync(twill) || existsSync(typescript))\n return {\n config: readConfig(root, undefined, observations),\n observations: [...observations.values()],\n };\n const parent = dirname(root);\n if (parent === root) return { config: {}, observations: [...observations.values()] };\n root = parent;\n }\n}\n"],"mappings":"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"}