@swiftuijs/twill 0.1.2 → 0.2.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/README.md +39 -11
- package/bin/run.mjs +15 -0
- package/bin/twill.mjs +34 -11
- package/dist/branches.d.ts +6 -3
- package/dist/cli.js +13 -6
- package/dist/cli.js.map +1 -1
- package/dist/compilation-cache-CuCGz02_.js +172 -0
- package/dist/compilation-cache-CuCGz02_.js.map +1 -0
- package/dist/compilation-cache.d.ts +21 -0
- package/dist/{compiler-Bi9TNOhX.js → compiler-DY1N07np.js} +530 -50
- package/dist/compiler-DY1N07np.js.map +1 -0
- package/dist/compiler.d.ts +17 -2
- package/dist/config.d.ts +1 -6
- package/dist/config.js +1 -54
- package/dist/configuration-CTJjSu_h.js +139 -0
- package/dist/configuration-CTJjSu_h.js.map +1 -0
- package/dist/configuration.d.ts +12 -0
- package/dist/defer-helper.d.ts +1 -0
- package/dist/defer.d.ts +1 -1
- package/dist/doctor.js +9 -5
- package/dist/doctor.js.map +1 -1
- package/dist/editor.d.ts +2 -0
- package/dist/editor.js +75 -4
- package/dist/editor.js.map +1 -1
- package/dist/enums.d.ts +27 -0
- package/dist/esbuild.js +1 -1
- package/dist/extensions-B1xTkoYP.js +9 -0
- package/dist/extensions-B1xTkoYP.js.map +1 -0
- package/dist/extensions.d.ts +2 -0
- package/dist/{files-D1mERoxc.js → files-BW9geU0_.js} +2 -2
- package/dist/files-BW9geU0_.js.map +1 -0
- package/dist/index.js +2 -1
- package/dist/loader-compiler-DIw9aw5n.js +19 -0
- package/dist/loader-compiler-DIw9aw5n.js.map +1 -0
- package/dist/loader-compiler.d.ts +4 -0
- package/dist/loader.d.ts +4 -0
- package/dist/loader.js +29 -22
- package/dist/loader.js.map +1 -1
- package/dist/parser.d.ts +2 -0
- package/dist/{plugin-BGabvyT6.js → plugin-Bks2hxCJ.js} +41 -12
- package/dist/plugin-Bks2hxCJ.js.map +1 -0
- package/dist/project.js +27 -3
- package/dist/project.js.map +1 -1
- package/dist/rollup.js +1 -1
- package/dist/rspack.js +1 -1
- package/dist/syntax.d.ts +2 -0
- package/dist/syntax.js +1 -1
- package/dist/{transpile-DwVekVFM.js → transpile-DG81yfVs.js} +2 -2
- package/dist/{transpile-DwVekVFM.js.map → transpile-DG81yfVs.js.map} +1 -1
- package/dist/typescript-plugin.cjs +718 -60
- package/dist/typescript-plugin.cjs.map +1 -1
- package/dist/vite.js +1 -1
- package/dist/webpack.js +1 -1
- package/package.json +8 -4
- package/schemas/twill.schema.json +6 -0
- package/dist/compiler-Bi9TNOhX.js.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/files-D1mERoxc.js.map +0 -1
- package/dist/plugin-BGabvyT6.js.map +0 -1
package/dist/vite.js
CHANGED
package/dist/webpack.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swiftuijs/twill",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.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": {
|
|
@@ -162,10 +162,11 @@
|
|
|
162
162
|
"rollup": "^4.64.0",
|
|
163
163
|
"vue": "^3.5.43",
|
|
164
164
|
"webpack": "^5.111.1",
|
|
165
|
-
"@playwright/test": "^1.63.0"
|
|
165
|
+
"@playwright/test": "^1.63.0",
|
|
166
|
+
"@swiftuijs/twill-runtime": "0.2.0"
|
|
166
167
|
},
|
|
167
168
|
"scripts": {
|
|
168
|
-
"build": "vite build && vite build --config vite.plugin.config.ts && node scripts/prepare-core.mjs",
|
|
169
|
+
"build": "node ../../scripts/generate-runtime-helper.mjs && vite build && vite build --config vite.plugin.config.ts && node scripts/prepare-core.mjs",
|
|
169
170
|
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
170
171
|
"test:unit": "vitest run",
|
|
171
172
|
"test:watch": "vitest",
|
|
@@ -175,6 +176,9 @@
|
|
|
175
176
|
"test:browser": "playwright test",
|
|
176
177
|
"benchmark": "node benchmarks/compiler.mjs",
|
|
177
178
|
"test": "pnpm run test:unit",
|
|
178
|
-
"benchmark:branching": "node benchmarks/branching.mjs"
|
|
179
|
+
"benchmark:branching": "node benchmarks/branching.mjs",
|
|
180
|
+
"benchmark:enum-patterns": "node benchmarks/enum-patterns.mjs",
|
|
181
|
+
"benchmark:runtime": "node benchmarks/runtime-helpers.mjs",
|
|
182
|
+
"benchmark:if-bindings": "node benchmarks/if-bindings.mjs"
|
|
179
183
|
}
|
|
180
184
|
}
|
|
@@ -11,6 +11,12 @@
|
|
|
11
11
|
"type": "boolean",
|
|
12
12
|
"default": true,
|
|
13
13
|
"description": "Return the value of a single-expression ordinary closure."
|
|
14
|
+
},
|
|
15
|
+
"runtime": {
|
|
16
|
+
"type": "string",
|
|
17
|
+
"enum": ["inline", "external"],
|
|
18
|
+
"default": "inline",
|
|
19
|
+
"description": "Inline cleanup code, or import versioned runtime helpers for dynamic synchronous defer scopes."
|
|
14
20
|
}
|
|
15
21
|
}
|
|
16
22
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compiler-Bi9TNOhX.js","names":["tt"],"sources":["../src/parser.js","../src/defer.ts","../src/branches.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 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 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 derivedClassElement = false;\n implicitClosure = null;\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 return super.parseStatement(context, ...args);\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 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() {\n const node = this.startNode();\n this.next();\n node.parenStart = this.start;\n node.discriminant = this.parseParenExpression();\n node.parenEnd = this.lastTokStart;\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 (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 switch 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 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 // 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 defers = [];\n const switches = [];\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 === 'DeferStatement') defers.push(node);\n if (node.type === 'TwillSwitchExpression') switches.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 defers,\n switches,\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","import MagicString from 'magic-string';\nimport type { Language } from './compiler.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 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 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.appendLeft(\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.prependLeft(block.end - 1, `\\n} finally { ${call} }\\n`);\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.prependLeft(\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}\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; expression contexts use a synchronous\n * lexical IIFE. Direct returns need no extra function or scheduling. */\nexport function lowerSwitchExpressions(\n source: string,\n ast: Node,\n switches: Node[],\n code: MagicString,\n language: Language,\n usedNames: Set<string>,\n fail: (node: Node, message: string) => never,\n) {\n const returns = new Set<Node>();\n const visit = (node: Node) => {\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 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 (token.type === tokTypes.parenL || token.type === tokTypes.parenR)\n code.remove(start + token.start, start + token.end);\n }\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]) if (child?.type) visit(child);\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 switch expression requires a direct return. Bind the subject first, or await the whole result explicitly.',\n );\n const subject = fresh('Subject');\n code.appendLeft(node.start, `${direct ? '{' : '(() => {'}const ${subject} = `);\n code.remove(node.parenStart, node.parenStart + 1);\n // Retain a real source-backed switch token for typed lint diagnostics.\n code.move(node.start, node.start + 6, node.parenEnd);\n code.appendLeft(node.parenEnd, '; ');\n code.overwrite(\n node.parenEnd,\n node.parenEnd + 1,\n ` (${subject}${node.discriminator === undefined ? '' : `[${JSON.stringify(node.discriminator)}]`})`,\n );\n for (const branch of node.cases) {\n 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 ? '' : 'return '}`,\n );\n code.appendLeft(branch.valueEnd, '; }');\n if (source[branch.end - 1] === ';') code.remove(branch.end - 1, branch.end);\n } else if (!branch.throw) code.appendLeft(branch.colonStart + 1, ' return ');\n }\n const hasDefault = node.cases.some((branch: Node) => !branch.pattern && branch.test === null);\n const check = !hasDefault && language.startsWith('ts') ? ` ${subject} satisfies never;` : '';\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 ? '}' : '})()'}`);\n }\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 {\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}\nexport const extensions = ['.twill', '.twillx'] as const;\nexport function isTwillFile(id: string): boolean {\n return extensions.some((extension) => id.split(/[?#]/, 1)[0]!.endsWith(extension));\n}\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 const filename = options.filename ?? 'input.twill';\n let parsed: {\n ast: Node;\n calls: Node[];\n guards: Node[];\n defers: Node[];\n switches: 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 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.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') usedNames.add(node.name);\n });\n let guardCounter = 0;\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 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 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 (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 (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 return {\n code: code.toString(),\n map,\n changed: code.hasChanged(),\n closures: parsed.closures.length,\n guards: parsed.guards.length,\n defers: parsed.defers.length,\n switches: parsed.switches.length,\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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"}
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":[],"sources":["../src/config.ts"],"sourcesContent":["import { existsSync, readFileSync, statSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport ts from 'typescript';\nimport type { TransformOptions } from './compiler.js';\n\ntype Config = Pick<TransformOptions, 'implicitReturn' | 'jsxImportSource'>;\nconst jsxConfigs = new Map<string, { files: Map<string, number>; source?: string }>();\n\n/** Use the project's standard JSX setting, including extended tsconfigs. */\nfunction jsxSource(root: string, configFile?: string): string | undefined {\n const filename = configFile ?? ts.findConfigFile(root, ts.sys.fileExists);\n if (!filename) return undefined;\n const cached = jsxConfigs.get(filename);\n if (\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 ...ts.sys,\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 return ts.sys.readFile(file);\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\nexport function loadConfig(root = process.cwd(), configFile?: string): Config {\n const filename = resolve(root, 'twill.config.json');\n const jsxImportSource = jsxSource(root, configFile);\n if (!existsSync(filename)) return { jsxImportSource };\n const value = JSON.parse(readFileSync(filename, 'utf8'));\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 for (const key of Object.keys(value))\n if (!['implicitReturn', '$schema'].includes(key))\n throw new Error(`${filename}: unknown option ${key}`);\n return { implicitReturn: value.implicitReturn, jsxImportSource };\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"],"mappings":";;;;AAMA,IAAM,6BAAa,IAAI,IAA6D;;AAGpF,SAAS,UAAU,MAAc,YAAyC;CACxE,MAAM,WAAW,cAAc,GAAG,eAAe,MAAM,GAAG,IAAI,UAAU;CACxE,IAAI,CAAC,UAAU,OAAO,KAAA;CACtB,MAAM,SAAS,WAAW,IAAI,QAAQ;CACtC,IACE,UACA,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,OACf,CAAC,MAAM,WAAW,WAAW,IAAI,IAAI,SAAS,IAAI,CAAC,CAAC,UAAU,QAAQ,IACzE,GAEA,OAAO,OAAO;CAChB,MAAM,wBAAQ,IAAI,IAAoB;CAgBtC,MAAM,SAfS,GAAG,iCAChB,UACA,CAAC,GACD;EACE,GAAG,GAAG;EAEN,qBAAqB,CAAC;EACtB,SAAS,MAAM;GACb,MAAM,IAAI,MAAM,WAAW,IAAI,IAAI,SAAS,IAAI,CAAC,CAAC,UAAU,EAAE;GAC9D,OAAO,GAAG,IAAI,SAAS,IAAI;EAC7B;EACA,2BAA2B;EAC3B,sCAAsC,CAAC;CACzC,CAEa,CAAA,EAAQ,QAAQ;CAC/B,WAAW,IAAI,UAAU;EAAE;EAAO;CAAO,CAAC;CAC1C,OAAO;AACT;AAEA,SAAgB,WAAW,OAAO,QAAQ,IAAI,GAAG,YAA6B;CAC5E,MAAM,WAAW,QAAQ,MAAM,mBAAmB;CAClD,MAAM,kBAAkB,UAAU,MAAM,UAAU;CAClD,IAAI,CAAC,WAAW,QAAQ,GAAG,OAAO,EAAE,gBAAgB;CACpD,MAAM,QAAQ,KAAK,MAAM,aAAa,UAAU,MAAM,CAAC;CACvD,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAC5D,MAAM,IAAI,MAAM,GAAG,SAAS,qBAAqB;CACnD,IAAI,MAAM,mBAAmB,KAAA,KAAa,OAAO,MAAM,mBAAmB,WACxE,MAAM,IAAI,MAAM,GAAG,SAAS,mCAAmC;CACjE,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,GACjC,IAAI,CAAC,CAAC,kBAAkB,SAAS,CAAC,CAAC,SAAS,GAAG,GAC7C,MAAM,IAAI,MAAM,GAAG,SAAS,mBAAmB,KAAK;CACxD,OAAO;EAAE,gBAAgB,MAAM;EAAgB;CAAgB;AACjE;;AAGA,SAAgB,mBAAmB,MAAwB;CACzD,UAAU,IAAI;CACd,MAAM,WAAW,GAAG,eAAe,MAAM,GAAG,IAAI,UAAU;CAC1D,OAAO,CACL,GAAG,IAAI,IACL;EACE,QAAQ,MAAM,mBAAmB;EACjC,QAAQ,MAAM,eAAe;EAC7B,GAAI,WAAW,CAAC,GAAI,WAAW,IAAI,QAAQ,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAE,IAAI,CAAC;CAChF,CAAC,CAAC,KAAK,SAAS,QAAQ,IAAI,CAAC,CAC/B,CACF;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"files-D1mERoxc.js","names":[],"sources":["../src/files.ts"],"sourcesContent":["import { statSync } from 'node:fs';\nimport { resolve } from 'node:path';\nimport { extensions } from './compiler.js';\n\nexport const sourceExtensions = [\n '.mjs',\n '.js',\n '.mts',\n '.ts',\n '.jsx',\n '.tsx',\n '.cjs',\n '.cts',\n '.json',\n ...extensions,\n];\nexport function isDependency(filename: string) {\n return /(?:^|[\\\\/])node_modules[\\\\/]/.test(filename);\n}\nexport function needsTypeEmission(filename: string) {\n return /\\.(?:tsx?|mts|jsx)$/.test(filename) && !/\\.d\\.(?:ts|mts)$/.test(filename);\n}\nexport function splitId(id: string): [string, string] {\n const index = id.search(/[?#]/);\n return index < 0 ? [id, ''] : [id.slice(0, index), id.slice(index)];\n}\nexport function resolveSourceFile(base: string): string | undefined {\n const file = (candidate: string) => {\n try {\n return statSync(candidate).isFile();\n } catch (error) {\n if (['ENOENT', 'ENOTDIR'].includes((error as NodeJS.ErrnoException).code ?? '')) return false;\n throw error;\n }\n };\n if (file(base)) return base;\n // Match the native-first order of the Vite resolver. Explicit filenames\n // remain the way to select one of several same-stem source files.\n for (const extension of sourceExtensions) if (file(base + extension)) return base + extension;\n for (const extension of sourceExtensions) {\n const candidate = resolve(base, 'index' + extension);\n if (file(candidate)) return candidate;\n }\n}\n"],"mappings":";;;;AAIA,IAAa,mBAAmB;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,GAAG;AACL;AACA,SAAgB,aAAa,UAAkB;CAC7C,OAAO,+BAA+B,KAAK,QAAQ;AACrD;AACA,SAAgB,kBAAkB,UAAkB;CAClD,OAAO,sBAAsB,KAAK,QAAQ,KAAK,CAAC,mBAAmB,KAAK,QAAQ;AAClF;AACA,SAAgB,QAAQ,IAA8B;CACpD,MAAM,QAAQ,GAAG,OAAO,MAAM;CAC9B,OAAO,QAAQ,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,GAAG,MAAM,KAAK,CAAC;AACpE;AACA,SAAgB,kBAAkB,MAAkC;CAClE,MAAM,QAAQ,cAAsB;EAClC,IAAI;GACF,OAAO,SAAS,SAAS,CAAC,CAAC,OAAO;EACpC,SAAS,OAAO;GACd,IAAI,CAAC,UAAU,SAAS,CAAC,CAAC,SAAU,MAAgC,QAAQ,EAAE,GAAG,OAAO;GACxF,MAAM;EACR;CACF;CACA,IAAI,KAAK,IAAI,GAAG,OAAO;CAGvB,KAAK,MAAM,aAAa,kBAAkB,IAAI,KAAK,OAAO,SAAS,GAAG,OAAO,OAAO;CACpF,KAAK,MAAM,aAAa,kBAAkB;EACxC,MAAM,YAAY,QAAQ,MAAM,UAAU,SAAS;EACnD,IAAI,KAAK,SAAS,GAAG,OAAO;CAC9B;AACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-BGabvyT6.js","names":[],"sources":["../src/plugin.ts"],"sourcesContent":["import { dirname, isAbsolute, resolve } from 'node:path';\nimport { existsSync } from 'node:fs';\nimport { createUnplugin } from 'unplugin';\nimport { isTwillFile, type TransformOptions } from './compiler.js';\nimport { loadConfig, configurationFiles } from './config.js';\nimport { transpile, transpileNative } from './transpile.js';\nimport {\n isDependency,\n needsTypeEmission,\n splitId,\n resolveSourceFile,\n sourceExtensions,\n} from './files.js';\n\nexport interface PluginOptions extends Omit<TransformOptions, 'filename' | 'language'> {\n root?: string;\n /** Resolve relative extensionless native/Twill sources. Defaults to true. */\n resolveExtensions?: boolean;\n /** Native TS/JSX emission: defaults off for Vite/esbuild, on for Rollup/webpack/rspack. */\n nativeSources?: boolean;\n}\n\nexport const twillPlugin = createUnplugin<PluginOptions | undefined, false>(\n (options = {}, meta) => {\n let root = options.root ?? process.cwd();\n let config = { ...loadConfig(root), ...options };\n let servingVite = false;\n // Reuse native host emission where it already exists.\n const nativeSources = options.nativeSources ?? !['vite', 'esbuild'].includes(meta.framework);\n return {\n name: 'twill',\n enforce: 'pre',\n esbuild: {\n setup(build) {\n // unplugin tags its resolved files with a custom namespace. Native\n // dependencies of those files must re-enter esbuild's normal resolver.\n build.onResolve({ filter: /.*/, namespace: 'twill' }, (args) =>\n build.resolve(args.path, {\n resolveDir: dirname(args.importer),\n kind: args.kind,\n }),\n );\n },\n },\n vite: {\n configResolved(viteConfig) {\n root = options.root ?? viteConfig.root;\n config = { ...loadConfig(root), ...options };\n servingVite = viteConfig.command === 'serve';\n },\n config() {\n return {\n resolve: {\n extensions: sourceExtensions,\n },\n };\n },\n configureServer(server) {\n let files = new Set(configurationFiles(root).map((file) => resolve(file)));\n // Watch the parent of an absent file. Registering a missing path\n // directly can narrow Chokidar's directory filter and lose additions.\n const watch = () =>\n server.watcher.add([...files].map((file) => (existsSync(file) ? file : dirname(file))));\n watch();\n let update: ReturnType<typeof setTimeout> | undefined;\n const changed = (filename: string) => {\n if (files.has(resolve(filename))) {\n clearTimeout(update);\n // Chokidar throttles rapid changes for 50 ms. Read after that\n // window so consecutive saves use the final contents, and a\n // correction after an error overlay produces another event.\n update = setTimeout(() => {\n try {\n config = { ...loadConfig(root), ...options };\n } catch (cause) {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n server.config.logger.error(error.message);\n server.ws.send({\n type: 'error',\n err: { message: error.message, stack: error.stack ?? '', plugin: 'twill' },\n });\n return;\n }\n files = new Set(configurationFiles(root).map((file) => resolve(file)));\n watch();\n if (server.environments)\n for (const environment of Object.values(server.environments))\n environment.moduleGraph.invalidateAll();\n else server.moduleGraph.invalidateAll();\n server.ws.send({ type: 'full-reload' });\n }, 75);\n }\n };\n server.watcher.on('change', changed).on('add', changed).on('unlink', changed);\n server.httpServer?.once('close', () => clearTimeout(update));\n // Chokidar removes listeners when the watcher closes. HTTP can close\n // and reopen independently of the watcher during server setup.\n },\n },\n resolveId(id, importer) {\n if (options.resolveExtensions === false || (!id.startsWith('.') && !isAbsolute(id)))\n return null;\n const [path, query] = splitId(id);\n const base = isAbsolute(path!)\n ? path!\n : resolve(importer ? dirname(splitId(importer)[0]) : root, path!);\n const candidate = resolveSourceFile(base);\n if (!candidate || candidate === base) return null;\n if (meta.framework === 'esbuild' && !isTwillFile(candidate)) return null;\n return candidate + query;\n },\n transformInclude(id) {\n const filename = splitId(id)[0];\n return (\n !isDependency(filename) &&\n (isTwillFile(filename) || (nativeSources && needsTypeEmission(filename)))\n );\n },\n transform(source, id) {\n const filename = splitId(id)[0];\n if (isDependency(filename)) return null;\n if (isTwillFile(filename)) {\n // Vite's dev import analysis treats addWatchFile as a browser import.\n // Watch config with the server instead; a missing optional config\n // must never become an unresolved browser module.\n if (!servingVite)\n for (const file of configurationFiles(root))\n if (existsSync(file)) this.addWatchFile(file);\n return transpile(source, { ...config, filename });\n }\n return nativeSources && needsTypeEmission(filename)\n ? transpileNative(source, filename, undefined, undefined, config.jsxImportSource)\n : null;\n },\n };\n },\n);\n"],"mappings":"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"}
|