svelte-effect-runtime 2.5.1 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dist/chunks/{preprocess-DseI9Doo.js → preprocess-D84Ngmby.js} +49 -6
- package/.dist/chunks/preprocess-D84Ngmby.js.map +1 -0
- package/.dist/chunks/{transform-BotzDlj3.js → transform-CHAnW68p.js} +3 -3
- package/.dist/chunks/{transform-BotzDlj3.js.map → transform-CHAnW68p.js.map} +1 -1
- package/.dist/chunks/{transform-Cx5bjmP6.js → transform-PXwkylXd.js} +10 -5
- package/.dist/chunks/transform-PXwkylXd.js.map +1 -0
- package/.dist/markup/transform.js +1 -1
- package/.dist/preprocess/imports.d.ts +10 -2
- package/.dist/preprocess/types.d.ts +8 -1
- package/.dist/preprocess.js +2 -2
- package/.dist/runtime/preprocess.js +3 -3
- package/.dist/vite.js +1 -1
- package/package.json +1 -1
- package/.dist/chunks/preprocess-DseI9Doo.js.map +0 -1
- package/.dist/chunks/transform-Cx5bjmP6.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as find_yield_star_node, c as AsyncEffectInSyncRuneError, d as collect_top_level_binding_names, f as has_local_import_binding, i as extract_binding_names, l as AwaitInEffectWorkError, n as collect_yield_star_nodes, o as is_yield_star_expression, p as make_imports, r as contains_top_level_await, s as collect_free_identifiers, u as PreprocessError } from "./transform-
|
|
1
|
+
import { a as find_yield_star_node, c as AsyncEffectInSyncRuneError, d as collect_top_level_binding_names, f as has_local_import_binding, i as extract_binding_names, l as AwaitInEffectWorkError, n as collect_yield_star_nodes, o as is_yield_star_expression, p as make_imports, r as contains_top_level_await, s as collect_free_identifiers, u as PreprocessError } from "./transform-PXwkylXd.js";
|
|
2
2
|
import { contains_top_level_yield_star } from "../detect.js";
|
|
3
3
|
import MagicString from "magic-string";
|
|
4
4
|
import ts from "typescript";
|
|
@@ -187,6 +187,7 @@ function lower_variable_statement(stmt, content, context) {
|
|
|
187
187
|
const decl_list = stmt.declarationList;
|
|
188
188
|
const kind = (decl_list.flags & ts.NodeFlags.Let) !== 0 ? "let" : "const";
|
|
189
189
|
let has_bare_yield = false;
|
|
190
|
+
let uses_dispatcher_promise = false;
|
|
190
191
|
for (const decl of decl_list.declarations) {
|
|
191
192
|
if (!decl.initializer || !contains_top_level_yield_star(decl.initializer)) {
|
|
192
193
|
if (contains_top_level_yield_star(decl.name)) {
|
|
@@ -207,6 +208,13 @@ function lower_variable_statement(stmt, content, context) {
|
|
|
207
208
|
if (ts.isIdentifier(decl.name)) {
|
|
208
209
|
const original_name = binding_text;
|
|
209
210
|
if (is_yield_star_expression(decl.initializer)) {
|
|
211
|
+
if (kind === "const") {
|
|
212
|
+
const awaited = make_awaited_yield_initializer(decl.initializer, content, original_name, context);
|
|
213
|
+
type_helpers.push(awaited.declaration);
|
|
214
|
+
rewritten_decls.push(`${original_name} = ${awaited.expression}`);
|
|
215
|
+
uses_dispatcher_promise = true;
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
210
218
|
const temp_name = context.next_temp_name(original_name);
|
|
211
219
|
const yield_text = extract_yield_star_full_text(decl.initializer, content);
|
|
212
220
|
const type_helper = make_yield_type_helper(yield_text, original_name, context);
|
|
@@ -268,6 +276,7 @@ function lower_variable_statement(stmt, content, context) {
|
|
|
268
276
|
type_helpers,
|
|
269
277
|
rewritten_text: rewritten_decls.length === 0 ? "" : `${has_bare_yield ? "let" : kind} ${rewritten_decls.join(", ")};`,
|
|
270
278
|
effect_blocks: statements.length === 0 ? [] : [make_effect_block(statements, deps)],
|
|
279
|
+
uses_dispatcher_promise,
|
|
271
280
|
range: {
|
|
272
281
|
start: stmt.getStart(),
|
|
273
282
|
end: stmt.end
|
|
@@ -391,6 +400,22 @@ function lower_expression_yields(expr, content, hint, context) {
|
|
|
391
400
|
effect_blocks: [make_effect_block(statements, deps)]
|
|
392
401
|
};
|
|
393
402
|
}
|
|
403
|
+
function make_awaited_yield_initializer(expr, content, hint, context) {
|
|
404
|
+
const yield_text = extract_yield_star_full_text(expr, content);
|
|
405
|
+
const helper_name = context.next_helper_name(`effect_${hint}`);
|
|
406
|
+
const helper_id = make_script_effect_id(expr, context);
|
|
407
|
+
const deps_text = `[${collect_deps(yield_text).join(", ")}]`;
|
|
408
|
+
return {
|
|
409
|
+
declaration: `function* ${helper_name}() { return (${yield_text}); }`,
|
|
410
|
+
expression: [
|
|
411
|
+
`await ${context.dispatcher_name}().promise({`,
|
|
412
|
+
`id: ${JSON.stringify(helper_id)}, `,
|
|
413
|
+
`deps: ${deps_text}, `,
|
|
414
|
+
`factory: () => ${helper_name}()`,
|
|
415
|
+
`})`
|
|
416
|
+
].join("")
|
|
417
|
+
};
|
|
418
|
+
}
|
|
394
419
|
function make_yield_type_helper(yield_text, hint, context) {
|
|
395
420
|
if (!context.emit_types) return;
|
|
396
421
|
const helper_name = context.next_type_helper_name(hint);
|
|
@@ -413,6 +438,9 @@ function make_state_placeholder(rune_name, type, context) {
|
|
|
413
438
|
function strip_yield_star(yield_text) {
|
|
414
439
|
return yield_text.replace(/^yield\*\s*/, "");
|
|
415
440
|
}
|
|
441
|
+
function make_script_effect_id(expr, context) {
|
|
442
|
+
return `${context.filename}:${expr.getStart()}:${expr.end}`;
|
|
443
|
+
}
|
|
416
444
|
function rewrite_state_rune_as_derived(expression) {
|
|
417
445
|
const state_call = expression.match(/^\$state(?:\.raw)?\(([\s\S]*)\)$/);
|
|
418
446
|
if (!state_call) return expression;
|
|
@@ -496,6 +524,8 @@ function transform_script_effect(content, filename, options = {}) {
|
|
|
496
524
|
const name_allocator = make_name_allocator(top_level_binding_names);
|
|
497
525
|
const emit_types = options.emit_types ?? true;
|
|
498
526
|
let has_effect = false;
|
|
527
|
+
let uses_dispatcher_promise = false;
|
|
528
|
+
let uses_effect_types = false;
|
|
499
529
|
/** Phase 1: detect imports already provided by the user. */
|
|
500
530
|
const has_effect_import = has_local_import_binding(source_file, "effect", "Effect");
|
|
501
531
|
const has_dispatcher_import = has_local_import_binding(source_file, "svelte-effect-runtime/internal/generators", "get_dispatcher");
|
|
@@ -510,8 +540,13 @@ function transform_script_effect(content, filename, options = {}) {
|
|
|
510
540
|
untrack: has_untrack_import ? "untrack" : reserve_runtime_import("untrack")
|
|
511
541
|
};
|
|
512
542
|
const context = {
|
|
543
|
+
filename,
|
|
544
|
+
dispatcher_name: runtime_bindings.dispatcher,
|
|
513
545
|
effect_name: runtime_bindings.effect,
|
|
514
546
|
emit_types,
|
|
547
|
+
next_helper_name(hint) {
|
|
548
|
+
return name_allocator.reserve(make_generated_name(hint ?? "helper", ""));
|
|
549
|
+
},
|
|
515
550
|
next_temp_name(hint) {
|
|
516
551
|
const suffix = temp_counter === 0 ? "" : `_${temp_counter}`;
|
|
517
552
|
const name = make_generated_name(hint ?? String(temp_counter), suffix);
|
|
@@ -537,6 +572,8 @@ function transform_script_effect(content, filename, options = {}) {
|
|
|
537
572
|
magic.appendLeft(lowered.range.start, prefix + "\n");
|
|
538
573
|
}
|
|
539
574
|
effect_blocks.push(...lowered.effect_blocks);
|
|
575
|
+
uses_dispatcher_promise ||= lowered.uses_dispatcher_promise ?? false;
|
|
576
|
+
uses_effect_types ||= lowered.temps.some((temp) => temp.type?.includes(`${runtime_bindings.effect}.Success`) ?? false);
|
|
540
577
|
}
|
|
541
578
|
if (!has_effect) {
|
|
542
579
|
block_refs.push({
|
|
@@ -549,13 +586,19 @@ function transform_script_effect(content, filename, options = {}) {
|
|
|
549
586
|
};
|
|
550
587
|
}
|
|
551
588
|
/** Phase 3: inject runtime imports after the last user import. */
|
|
552
|
-
const imports = make_imports(has_effect_import, has_dispatcher_import, has_untrack_import, runtime_bindings
|
|
589
|
+
const imports = make_imports(has_effect_import, has_dispatcher_import, has_untrack_import, runtime_bindings, {
|
|
590
|
+
needs_dispatcher: effect_blocks.length > 0 || uses_dispatcher_promise,
|
|
591
|
+
needs_effect: effect_blocks.length > 0 || uses_effect_types,
|
|
592
|
+
needs_untrack: effect_blocks.length > 0
|
|
593
|
+
});
|
|
553
594
|
const last_import = [...source_file.statements].reverse().find(ts.isImportDeclaration);
|
|
554
|
-
if (last_import) magic.appendRight(last_import.end, "\n" + imports);
|
|
595
|
+
if (imports) if (last_import) magic.appendRight(last_import.end, "\n" + imports);
|
|
555
596
|
else magic.prepend(imports + "\n");
|
|
556
597
|
/** Phase 4: append the runtime program and lifecycle wiring. */
|
|
557
|
-
|
|
558
|
-
|
|
598
|
+
if (effect_blocks.length > 0) {
|
|
599
|
+
const runtime_block = make_runtime_block_with_bindings(effect_blocks, runtime_bindings);
|
|
600
|
+
magic.append("\n" + runtime_block);
|
|
601
|
+
}
|
|
559
602
|
block_refs.push({
|
|
560
603
|
id: filename,
|
|
561
604
|
kind: "script"
|
|
@@ -610,4 +653,4 @@ function make_generated_name(hint, suffix) {
|
|
|
610
653
|
//#endregion
|
|
611
654
|
export { transform_script_effect as t };
|
|
612
655
|
|
|
613
|
-
//# sourceMappingURL=preprocess-
|
|
656
|
+
//# sourceMappingURL=preprocess-D84Ngmby.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preprocess-D84Ngmby.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/preprocess/source.ts","../../../modules/svelte-effect-runtime/src/preprocess/runtime-block.ts","../../../modules/svelte-effect-runtime/src/preprocess/runes.ts","../../../modules/svelte-effect-runtime/src/preprocess/lower.ts","../../../modules/svelte-effect-runtime/src/preprocess/index.ts"],"sourcesContent":["import type MagicString from \"magic-string\";\nimport type ts from \"typescript\";\n\n/**\n * Creates a source map from transformed script back to the original block.\n *\n * @since 2.0.0\n * @param magic - MagicString instance holding the transformed source.\n * @param filename - Source filename used for the source map entry.\n * @returns A plain source map object.\n */\nexport function create_source_map(\n magic: MagicString,\n filename: string,\n): Record<string, unknown> {\n const map = magic.generateMap({\n hires: true,\n includeContent: true,\n source: filename,\n });\n\n return map as unknown as Record<string, unknown>;\n}\n\n/**\n * Slices a substring matching a node's full source range.\n *\n * @since 2.0.0\n * @param content - Original source text.\n * @param node - AST node whose full range should be extracted.\n * @returns Source text including leading trivia.\n */\nexport function slice(content: string, node: ts.Node): string {\n return content.slice(node.getFullStart(), node.end);\n}\n\n/**\n * Slices a substring matching a node's source range without leading trivia.\n *\n * @since 2.0.0\n * @param content - Original source text.\n * @param node - AST node whose non-trivia range should be extracted.\n * @returns Source text excluding leading trivia.\n */\nexport function slice_start(content: string, node: ts.Node): string {\n return content.slice(node.getStart(), node.end);\n}\n","import type { EffectBlock, RuntimeImportBindings } from \"./types.ts\";\n\n/**\n * Builds the runtime blocks appended to lowered script effect code.\n *\n * @since 2.0.0\n * @param blocks - Effect bodies and dependency reads to emit.\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\n */\nexport function make_runtime_block(blocks: EffectBlock[]): string {\n const bindings: RuntimeImportBindings = {\n cancel: \"__SER___cancel\",\n dispatcher: \"get_dispatcher\",\n dispatcher_value: \"__SER___dispatcher\",\n effect: \"Effect\",\n program: \"__SER___program\",\n untrack: \"untrack\",\n };\n\n return make_runtime_block_with_bindings(blocks, bindings);\n}\n\n/**\n * Builds the runtime blocks appended to lowered script effect code with\n * explicit runtime import bindings.\n *\n * @since 2.4.2\n * @param blocks - Effect bodies and dependency reads to emit.\n * @param bindings - Runtime binding names available in the generated code.\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\n */\nexport function make_runtime_block_with_bindings(\n blocks: EffectBlock[],\n bindings: RuntimeImportBindings,\n): string {\n const merged_block = merge_effect_blocks(blocks);\n const dep_reads = merged_block.deps.map((dep) => ` ${dep};`);\n\n const body = merged_block.statements\n .map((statement) => ` ${statement}`)\n .join(\"\\n\");\n\n return [\n \"\",\n \"$effect(() => {\",\n ...dep_reads,\n ` const ${bindings.dispatcher_value} = ${bindings.dispatcher}();`,\n ` const ${bindings.program} = ${bindings.effect}.gen(function* () {`,\n body,\n \" });\",\n ` const ${bindings.cancel} = ${bindings.untrack}(() => ${bindings.dispatcher_value}.fork(${bindings.program}));`,\n ` import.meta.hot?.dispose(${bindings.cancel});`,\n ` return ${bindings.cancel};`,\n \"});\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction merge_effect_blocks(blocks: EffectBlock[]): EffectBlock {\n const statements = blocks.flatMap((block) => block.statements);\n const deps = blocks.flatMap((block) => block.deps);\n\n return {\n statements,\n deps: [...new Set(deps)],\n };\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport { AsyncEffectInSyncRuneError } from \"$/error.ts\";\nimport { slice } from \"./source.ts\";\n\nimport ts from \"typescript\";\n\nconst ASYNC_EXPRESSION_RUNES = new Set([\n \"$derived\",\n \"$inspect\",\n \"$state\",\n \"$state.raw\",\n]);\n\nconst CALLBACK_RUNES = new Set([\n \"$derived.by\",\n \"$effect\",\n \"$effect.pre\",\n \"$effect.root\",\n]);\n\n/**\n * Validates that `yield*` only appears in rune positions the script-effect\n * transform can lower without changing the rune's normal Svelte contract.\n *\n * @since 2.0.0\n * @param node - AST node to scan.\n * @param content - Original script source used for diagnostics.\n * @param filename - Source filename used for diagnostics.\n * @returns Nothing.\n */\nexport function validate_rune_yield_usage(\n node: ts.Node,\n content: string,\n filename: string,\n): void {\n visit_rune_yield_usage(node, content, filename);\n}\n\n/**\n * Identifies `$state(...)` and `$state.raw(...)` initializer calls.\n *\n * @since 2.0.0\n * @param expr - Expression to classify.\n * @param content - Original script source used to preserve argument text.\n * @returns State rune details when the expression is a state initializer.\n */\nexport function get_state_rune_initializer(\n expr: ts.Expression,\n content: string,\n): { rune_name: \"$state\" | \"$state.raw\"; value_text: string } | undefined {\n if (!ts.isCallExpression(expr)) {\n return undefined;\n }\n\n const rune_name = get_rune_name(expr.expression);\n\n if (rune_name !== \"$state\" && rune_name !== \"$state.raw\") {\n return undefined;\n }\n\n const first_arg = expr.arguments[0];\n\n if (!first_arg) {\n return undefined;\n }\n\n return {\n rune_name,\n value_text: slice(content, first_arg).trim(),\n };\n}\n\nfunction visit_rune_yield_usage(\n node: ts.Node,\n content: string,\n filename: string,\n): void {\n if (ts.isCallExpression(node)) {\n validate_call_expression(node, content, filename);\n }\n\n node.forEachChild((child) => {\n visit_rune_yield_usage(child, content, filename);\n });\n}\n\nfunction validate_call_expression(\n call: ts.CallExpression,\n content: string,\n filename: string,\n): void {\n const rune_name = get_rune_name(call.expression);\n\n if (!rune_name) {\n return;\n }\n\n if (\n !ASYNC_EXPRESSION_RUNES.has(rune_name) &&\n contains_top_level_yield_star(call)\n ) {\n throw new AsyncEffectInSyncRuneError(\n rune_name,\n slice(content, call),\n filename,\n );\n }\n\n if (!CALLBACK_RUNES.has(rune_name)) {\n return;\n }\n\n const callback = call.arguments[0];\n\n if (!callback || !callback_has_top_level_yield_star(callback)) {\n return;\n }\n\n throw new AsyncEffectInSyncRuneError(\n rune_name,\n slice(content, call),\n filename,\n );\n}\n\nfunction callback_has_top_level_yield_star(node: ts.Expression): boolean {\n if (\n (ts.isArrowFunction(node) ||\n ts.isFunctionExpression(node)) &&\n node.body !== undefined\n ) {\n return contains_top_level_yield_star(node.body);\n }\n\n return contains_top_level_yield_star(node);\n}\n\nfunction get_rune_name(expr: ts.Expression): string | undefined {\n if (ts.isIdentifier(expr) && is_rune_root(expr.text)) {\n return expr.text;\n }\n\n if (!ts.isPropertyAccessExpression(expr)) {\n return undefined;\n }\n\n const root_name = get_rune_name(expr.expression);\n\n if (!root_name) {\n return undefined;\n }\n\n return `${root_name}.${expr.name.text}`;\n}\n\nfunction is_rune_root(name: string): boolean {\n return (\n name === \"$bindable\" ||\n name === \"$derived\" ||\n name === \"$effect\" ||\n name === \"$host\" ||\n name === \"$inspect\" ||\n name === \"$props\" ||\n name === \"$state\"\n );\n}\n","import { collect_free_identifiers } from \"$/markup/transform/expressions.ts\";\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\nimport {\n collect_yield_star_nodes,\n extract_binding_names,\n find_yield_star_node,\n is_yield_star_expression,\n} from \"./ast.ts\";\nimport { get_state_rune_initializer } from \"./runes.ts\";\nimport { slice, slice_start } from \"./source.ts\";\nimport type {\n EffectBlock,\n LoweredExpression,\n LoweredStatement,\n ScriptLoweringContext,\n TempBinding,\n} from \"./types.ts\";\n\nimport ts from \"typescript\";\n\n/**\n * Delegates a statement to the correct lowerer based on syntax kind.\n *\n * @since 2.0.0\n * @param stmt - Statement to lower.\n * @param content - Original source text.\n * @param context - Lowering services for this transform pass.\n * @returns Lowered statement descriptor.\n */\nexport function lower_statement(\n stmt: ts.Statement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n if (ts.isExpressionStatement(stmt)) {\n return lower_expression_statement(stmt, content, context);\n }\n\n if (ts.isVariableStatement(stmt)) {\n return lower_variable_statement(stmt, content, context);\n }\n\n const text = slice(content, stmt);\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [make_effect_block([text], collect_deps(text))],\n range: { start: stmt.getFullStart(), end: stmt.end },\n };\n}\n\nfunction lower_variable_statement(\n stmt: ts.VariableStatement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n const temps: TempBinding[] = [];\n const type_helpers: string[] = [];\n const rewritten_decls: string[] = [];\n const statements: string[] = [];\n const deps: string[] = [];\n\n const decl_list = stmt.declarationList;\n const kind = (decl_list.flags & ts.NodeFlags.Let) !== 0 ? \"let\" : \"const\";\n let has_bare_yield = false;\n let uses_dispatcher_promise = false;\n\n for (const decl of decl_list.declarations) {\n if (!decl.initializer || !contains_top_level_yield_star(decl.initializer)) {\n if (contains_top_level_yield_star(decl.name)) {\n has_bare_yield = true;\n\n const binding_text = slice(content, decl.name).trim();\n const initializer_text = decl.initializer\n ? slice(content, decl.initializer).trim()\n : \"undefined\";\n const names = extract_binding_names(decl.name);\n const statement = `(${binding_text} = ${initializer_text});`;\n\n temps.push(...names.map((name) => make_unknown_temp(name, context)));\n statements.push(statement);\n deps.push(...collect_deps(statement, names));\n\n continue;\n }\n\n rewritten_decls.push(slice(content, decl).trim());\n continue;\n }\n\n const binding_text = slice(content, decl.name).trim();\n\n if (ts.isIdentifier(decl.name)) {\n const original_name = binding_text;\n\n if (is_yield_star_expression(decl.initializer)) {\n if (kind === \"const\") {\n const awaited = make_awaited_yield_initializer(\n decl.initializer,\n content,\n original_name,\n context,\n );\n\n type_helpers.push(awaited.declaration);\n rewritten_decls.push(`${original_name} = ${awaited.expression}`);\n uses_dispatcher_promise = true;\n continue;\n }\n\n const temp_name = context.next_temp_name(original_name);\n const yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n const type_helper = make_yield_type_helper(\n yield_text,\n original_name,\n context,\n );\n\n if (type_helper) {\n type_helpers.push(type_helper.declaration);\n temps.push({ name: temp_name, type: type_helper.type });\n } else {\n temps.push({ name: temp_name });\n }\n\n has_bare_yield = true;\n rewritten_decls.push(`${original_name} = $derived(${temp_name})`);\n\n statements.push(`${temp_name} = ${yield_text};`);\n deps.push(...collect_deps(yield_text));\n } else {\n const state_rune = get_state_rune_initializer(\n decl.initializer,\n content,\n );\n\n if (state_rune) {\n const direct_yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n const state_type = direct_yield_text === state_rune.value_text\n ? make_yield_type_helper(\n state_rune.value_text,\n original_name,\n context,\n )\n : undefined;\n\n if (state_type) {\n type_helpers.push(state_type.declaration);\n }\n\n has_bare_yield = true;\n rewritten_decls.push(\n `${original_name} = ${\n make_state_placeholder(\n state_rune.rune_name,\n state_type?.type,\n context,\n )\n }`,\n );\n statements.push(`${original_name} = ${state_rune.value_text};`);\n deps.push(...collect_deps(state_rune.value_text));\n continue;\n }\n\n const lowered = lower_expression_yields(\n decl.initializer,\n content,\n original_name,\n context,\n );\n\n temps.push(...lowered.temps);\n type_helpers.push(...(lowered.type_helpers ?? []));\n for (const block of lowered.effect_blocks) {\n statements.push(...block.statements);\n deps.push(...block.deps);\n }\n\n const rewritten_expr = rewrite_state_rune_as_derived(\n lowered.rewritten_expr,\n );\n const final_expr = should_wrap_complex_initializer_as_derived(\n decl.initializer,\n content,\n )\n ? `$derived(${rewritten_expr})`\n : rewritten_expr;\n\n if (final_expr !== rewritten_expr) {\n has_bare_yield = true;\n }\n\n rewritten_decls.push(`${original_name} = ${final_expr}`);\n }\n } else {\n has_bare_yield = true;\n\n const temp_name = context.next_temp_name(\"destructure\");\n const names = extract_binding_names(decl.name);\n const yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n const type_helper = make_yield_type_helper(\n yield_text,\n \"destructure\",\n context,\n );\n\n if (type_helper) {\n type_helpers.push(type_helper.declaration);\n temps.push({ name: temp_name, type: type_helper.type });\n } else {\n temps.push({ name: temp_name });\n }\n\n temps.push(...names.map((name) => make_unknown_temp(name, context)));\n\n statements.push(`${temp_name} = ${yield_text};`);\n statements.push(`(${binding_text} = ${temp_name});`);\n deps.push(...collect_deps(yield_text));\n }\n }\n\n const rewritten_text = rewritten_decls.length === 0\n ? \"\"\n : `${has_bare_yield ? \"let\" : kind} ${rewritten_decls.join(\", \")};`;\n\n return {\n temps,\n type_helpers,\n rewritten_text,\n effect_blocks: statements.length === 0\n ? []\n : [make_effect_block(statements, deps)],\n uses_dispatcher_promise,\n range: { start: stmt.getStart(), end: stmt.end },\n };\n}\n\nfunction lower_expression_statement(\n stmt: ts.ExpressionStatement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n const expr = stmt.expression;\n\n if (!contains_top_level_yield_star(expr)) {\n return {\n temps: [],\n rewritten_text: slice(content, stmt).trim(),\n effect_blocks: [],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n if (is_yield_star_expression(expr)) {\n const text = slice(content, expr).trim();\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [make_effect_block([text + \";\"], collect_deps(text))],\n range: { start: stmt.getFullStart(), end: stmt.end },\n };\n }\n\n if (ts.isBinaryExpression(expr) && is_assignment_operator(expr)) {\n const target = slice(content, expr.left).trim();\n const target_names = collect_assignment_target_names(expr.left);\n\n if (\n expr.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n is_yield_star_expression(expr.right)\n ) {\n const yield_text = extract_yield_star_full_text(expr.right, content);\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [\n make_effect_block(\n [`${target} = ${yield_text};`],\n collect_deps(yield_text, target_names),\n ),\n ],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n const lowered = lower_expression_yields(\n expr.right,\n content,\n make_temp_hint(target),\n context,\n );\n const temp_names = lowered.temps.map((temp) => temp.name);\n const statement = `${target} ${\n slice(content, expr.operatorToken).trim()\n } ${lowered.rewritten_expr};`;\n\n return {\n temps: lowered.temps,\n type_helpers: lowered.type_helpers,\n rewritten_text: \"\",\n effect_blocks: [\n make_effect_block(\n [\n ...lowered.effect_blocks.flatMap((block) => block.statements),\n statement,\n ],\n [\n ...lowered.effect_blocks.flatMap((block) => block.deps),\n ...collect_deps(lowered.rewritten_expr, [\n ...target_names,\n ...temp_names,\n ]),\n ],\n ),\n ],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n const lowered = lower_expression_yields(\n expr,\n content,\n \"call\",\n context,\n );\n\n if (is_top_level_rune_call(expr)) {\n return {\n temps: lowered.temps,\n type_helpers: lowered.type_helpers,\n rewritten_text: lowered.rewritten_expr + \";\",\n effect_blocks: lowered.effect_blocks,\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n const temp_names = lowered.temps.map((temp) => temp.name);\n\n return {\n temps: lowered.temps,\n type_helpers: lowered.type_helpers,\n rewritten_text: \"\",\n effect_blocks: [\n make_effect_block(\n [\n ...lowered.effect_blocks.flatMap((block) => block.statements),\n lowered.rewritten_expr + \";\",\n ],\n [\n ...lowered.effect_blocks.flatMap((block) => block.deps),\n ...collect_deps(lowered.rewritten_expr, temp_names),\n ],\n ),\n ],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n}\n\nfunction lower_expression_yields(\n expr: ts.Expression,\n content: string,\n hint: string,\n context: ScriptLoweringContext,\n): LoweredExpression {\n const replacements: Array<{\n start: number;\n end: number;\n text: string;\n }> = [];\n\n const temps: TempBinding[] = [];\n const type_helpers: string[] = [];\n const statements: string[] = [];\n const deps: string[] = [];\n\n collect_yield_star_nodes(expr, (node) => {\n const temp_name = context.next_temp_name(hint);\n const yield_text = slice_start(content, node).trim();\n const type_helper = make_yield_type_helper(yield_text, hint, context);\n\n if (type_helper) {\n type_helpers.push(type_helper.declaration);\n temps.push({ name: temp_name, type: type_helper.type });\n } else {\n temps.push({ name: temp_name });\n }\n\n statements.push(`${temp_name} = ${yield_text};`);\n deps.push(...collect_deps(yield_text));\n replacements.push({\n start: node.getStart(),\n end: node.end,\n text: temp_name,\n });\n });\n\n if (replacements.length === 0) {\n return {\n temps,\n type_helpers,\n rewritten_expr: slice(content, expr).trim(),\n effect_blocks: [],\n };\n }\n\n replacements.sort((a, b) => b.start - a.start);\n\n let text = slice(content, expr);\n\n const offset_in_expr = expr.getFullStart();\n\n for (const replacement of replacements) {\n text = text.slice(0, replacement.start - offset_in_expr) +\n replacement.text +\n text.slice(replacement.end - offset_in_expr);\n }\n\n return {\n temps,\n type_helpers,\n rewritten_expr: text.trim(),\n effect_blocks: [make_effect_block(statements, deps)],\n };\n}\n\nfunction make_awaited_yield_initializer(\n expr: ts.Expression,\n content: string,\n hint: string,\n context: ScriptLoweringContext,\n): { declaration: string; expression: string } {\n const yield_text = extract_yield_star_full_text(expr, content);\n const helper_name = context.next_helper_name(`effect_${hint}`);\n const helper_id = make_script_effect_id(expr, context);\n const deps = collect_deps(yield_text);\n const deps_text = `[${deps.join(\", \")}]`;\n\n return {\n declaration: `function* ${helper_name}() { return (${yield_text}); }`,\n expression: [\n `await ${context.dispatcher_name}().promise({`,\n `id: ${JSON.stringify(helper_id)}, `,\n `deps: ${deps_text}, `,\n `factory: () => ${helper_name}()`,\n `})`,\n ].join(\"\"),\n };\n}\n\nfunction make_yield_type_helper(\n yield_text: string,\n hint: string,\n context: ScriptLoweringContext,\n): { declaration: string; type: string } | undefined {\n if (!context.emit_types) {\n return undefined;\n }\n\n const helper_name = context.next_type_helper_name(hint);\n const effect_text = strip_yield_star(yield_text);\n\n return {\n declaration: `function ${helper_name}() { return (${effect_text}); }`,\n type:\n `${context.effect_name}.Success<ReturnType<typeof ${helper_name}>> | undefined`,\n };\n}\n\nfunction make_unknown_temp(\n name: string,\n context: ScriptLoweringContext,\n): TempBinding {\n return {\n name,\n type: context.emit_types ? \"unknown\" : undefined,\n };\n}\n\nfunction make_state_placeholder(\n rune_name: string,\n type: string | undefined,\n context: ScriptLoweringContext,\n): string {\n if (type) {\n return `${rune_name}<${type}>(undefined)`;\n }\n\n if (context.emit_types) {\n return `${rune_name}<unknown>(undefined)`;\n }\n\n return `${rune_name}(undefined)`;\n}\n\nfunction strip_yield_star(yield_text: string): string {\n return yield_text.replace(/^yield\\*\\s*/, \"\");\n}\n\nfunction make_script_effect_id(\n expr: ts.Expression,\n context: ScriptLoweringContext,\n): string {\n return `${context.filename}:${expr.getStart()}:${expr.end}`;\n}\n\nfunction rewrite_state_rune_as_derived(expression: string): string {\n const state_call = expression.match(/^\\$state(?:\\.raw)?\\(([\\s\\S]*)\\)$/);\n\n if (!state_call) {\n return expression;\n }\n\n return `$derived(${state_call[1]})`;\n}\n\nfunction should_wrap_complex_initializer_as_derived(\n expr: ts.Expression,\n content: string,\n): boolean {\n const text = slice(content, expr).trim();\n\n return !/^\\$derived(?:\\.by)?\\(/.test(text) &&\n !/^\\$inspect(?:\\.trace)?\\(/.test(text);\n}\n\nfunction is_assignment_operator(expr: ts.BinaryExpression): boolean {\n return expr.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&\n expr.operatorToken.kind <= ts.SyntaxKind.LastAssignment;\n}\n\nfunction is_top_level_rune_call(expr: ts.Expression): boolean {\n if (!ts.isCallExpression(expr)) {\n return false;\n }\n\n const callee = expr.expression;\n\n if (ts.isIdentifier(callee)) {\n return callee.text.startsWith(\"$\");\n }\n\n return ts.isPropertyAccessExpression(callee) &&\n ts.isIdentifier(callee.expression) &&\n callee.expression.text.startsWith(\"$\");\n}\n\nfunction make_temp_hint(target: string): string {\n const match = target.match(/[A-Za-z_$][\\w$]*$/);\n\n return match?.[0] ?? \"assignment\";\n}\n\nfunction extract_yield_star_full_text(\n expr: ts.Expression,\n content: string,\n): string {\n let found: string | undefined;\n\n find_yield_star_node(expr, (node) => {\n found = slice_start(content, node).trim();\n });\n\n return found ?? \"undefined\";\n}\n\nfunction make_effect_block(\n statements: string[],\n deps: string[],\n): EffectBlock {\n return {\n statements,\n deps: [...new Set(deps)],\n };\n}\n\nfunction collect_deps(\n expr_text: string,\n excluded_names: readonly string[] = [],\n): string[] {\n const excluded = new Set(excluded_names);\n\n return collect_free_identifiers(expr_text).filter(\n (identifier) =>\n !identifier.startsWith(\"__SER___\") && !excluded.has(identifier),\n );\n}\n\nfunction collect_assignment_target_names(node: ts.Node): string[] {\n if (ts.isIdentifier(node)) {\n return [node.text];\n }\n\n if (ts.isParenthesizedExpression(node)) {\n return collect_assignment_target_names(node.expression);\n }\n\n if (\n ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)\n ) {\n return collect_assignment_target_names(node.expression);\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n return node.properties.flatMap((property) => {\n if (ts.isShorthandPropertyAssignment(property)) {\n return [property.name.text];\n }\n\n if (ts.isPropertyAssignment(property)) {\n return collect_assignment_target_names(property.initializer);\n }\n\n if (ts.isSpreadAssignment(property)) {\n return collect_assignment_target_names(property.expression);\n }\n\n return [];\n });\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n return node.elements.flatMap((element) =>\n ts.isSpreadElement(element)\n ? collect_assignment_target_names(element.expression)\n : collect_assignment_target_names(element)\n );\n }\n\n return [];\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport {\n collect_top_level_binding_names,\n has_local_import_binding,\n make_imports,\n} from \"./imports.ts\";\nimport { create_source_map, slice } from \"./source.ts\";\nimport { AwaitInEffectWorkError, PreprocessError } from \"$/error.ts\";\nimport { make_runtime_block_with_bindings } from \"./runtime-block.ts\";\nimport { contains_top_level_await } from \"./ast.ts\";\nimport { lower_statement } from \"./lower.ts\";\nimport { validate_rune_yield_usage } from \"./runes.ts\";\nimport type {\n BlockRef,\n EffectBlock,\n RuntimeImportBindings,\n ScriptLoweringContext,\n ScriptTransformResult,\n} from \"./types.ts\";\n\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\nexport type { BlockRef, ScriptTransformResult } from \"./types.ts\";\n\ninterface ScriptTransformOptions {\n emit_types?: boolean;\n}\n\n/**\n * Transforms a `<script effect>` body by extracting top-level `yield*`\n * expressions into `$state` temp bindings and wrapping the lowered\n * assignments in a dependency-tracked `$effect` block.\n *\n * @example\n * ```ts\n * const result = transform_script_effect(\n * `let user = $state(yield* getUser(id));`,\n * \"App.svelte\",\n * );\n * ```\n *\n * @since 2.0.0\n * @param content - The raw `<script effect>` body content.\n * @param filename - The source filename, used in error messages.\n * @param options - Optional transform settings for generated script code.\n * @returns The transformed code and any block references.\n */\nexport function transform_script_effect(\n content: string,\n filename: string,\n options: ScriptTransformOptions = {},\n): ScriptTransformResult {\n let temp_counter = 0;\n\n const source_file = ts.createSourceFile(\n filename,\n content,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n const magic = new MagicString(content);\n const effect_blocks: EffectBlock[] = [];\n const block_refs: BlockRef[] = [];\n const top_level_binding_names = collect_top_level_binding_names(source_file);\n const top_level_binding_names_set = new Set(top_level_binding_names);\n const name_allocator = make_name_allocator(top_level_binding_names);\n const emit_types = options.emit_types ?? true;\n\n let has_effect = false;\n let uses_dispatcher_promise = false;\n let uses_effect_types = false;\n\n /** Phase 1: detect imports already provided by the user. */\n const has_effect_import = has_local_import_binding(\n source_file,\n \"effect\",\n \"Effect\",\n );\n\n const has_dispatcher_import = has_local_import_binding(\n source_file,\n \"svelte-effect-runtime/internal/generators\",\n \"get_dispatcher\",\n );\n\n const has_untrack_import = has_local_import_binding(\n source_file,\n \"svelte\",\n \"untrack\",\n );\n\n const reserve_runtime_import = (name: string) =>\n top_level_binding_names_set.has(name)\n ? name_allocator.reserve(make_generated_name(name, \"\"))\n : name_allocator.reserve(name);\n\n const runtime_bindings: RuntimeImportBindings = {\n cancel: name_allocator.reserve(\"__SER___cancel\"),\n dispatcher: has_dispatcher_import\n ? \"get_dispatcher\"\n : reserve_runtime_import(\"get_dispatcher\"),\n dispatcher_value: name_allocator.reserve(\"__SER___dispatcher\"),\n effect: has_effect_import ? \"Effect\" : reserve_runtime_import(\"Effect\"),\n program: name_allocator.reserve(\"__SER___program\"),\n untrack: has_untrack_import ? \"untrack\" : reserve_runtime_import(\"untrack\"),\n };\n\n const context: ScriptLoweringContext = {\n filename,\n dispatcher_name: runtime_bindings.dispatcher,\n effect_name: runtime_bindings.effect,\n emit_types,\n next_helper_name(hint?: string) {\n return name_allocator.reserve(make_generated_name(hint ?? \"helper\", \"\"));\n },\n next_temp_name(hint?: string) {\n const suffix = temp_counter === 0 ? \"\" : `_${temp_counter}`;\n const name = make_generated_name(hint ?? String(temp_counter), suffix);\n\n temp_counter += 1;\n\n return name_allocator.reserve(name);\n },\n next_type_helper_name(hint?: string) {\n return name_allocator.reserve(\n make_generated_name(`type_${hint ?? \"effect\"}`, \"\"),\n );\n },\n };\n\n /** Phase 2: lower every top-level statement that contains `yield*`. */\n for (const stmt of source_file.statements) {\n validate_rune_yield_usage(stmt, content, filename);\n validate_script_yield_boundaries(stmt, content, filename);\n\n const has_top_level_yield_star = contains_top_level_yield_star(stmt);\n\n if (!has_top_level_yield_star) {\n continue;\n }\n\n if (contains_top_level_await(stmt)) {\n const text = slice(content, stmt);\n throw new AwaitInEffectWorkError(filename, text);\n }\n\n has_effect = true;\n const lowered = lower_statement(stmt, content, context);\n\n magic.overwrite(\n lowered.range.start,\n lowered.range.end,\n lowered.rewritten_text,\n );\n\n if (lowered.temps.length > 0 || lowered.type_helpers?.length) {\n const temp_declarations = lowered.temps.map((temp) =>\n temp.type\n ? `let ${temp.name} = $state<${temp.type}>(undefined);`\n : `let ${temp.name} = $state(undefined);`\n );\n\n const prefix = [\n ...(lowered.type_helpers ?? []),\n ...temp_declarations,\n ].join(\"\\n\");\n\n magic.appendLeft(lowered.range.start, prefix + \"\\n\");\n }\n\n effect_blocks.push(...lowered.effect_blocks);\n uses_dispatcher_promise ||= lowered.uses_dispatcher_promise ?? false;\n uses_effect_types ||= lowered.temps.some((temp) =>\n temp.type?.includes(`${runtime_bindings.effect}.Success`) ?? false\n );\n }\n\n if (!has_effect) {\n block_refs.push({ id: filename, kind: \"script\" });\n\n return { code: content, blocks: block_refs };\n }\n\n /** Phase 3: inject runtime imports after the last user import. */\n const imports = make_imports(\n has_effect_import,\n has_dispatcher_import,\n has_untrack_import,\n runtime_bindings,\n {\n needs_dispatcher: effect_blocks.length > 0 || uses_dispatcher_promise,\n needs_effect: effect_blocks.length > 0 || uses_effect_types,\n needs_untrack: effect_blocks.length > 0,\n },\n );\n\n const last_import = [...source_file.statements]\n .reverse()\n .find(ts.isImportDeclaration);\n\n if (imports) {\n if (last_import) {\n magic.appendRight(last_import.end, \"\\n\" + imports);\n } else {\n magic.prepend(imports + \"\\n\");\n }\n }\n\n /** Phase 4: append the runtime program and lifecycle wiring. */\n if (effect_blocks.length > 0) {\n const runtime_block = make_runtime_block_with_bindings(\n effect_blocks,\n runtime_bindings,\n );\n\n magic.append(\"\\n\" + runtime_block);\n }\n\n block_refs.push({ id: filename, kind: \"script\" });\n\n return {\n code: magic.toString(),\n blocks: block_refs,\n map: create_source_map(magic, filename),\n };\n}\n\nfunction validate_script_yield_boundaries(\n stmt: ts.Statement,\n content: string,\n filename: string,\n): void {\n const bad_member = find_class_member_with_yield_star(stmt);\n\n if (!bad_member) {\n return;\n }\n\n throw new PreprocessError(\n [\n `[ASYNC_EFFECT_IN_CLASS_MEMBER]: ${filename}: yield* cannot be used inside class members.`,\n `Class fields and methods are not component top-level reactive work. Move the Effect work into a script effect statement before assigning it to the class instance.`,\n \"\",\n \"Problematic member:\",\n slice(content, bad_member),\n ].join(\"\\n\"),\n filename,\n );\n}\n\nfunction find_class_member_with_yield_star(\n stmt: ts.Statement,\n): ts.Node | undefined {\n let found: ts.Node | undefined;\n\n function visit(node: ts.Node): void {\n if (found) {\n return;\n }\n\n if (\n ts.isPropertyDeclaration(node) &&\n node.initializer &&\n contains_top_level_yield_star(node.initializer)\n ) {\n found = node;\n return;\n }\n\n node.forEachChild(visit);\n }\n\n visit(stmt);\n\n return found;\n}\n\nfunction make_name_allocator(initial_names: readonly string[]): {\n reserve(name: string): string;\n} {\n const used_names = new Set(initial_names);\n\n return {\n reserve(name: string): string {\n let candidate = name;\n let suffix = 1;\n\n while (used_names.has(candidate)) {\n candidate = `${name}_${suffix}`;\n suffix += 1;\n }\n\n used_names.add(candidate);\n\n return candidate;\n },\n };\n}\n\nfunction make_generated_name(hint: string, suffix: string): string {\n const normalized_hint = hint.replace(/[^A-Za-z0-9_$]/g, \"_\");\n const safe_hint = /^[A-Za-z_$]/.test(normalized_hint)\n ? normalized_hint\n : `temp_${normalized_hint}`;\n\n return `__SER___${safe_hint}${suffix}`;\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as transform_markup_effect } from "./transform-
|
|
2
|
-
import { t as transform_script_effect } from "./preprocess-
|
|
1
|
+
import { t as transform_markup_effect } from "./transform-PXwkylXd.js";
|
|
2
|
+
import { t as transform_script_effect } from "./preprocess-D84Ngmby.js";
|
|
3
3
|
//#region \0rolldown/runtime.js
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __exportAll = (all, no_symbols) => {
|
|
@@ -69,4 +69,4 @@ function has_typescript_lang(attrs) {
|
|
|
69
69
|
//#endregion
|
|
70
70
|
export { transform_svelte_effect as n, transform_exports as t };
|
|
71
71
|
|
|
72
|
-
//# sourceMappingURL=transform-
|
|
72
|
+
//# sourceMappingURL=transform-CHAnW68p.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-
|
|
1
|
+
{"version":3,"file":"transform-CHAnW68p.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/runtime/transform.ts"],"sourcesContent":["import { transform_markup_effect } from \"$/markup/transform.ts\";\nimport { transform_script_effect } from \"$/preprocess.ts\";\n\n/**\n * Result returned by the direct whole-file Svelte transform.\n *\n * @example\n * ```ts\n * const result = transform_svelte_effect(\"<p>{yield* load()}</p>\", \"App.svelte\");\n * result.code;\n * ```\n *\n * @since 2.5.0\n */\nexport interface SvelteTransformResult {\n /** Transformed Svelte source. */\n code: string;\n}\n\n/**\n * Lowers SER syntax in a complete Svelte component without using Svelte's\n * preprocessor adapter API.\n *\n * @example\n * ```ts\n * const result = transform_svelte_effect(\n * \"<script effect>const value = yield* load()</script>\",\n * \"App.svelte\",\n * );\n * ```\n *\n * @since 2.5.0\n * @param content - Full Svelte component source to lower before Svelte parses\n * it.\n * @param filename - Component filename used in generated cache identifiers and\n * diagnostics.\n * @returns The transformed component source.\n */\nexport function transform_svelte_effect(\n content: string,\n filename = \"unknown.svelte\",\n): SvelteTransformResult {\n const script = find_script(content);\n\n let combined = content;\n\n if (script?.has_effect) {\n const result = transform_script_effect(script.text, filename, {\n emit_types: script.is_typescript,\n });\n\n combined = content.slice(0, script.effect_attr_start) +\n content.slice(script.effect_attr_end, script.open_end) +\n result.code +\n content.slice(script.close_start);\n }\n\n const result = transform_markup_effect(combined, filename);\n\n return { code: result.code };\n}\n\nfunction find_script(content: string):\n | {\n text: string;\n open_end: number;\n close_start: number;\n has_effect: boolean;\n effect_attr_start: number;\n effect_attr_end: number;\n is_typescript: boolean;\n }\n | undefined {\n const pattern = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n for (const match of content.matchAll(pattern)) {\n if (match.index === undefined || /\\bmodule\\b/.test(match[1] ?? \"\")) {\n continue;\n }\n\n const attrs = match[1] ?? \"\";\n const effect_match = /\\s+effect(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s>]+))?/\n .exec(attrs);\n const open_end = match.index + match[0].indexOf(\">\") + 1;\n const attr_start = effect_match?.index ?? attrs.length;\n const attr_end = attr_start + (effect_match?.[0].length ?? 0);\n\n return {\n text: match[2],\n open_end,\n close_start: match.index + match[0].lastIndexOf(\"<\"),\n has_effect: effect_match !== null,\n effect_attr_start: match.index + \"<script\".length + attr_start,\n effect_attr_end: match.index + \"<script\".length + attr_end,\n is_typescript: has_typescript_lang(attrs),\n };\n }\n\n return undefined;\n}\n\nfunction has_typescript_lang(attrs: string): boolean {\n const lang_match = /\\blang\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s>]+))/i.exec(\n attrs,\n );\n const lang = (lang_match?.[1] ?? lang_match?.[2] ?? lang_match?.[3] ?? \"\")\n .toLowerCase();\n\n return lang === \"ts\" || lang === \"typescript\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,SAAgB,wBACd,SACA,WAAW,kBACY;CACvB,MAAM,SAAS,YAAY,OAAO;CAElC,IAAI,WAAW;CAEf,IAAI,QAAQ,YAAY;EACtB,MAAM,SAAS,wBAAwB,OAAO,MAAM,UAAU,EAC5D,YAAY,OAAO,cACrB,CAAC;EAED,WAAW,QAAQ,MAAM,GAAG,OAAO,iBAAiB,IAClD,QAAQ,MAAM,OAAO,iBAAiB,OAAO,QAAQ,IACrD,OAAO,OACP,QAAQ,MAAM,OAAO,WAAW;CACpC;CAIA,OAAO,EAAE,MAFM,wBAAwB,UAAU,QAE7B,EAAE,KAAK;AAC7B;AAEA,SAAS,YAAY,SAUP;CAGZ,KAAK,MAAM,SAAS,QAAQ,SAAS,4CAAO,GAAG;EAC7C,IAAI,MAAM,UAAU,KAAA,KAAa,aAAa,KAAK,MAAM,MAAM,EAAE,GAC/D;EAGF,MAAM,QAAQ,MAAM,MAAM;EAC1B,MAAM,eAAe,mDAClB,KAAK,KAAK;EACb,MAAM,WAAW,MAAM,QAAQ,MAAM,GAAG,QAAQ,GAAG,IAAI;EACvD,MAAM,aAAa,cAAc,SAAS,MAAM;EAChD,MAAM,WAAW,cAAc,eAAe,GAAG,UAAU;EAE3D,OAAO;GACL,MAAM,MAAM;GACZ;GACA,aAAa,MAAM,QAAQ,MAAM,GAAG,YAAY,GAAG;GACnD,YAAY,iBAAiB;GAC7B,mBAAmB,MAAM,QAAQ,IAAmB;GACpD,iBAAiB,MAAM,QAAQ,IAAmB;GAClD,eAAe,oBAAoB,KAAK;EAC1C;CACF;AAGF;AAEA,SAAS,oBAAoB,OAAwB;CACnD,MAAM,aAAa,kDAAkD,KACnE,KACF;CACA,MAAM,QAAQ,aAAa,MAAM,aAAa,MAAM,aAAa,MAAM,IACpE,YAAY;CAEf,OAAO,SAAS,QAAQ,SAAS;AACnC"}
|
|
@@ -11,6 +11,8 @@ import ts from "typescript";
|
|
|
11
11
|
* @param has_dispatcher_import - Whether the user already imports
|
|
12
12
|
* `get_dispatcher`.
|
|
13
13
|
* @param has_untrack_import - Whether the user already imports `untrack`.
|
|
14
|
+
* @param bindings - Local names reserved for generated runtime helpers.
|
|
15
|
+
* @param options - Runtime helper imports required by this transformed script.
|
|
14
16
|
* @returns Newline-separated import statements to inject.
|
|
15
17
|
*/
|
|
16
18
|
function make_imports(has_effect_import, has_dispatcher_import, has_untrack_import, bindings = {
|
|
@@ -20,14 +22,17 @@ function make_imports(has_effect_import, has_dispatcher_import, has_untrack_impo
|
|
|
20
22
|
effect: "Effect",
|
|
21
23
|
program: "__SER___program",
|
|
22
24
|
untrack: "untrack"
|
|
23
|
-
}) {
|
|
25
|
+
}, options = {}) {
|
|
26
|
+
const needs_dispatcher = options.needs_dispatcher ?? true;
|
|
27
|
+
const needs_effect = options.needs_effect ?? true;
|
|
28
|
+
const needs_untrack = options.needs_untrack ?? true;
|
|
24
29
|
const dispatcher_import = bindings.dispatcher === "get_dispatcher" ? `import { get_dispatcher } from "svelte-effect-runtime/internal/generators";` : `import { get_dispatcher as ${bindings.dispatcher} } from "svelte-effect-runtime/internal/generators";`;
|
|
25
30
|
const untrack_import = bindings.untrack === "untrack" ? `import { untrack } from "svelte";` : `import { untrack as ${bindings.untrack} } from "svelte";`;
|
|
26
31
|
const effect_import = has_effect_import ? false : bindings.effect === "Effect" ? `import { Effect } from "effect";` : `import { Effect as ${bindings.effect} } from "effect";`;
|
|
27
32
|
return [
|
|
28
|
-
!has_dispatcher_import && dispatcher_import,
|
|
29
|
-
!has_untrack_import && untrack_import,
|
|
30
|
-
effect_import
|
|
33
|
+
needs_dispatcher && !has_dispatcher_import && dispatcher_import,
|
|
34
|
+
needs_untrack && !has_untrack_import && untrack_import,
|
|
35
|
+
needs_effect && effect_import
|
|
31
36
|
].filter(Boolean).join("\n");
|
|
32
37
|
}
|
|
33
38
|
/**
|
|
@@ -1671,4 +1676,4 @@ function transform_markup_effect(content, filename) {
|
|
|
1671
1676
|
//#endregion
|
|
1672
1677
|
export { find_yield_star_node as a, AsyncEffectInSyncRuneError as c, collect_top_level_binding_names as d, has_local_import_binding as f, extract_binding_names as i, AwaitInEffectWorkError as l, collect_yield_star_nodes as n, is_yield_star_expression as o, make_imports as p, contains_top_level_await as r, collect_free_identifiers as s, transform_markup_effect as t, PreprocessError as u };
|
|
1673
1678
|
|
|
1674
|
-
//# sourceMappingURL=transform-
|
|
1679
|
+
//# sourceMappingURL=transform-PXwkylXd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform-PXwkylXd.js","names":["is_yield_star_expression"],"sources":["../../../modules/svelte-effect-runtime/src/preprocess/imports.ts","../../../modules/svelte-effect-runtime/src/markup/transform/constants.ts","../../../modules/svelte-effect-runtime/src/markup/transform/apply.ts","../../../modules/svelte-effect-runtime/src/markup/transform/classify.ts","../../../modules/svelte-effect-runtime/src/markup/transform/effect-bindings.ts","../../../modules/svelte-effect-runtime/src/error.ts","../../../modules/svelte-effect-runtime/src/markup/transform/expressions.ts","../../../modules/svelte-effect-runtime/src/markup/transform/effect-callbacks.ts","../../../modules/svelte-effect-runtime/src/markup/transform/emit.ts","../../../modules/svelte-effect-runtime/src/preprocess/ast.ts","../../../modules/svelte-effect-runtime/src/markup/transform/scan.ts","../../../modules/svelte-effect-runtime/src/markup/transform/index.ts"],"sourcesContent":["import type { RuntimeImportBindings } from \"./types.ts\";\n\nimport ts from \"typescript\";\n\ninterface RuntimeImportOptions {\n needs_dispatcher?: boolean;\n needs_effect?: boolean;\n needs_untrack?: boolean;\n}\n\n/**\n * Builds the import statements injected by the script preprocessor.\n *\n * @since 2.0.0\n * @param has_effect_import - Whether the user already imports `Effect`.\n * @param has_dispatcher_import - Whether the user already imports\n * `get_dispatcher`.\n * @param has_untrack_import - Whether the user already imports `untrack`.\n * @param bindings - Local names reserved for generated runtime helpers.\n * @param options - Runtime helper imports required by this transformed script.\n * @returns Newline-separated import statements to inject.\n */\nexport function make_imports(\n has_effect_import: boolean,\n has_dispatcher_import: boolean,\n has_untrack_import: boolean,\n bindings: RuntimeImportBindings = {\n cancel: \"__SER___cancel\",\n dispatcher: \"get_dispatcher\",\n dispatcher_value: \"__SER___dispatcher\",\n effect: \"Effect\",\n program: \"__SER___program\",\n untrack: \"untrack\",\n },\n options: RuntimeImportOptions = {},\n): string {\n const needs_dispatcher = options.needs_dispatcher ?? true;\n const needs_effect = options.needs_effect ?? true;\n const needs_untrack = options.needs_untrack ?? true;\n\n const dispatcher_import = bindings.dispatcher === \"get_dispatcher\"\n ? `import { get_dispatcher } from \"svelte-effect-runtime/internal/generators\";`\n : `import { get_dispatcher as ${bindings.dispatcher} } from \"svelte-effect-runtime/internal/generators\";`;\n\n const untrack_import = bindings.untrack === \"untrack\"\n ? `import { untrack } from \"svelte\";`\n : `import { untrack as ${bindings.untrack} } from \"svelte\";`;\n\n const effect_import = has_effect_import\n ? false\n : bindings.effect === \"Effect\"\n ? `import { Effect } from \"effect\";`\n : `import { Effect as ${bindings.effect} } from \"effect\";`;\n\n return [\n needs_dispatcher && !has_dispatcher_import && dispatcher_import,\n needs_untrack && !has_untrack_import && untrack_import,\n needs_effect && effect_import,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\n/**\n * Checks whether a source file imports a local binding from a module.\n *\n * @since 2.0.0\n * @param source_file - Parsed TypeScript source file to inspect.\n * @param module_name - Module specifier to match.\n * @param local_name - Local binding name to look for.\n * @returns Whether that binding is already locally available.\n */\nexport function has_local_import_binding(\n source_file: ts.SourceFile,\n module_name: string,\n local_name: string,\n): boolean {\n return source_file.statements.some((stmt) => {\n if (\n !ts.isImportDeclaration(stmt) ||\n !ts.isStringLiteral(stmt.moduleSpecifier) ||\n stmt.moduleSpecifier.text !== module_name\n ) {\n return false;\n }\n\n const clause = stmt.importClause;\n\n if (!clause || clause.isTypeOnly) {\n return false;\n }\n\n if (clause.name?.text === local_name) {\n return true;\n }\n\n const named_bindings = clause.namedBindings;\n\n if (!named_bindings) {\n return false;\n }\n\n if (ts.isNamespaceImport(named_bindings)) {\n return named_bindings.name.text === local_name;\n }\n\n return named_bindings.elements.some(\n (element) => !element.isTypeOnly && element.name.text === local_name,\n );\n });\n}\n\n/**\n * Checks whether a source file already has any top-level binding with a local\n * name.\n *\n * @since 2.4.2\n * @param source_file - Parsed TypeScript source file to inspect.\n * @param local_name - Local binding name to look for.\n * @returns Whether that local name is already declared in the file.\n */\nexport function has_top_level_binding(\n source_file: ts.SourceFile,\n local_name: string,\n): boolean {\n return collect_top_level_binding_names(source_file).includes(local_name);\n}\n\n/**\n * Collects every local binding declared at module top level.\n *\n * @since 2.4.2\n * @param source_file - Parsed TypeScript source file to inspect.\n * @returns Top-level names declared by imports, declarations, and variables.\n */\nexport function collect_top_level_binding_names(\n source_file: ts.SourceFile,\n): string[] {\n return source_file.statements.flatMap(collect_statement_binding_names);\n}\n\nfunction collect_statement_binding_names(stmt: ts.Statement): string[] {\n if (ts.isImportDeclaration(stmt)) {\n return collect_import_binding_names(stmt);\n }\n\n if (ts.isVariableStatement(stmt)) {\n return stmt.declarationList.declarations.flatMap((decl) =>\n collect_binding_name_text(decl.name)\n );\n }\n\n if (\n ts.isFunctionDeclaration(stmt) ||\n ts.isClassDeclaration(stmt) ||\n ts.isInterfaceDeclaration(stmt) ||\n ts.isTypeAliasDeclaration(stmt) ||\n ts.isEnumDeclaration(stmt) ||\n ts.isModuleDeclaration(stmt)\n ) {\n return stmt.name ? [stmt.name.text] : [];\n }\n\n return [];\n}\n\nfunction collect_import_binding_names(stmt: ts.ImportDeclaration): string[] {\n const clause = stmt.importClause;\n\n if (!clause) {\n return [];\n }\n\n return [\n clause.name?.text,\n clause.namedBindings && ts.isNamespaceImport(clause.namedBindings)\n ? clause.namedBindings.name.text\n : undefined,\n clause.namedBindings && ts.isNamedImports(clause.namedBindings)\n ? clause.namedBindings.elements.map((element) => element.name.text)\n : undefined,\n ].flat().filter((name): name is string => name !== undefined);\n}\n\nfunction collect_binding_name_text(name: ts.BindingName): string[] {\n if (ts.isIdentifier(name)) {\n return [name.text];\n }\n\n return name.elements.flatMap((element) => {\n if (ts.isOmittedExpression(element)) {\n return [];\n }\n\n return collect_binding_name_text(element.name);\n });\n}\n","export const HELPERS = {\n value: \"__SER___markup_value\",\n promise: \"__SER___markup_promise\",\n run: \"__SER___markup_run\",\n} as const;\n","import type MagicString from \"magic-string\";\n\nimport { collect_top_level_binding_names } from \"$/preprocess/imports.ts\";\nimport { HELPERS } from \"./constants.ts\";\nimport type {\n HelperDeclaration,\n Insertion,\n MarkupHelperBindings,\n MarkupRelocation,\n PendingRelocation,\n Replacement,\n} from \"./types.ts\";\nimport ts from \"typescript\";\n\nexport function create_source_map(\n magic: MagicString,\n filename: string,\n): Record<string, unknown> {\n const map = magic.generateMap({\n hires: true,\n includeContent: true,\n source: filename,\n });\n\n return map as unknown as Record<string, unknown>;\n}\n\nexport function blank_script_blocks(content: string): string {\n return content.replace(\n /<script\\b[^>]*>[\\s\\S]*?<\\/script\\s*>/gi,\n (match) => {\n const lines = match.split(\"\\n\");\n return lines.map((l) => \" \".repeat(l.length)).join(\"\\n\");\n },\n );\n}\n\nexport function inject_helpers(\n magic: MagicString,\n content: string,\n helpers: HelperDeclaration[] = [],\n bindings: MarkupHelperBindings = HELPERS,\n): Insertion | undefined {\n const import_helpers = unique_import_helpers(helpers);\n const local_helpers = helpers.filter((helper) => !is_import_helper(helper));\n\n const helper_segments: Array<{\n text: string;\n relocation?: PendingRelocation;\n }> = [\n `import { value as ${bindings.value} } from \"svelte-effect-runtime/internal/generators\";`,\n `import { promise as ${bindings.promise} } from \"svelte-effect-runtime/internal/generators\";`,\n `import { run as ${bindings.run} } from \"svelte-effect-runtime/internal/generators\";`,\n ...import_helpers,\n ...local_helpers,\n ].map((helper) => typeof helper === \"string\" ? { text: helper } : helper);\n\n const helper_block = helper_segments.map((segment) => segment.text).join(\n \"\\n\",\n );\n\n const script_tag = find_instance_script_tag(content);\n\n if (script_tag) {\n const text = `\\n${helper_block}\\n`;\n\n magic.appendLeft(script_tag.end, text);\n\n return {\n start: script_tag.end,\n text,\n relocations: make_insertion_relocations(helper_segments, \"\\n\"),\n };\n } else {\n const text = `<script>\\n${helper_block}\\n</script>\\n\\n`;\n\n magic.prepend(text);\n\n return {\n start: 0,\n text,\n relocations: make_insertion_relocations(helper_segments, \"<script>\\n\"),\n };\n }\n}\n\nexport function make_markup_helper_bindings(\n content: string,\n): {\n bindings: MarkupHelperBindings;\n name_allocator: { reserve(name: string): string };\n} {\n const script_tag = find_instance_script_tag(content);\n const binding_names = script_tag\n ? collect_script_binding_names(\n content.slice(script_tag.start, script_tag.end),\n )\n : [];\n const name_allocator = make_name_allocator(binding_names);\n\n return {\n bindings: {\n value: name_allocator.reserve(HELPERS.value),\n promise: name_allocator.reserve(HELPERS.promise),\n run: name_allocator.reserve(HELPERS.run),\n },\n name_allocator,\n };\n}\n\nexport function create_relocations(\n replacements: Replacement[],\n helper_insertion: Insertion | undefined,\n): MarkupRelocation[] {\n const edits = [\n helper_insertion && {\n start: helper_insertion.start,\n removedLength: 0,\n insertedLength: helper_insertion.text.length,\n },\n ...replacements.map((replacement) => ({\n start: replacement.start,\n removedLength: replacement.end - replacement.start,\n insertedLength: replacement.text.length,\n })),\n ].filter(Boolean) as Array<{\n start: number;\n removedLength: number;\n insertedLength: number;\n }>;\n\n const replacement_relocations = replacements.flatMap((replacement) => {\n if (!replacement.relocation) {\n return [];\n }\n\n const delta_before = edits\n .filter((edit) => edit.start < replacement.start)\n .reduce(\n (total, edit) => total + edit.insertedLength - edit.removedLength,\n 0,\n );\n const generated_start = replacement.start + delta_before;\n\n return [{\n originalStart: replacement.relocation.originalStart,\n originalEnd: replacement.relocation.originalEnd,\n generatedStart: generated_start +\n replacement.relocation.generatedStartInReplacement,\n generatedEnd: generated_start +\n replacement.relocation.generatedEndInReplacement,\n }];\n });\n\n const helper_relocations = helper_insertion?.relocations?.map(\n (relocation) => ({\n originalStart: relocation.originalStart,\n originalEnd: relocation.originalEnd,\n generatedStart: helper_insertion.start +\n relocation.generatedStartInReplacement,\n generatedEnd: helper_insertion.start +\n relocation.generatedEndInReplacement,\n }),\n ) ?? [];\n\n return [\n ...replacement_relocations,\n ...helper_relocations,\n ];\n}\n\nfunction make_insertion_relocations(\n segments: Array<{\n text: string;\n relocation?: PendingRelocation;\n }>,\n prefix: string,\n): PendingRelocation[] {\n const relocations: PendingRelocation[] = [];\n let offset = prefix.length;\n\n for (const segment of segments) {\n if (segment.relocation) {\n relocations.push({\n originalStart: segment.relocation.originalStart,\n originalEnd: segment.relocation.originalEnd,\n generatedStartInReplacement: offset +\n segment.relocation.generatedStartInReplacement,\n generatedEndInReplacement: offset +\n segment.relocation.generatedEndInReplacement,\n });\n }\n\n offset += segment.text.length + 1;\n }\n\n return relocations;\n}\n\nfunction find_instance_script_tag(\n content: string,\n): { start: number; end: number } | undefined {\n const pattern = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n for (const match of content.matchAll(pattern)) {\n if (match.index === undefined) continue;\n\n const attrs = match[1] ?? \"\";\n if (\n /\\bcontext\\s*=\\s*[\"']module[\"']/.test(attrs) ||\n /\\bmodule\\b/.test(attrs)\n ) {\n continue;\n }\n\n const open_end = match[0].indexOf(\">\") + 1;\n return {\n start: match.index + open_end,\n end: match.index + match[0].length - \"</script>\".length,\n };\n }\n\n return undefined;\n}\n\nfunction unique_import_helpers(\n helpers: HelperDeclaration[],\n): HelperDeclaration[] {\n const seen = new Set<string>();\n\n return helpers.filter((helper) => {\n if (!is_import_helper(helper)) {\n return false;\n }\n\n if (seen.has(helper.text)) {\n return false;\n }\n\n seen.add(helper.text);\n\n return true;\n });\n}\n\nfunction is_import_helper(helper: HelperDeclaration): boolean {\n return helper.text.trimStart().startsWith(\"import \");\n}\n\nfunction collect_script_binding_names(script_content: string): string[] {\n const source_file = ts.createSourceFile(\n \"markup-script.ts\",\n script_content,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n return collect_top_level_binding_names(source_file);\n}\n\nfunction make_name_allocator(initial_names: readonly string[]): {\n reserve(name: string): string;\n} {\n const used_names = new Set(initial_names);\n\n return {\n reserve(name: string): string {\n let candidate = name;\n let suffix = 1;\n\n while (used_names.has(candidate)) {\n candidate = `${name}_${suffix}`;\n suffix += 1;\n }\n\n used_names.add(candidate);\n\n return candidate;\n },\n };\n}\n","import type { AST } from \"svelte/compiler\";\n\nimport type { MarkupCandidate, TagKind } from \"./types.ts\";\n\n/**\n * Matches sanitized placeholders back to their Svelte AST context.\n *\n * @since 2.0.0\n * @param ast - Parsed Svelte AST for the sanitized component markup.\n * @param candidates - Placeholder candidates produced by the scanner.\n * @returns Candidates paired with the markup context that determines how they\n * should be emitted.\n */\nexport function classify_candidates(\n ast: AST.Root,\n candidates: MarkupCandidate[],\n): Array<{ candidate: MarkupCandidate; kind: TagKind }> {\n const by_placeholder = new Map(\n candidates.map((candidate) => [candidate.placeholder, candidate]),\n );\n\n const classified: Array<{ candidate: MarkupCandidate; kind: TagKind }> = [];\n const matched = new Set<string>();\n\n walk_ast(ast.fragment, by_placeholder, matched, classified);\n\n return classified;\n}\n\nfunction walk_ast(\n fragment: AST.Fragment,\n candidates: Map<string, MarkupCandidate>,\n matched: Set<string>,\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n for (const node of fragment.nodes) {\n visit_ast_node(node, candidates, matched, classified);\n }\n}\n\nfunction visit_ast_node(\n node: AST.Fragment[\"nodes\"][number],\n candidates: Map<string, MarkupCandidate>,\n matched: Set<string>,\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n switch (node.type) {\n case \"ExpressionTag\":\n classify_expression(\n node.expression,\n \"plain\",\n candidates,\n matched,\n classified,\n );\n return;\n\n case \"IfBlock\":\n classify_expression(node.test, \"plain\", candidates, matched, classified);\n walk_ast(node.consequent, candidates, matched, classified);\n if (node.alternate) {\n walk_ast(node.alternate, candidates, matched, classified);\n }\n return;\n\n case \"EachBlock\":\n classify_expression(\n node.expression,\n \"each\",\n candidates,\n matched,\n classified,\n );\n walk_ast(node.body, candidates, matched, classified);\n if (node.fallback) {\n walk_ast(node.fallback, candidates, matched, classified);\n }\n return;\n\n case \"AwaitBlock\":\n classify_expression(\n node.expression,\n \"await\",\n candidates,\n matched,\n classified,\n );\n if (node.pending) {\n walk_ast(node.pending, candidates, matched, classified);\n }\n if (node.then) walk_ast(node.then, candidates, matched, classified);\n if (node.catch) walk_ast(node.catch, candidates, matched, classified);\n return;\n\n case \"RenderTag\":\n classify_expression(\n node.expression,\n \"render\",\n candidates,\n matched,\n classified,\n );\n return;\n\n case \"HtmlTag\":\n classify_expression(\n node.expression,\n \"plain\",\n candidates,\n matched,\n classified,\n );\n return;\n\n case \"DebugTag\":\n classify_debug_tag(node, candidates, matched, classified);\n return;\n\n case \"ConstTag\":\n case \"DeclarationTag\":\n classify_declaration_tag(node, candidates, matched, classified);\n return;\n\n case \"KeyBlock\":\n classify_expression(\n node.expression,\n \"plain\",\n candidates,\n matched,\n classified,\n );\n walk_ast(node.fragment, candidates, matched, classified);\n return;\n\n case \"RegularElement\":\n case \"Component\":\n case \"TitleElement\":\n case \"SlotElement\":\n case \"SvelteBody\":\n case \"SvelteBoundary\":\n case \"SvelteComponent\":\n case \"SvelteDocument\":\n case \"SvelteElement\":\n case \"SvelteFragment\":\n case \"SvelteHead\":\n case \"SvelteSelf\":\n case \"SvelteWindow\":\n visit_element_attributes(node, candidates, matched, classified);\n walk_ast(node.fragment, candidates, matched, classified);\n return;\n\n default:\n return;\n }\n}\n\nfunction classify_debug_tag(\n _node: Extract<AST.Fragment[\"nodes\"][number], { type: \"DebugTag\" }>,\n _candidates: Map<string, MarkupCandidate>,\n _matched: Set<string>,\n _classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n return;\n}\n\nfunction classify_declaration_tag(\n node: Extract<\n AST.Fragment[\"nodes\"][number],\n { type: \"ConstTag\" | \"DeclarationTag\" }\n >,\n candidates: Map<string, MarkupCandidate>,\n matched: Set<string>,\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n for (const decl of node.declaration.declarations) {\n if (!decl.init) {\n continue;\n }\n\n classify_expression(decl.init, \"plain\", candidates, matched, classified);\n }\n}\n\ninterface ElementLikeNode {\n attributes: Array<{\n type: string;\n name?: string;\n value?: unknown;\n expression?: unknown;\n }>;\n fragment: AST.Fragment;\n}\n\nfunction visit_element_attributes(\n node: ElementLikeNode,\n candidates: Map<string, MarkupCandidate>,\n matched: Set<string>,\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n for (const attr of node.attributes) {\n if (\n attr.type === \"Attribute\" &&\n attr.name &&\n is_event_attribute_name(attr.name)\n ) {\n visit_attribute_value(\n attr.value as\n | true\n | AST.ExpressionTag\n | Array<AST.Text | AST.ExpressionTag>,\n \"event\",\n candidates,\n matched,\n classified,\n );\n continue;\n }\n\n if (attr.type === \"OnDirective\" && attr.expression) {\n classify_expression(\n attr.expression as ExpressionLike,\n \"event\",\n candidates,\n matched,\n classified,\n );\n continue;\n }\n }\n}\n\nfunction is_event_attribute_name(name: string): boolean {\n return name.startsWith(\"on:\") || /^on[a-z]/.test(name);\n}\n\nfunction visit_attribute_value(\n value: true | AST.ExpressionTag | Array<AST.Text | AST.ExpressionTag>,\n kind: TagKind,\n candidates: Map<string, MarkupCandidate>,\n matched: Set<string>,\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n if (value === true) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const part of value) {\n if (part.type === \"ExpressionTag\") {\n classify_expression(\n part.expression,\n kind,\n candidates,\n matched,\n classified,\n );\n }\n }\n return;\n }\n\n classify_expression(\n value.expression,\n kind,\n candidates,\n matched,\n classified,\n );\n}\n\ntype ExpressionLike = {\n type: string;\n name?: string;\n callee?: { type: string; name?: string };\n};\n\nfunction classify_expression(\n expression: ExpressionLike | null | undefined,\n kind: TagKind,\n candidates: Map<string, MarkupCandidate>,\n matched: Set<string>,\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n if (!expression) {\n return;\n }\n\n const found_candidates = find_candidates(expression, candidates);\n\n for (const candidate of found_candidates) {\n if (matched.has(candidate.placeholder)) {\n continue;\n }\n\n matched.add(candidate.placeholder);\n classified.push({\n candidate,\n kind: resolve_candidate_kind(candidate, kind),\n });\n }\n}\n\nfunction resolve_candidate_kind(\n candidate: MarkupCandidate,\n context_kind: TagKind,\n): TagKind {\n if (candidate.key === \"render_argument\") {\n return \"render_argument\";\n }\n\n return context_kind;\n}\n\nfunction find_candidates(\n expression: ExpressionLike,\n candidates: Map<string, MarkupCandidate>,\n): MarkupCandidate[] {\n const found: MarkupCandidate[] = [];\n const seen_nodes = new Set<unknown>();\n const seen_placeholders = new Set<string>();\n\n visit_expression_value(\n expression,\n candidates,\n seen_nodes,\n seen_placeholders,\n found,\n );\n\n return found;\n}\n\nfunction visit_expression_value(\n value: unknown,\n candidates: Map<string, MarkupCandidate>,\n seen_nodes: Set<unknown>,\n seen_placeholders: Set<string>,\n found: MarkupCandidate[],\n): void {\n if (Array.isArray(value)) {\n for (const item of value) {\n visit_expression_value(\n item,\n candidates,\n seen_nodes,\n seen_placeholders,\n found,\n );\n }\n\n return;\n }\n\n if (!is_record(value) || seen_nodes.has(value)) {\n return;\n }\n\n seen_nodes.add(value);\n\n if (value.type === \"Identifier\" && typeof value.name === \"string\") {\n const candidate = candidates.get(value.name);\n\n if (candidate && !seen_placeholders.has(candidate.placeholder)) {\n seen_placeholders.add(candidate.placeholder);\n found.push(candidate);\n }\n }\n\n for (const child of Object.values(value)) {\n visit_expression_value(\n child,\n candidates,\n seen_nodes,\n seen_placeholders,\n found,\n );\n }\n}\n\nfunction is_record(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n","import type { HelperDeclaration } from \"./types.ts\";\n\nimport ts from \"typescript\";\n\nconst EFFECT_PACKAGE_MODULE = \"effect\";\nconst EFFECT_DIRECT_MODULE = \"effect/Effect\";\nconst GENERATED_EFFECT_NAME = \"__SER___Effect\";\n\n/**\n * Describes local bindings that resolve to Effect APIs in markup expressions.\n *\n * @example\n * ```ts\n * const context = collect_effect_callback_bindings(source);\n * context.effect_object_names.has(\"E\");\n * ```\n *\n * @since 2.4.0\n */\nexport interface EffectCallbackRewriteContext {\n /** Local names imported as the Effect object, such as `Effect` or `E`. */\n effect_object_names: ReadonlySet<string>;\n /** Namespace names imported from `effect/Effect`, such as `E.flatMap`. */\n effect_module_names: ReadonlySet<string>;\n /** Package namespace names imported from `effect`, such as `Fx.Effect`. */\n effect_package_names: ReadonlySet<string>;\n /** Direct `effect/Effect` imports mapped from local name to exported name. */\n direct_members: ReadonlyMap<string, string>;\n /** Expression used for generated `gen`, `sync`, and upgraded direct calls. */\n wrapper_expression: string;\n /** Import inserted when generated code needs a fresh Effect binding. */\n wrapper_import: HelperDeclaration | undefined;\n}\n\ninterface EffectBindingState {\n effect_object_names: string[];\n effect_module_names: string[];\n effect_package_names: string[];\n direct_members: Map<string, string>;\n local_names: Set<string>;\n implicit_effect_import: boolean;\n}\n\n/**\n * Collects Effect import bindings that markup callback rewriting can trust.\n *\n * @example\n * ```ts\n * const bindings = collect_effect_callback_bindings(\n * `<script>import { Effect as E } from \"effect\";</script>`,\n * );\n * ```\n *\n * @since 2.4.0\n * @param content - Full Svelte component source before markup lowering.\n * @returns Binding metadata used to identify Effect callback combinators.\n */\nexport function collect_effect_callback_bindings(\n content: string,\n): EffectCallbackRewriteContext {\n const state = make_effect_binding_state();\n const scripts = collect_script_blocks(content);\n\n for (const script of scripts) {\n const source_file = ts.createSourceFile(\n \"component-script.ts\",\n script,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n collect_source_file_bindings(source_file, state);\n }\n\n ensure_implicit_effect_binding(state);\n\n const wrapper = choose_effect_wrapper(state);\n\n return {\n effect_object_names: new Set(state.effect_object_names),\n effect_module_names: new Set(state.effect_module_names),\n effect_package_names: new Set(state.effect_package_names),\n direct_members: new Map(state.direct_members),\n wrapper_expression: wrapper.expression,\n wrapper_import: wrapper.import_text\n ? { text: wrapper.import_text }\n : undefined,\n };\n}\n\nfunction make_effect_binding_state(): EffectBindingState {\n return {\n effect_object_names: [],\n effect_module_names: [],\n effect_package_names: [],\n direct_members: new Map(),\n local_names: new Set(),\n implicit_effect_import: false,\n };\n}\n\nfunction collect_script_blocks(content: string): string[] {\n const pattern = /<script\\b[^>]*>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n return [...content.matchAll(pattern)].map((match) => match[1] ?? \"\");\n}\n\nfunction collect_source_file_bindings(\n source_file: ts.SourceFile,\n state: EffectBindingState,\n): void {\n for (const statement of source_file.statements) {\n collect_statement_binding(statement, state);\n }\n}\n\nfunction collect_statement_binding(\n statement: ts.Statement,\n state: EffectBindingState,\n): void {\n if (ts.isImportDeclaration(statement)) {\n collect_import_binding(statement, state);\n return;\n }\n\n if (ts.isImportEqualsDeclaration(statement)) {\n state.local_names.add(statement.name.text);\n return;\n }\n\n if (ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) {\n collect_binding_name(declaration.name, state.local_names);\n }\n\n return;\n }\n\n if (\n ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement) ||\n ts.isEnumDeclaration(statement) ||\n ts.isModuleDeclaration(statement)\n ) {\n if (statement.name) {\n state.local_names.add(statement.name.text);\n }\n }\n}\n\nfunction collect_import_binding(\n statement: ts.ImportDeclaration,\n state: EffectBindingState,\n): void {\n if (!ts.isStringLiteral(statement.moduleSpecifier)) {\n return;\n }\n\n const module_name = statement.moduleSpecifier.text;\n const clause = statement.importClause;\n\n if (!clause) {\n return;\n }\n\n if (clause.name) {\n state.local_names.add(clause.name.text);\n }\n\n const named_bindings = clause.namedBindings;\n\n if (!named_bindings) {\n return;\n }\n\n if (ts.isNamespaceImport(named_bindings)) {\n collect_namespace_import_binding(\n module_name,\n named_bindings.name.text,\n state,\n );\n return;\n }\n\n for (const element of named_bindings.elements) {\n collect_named_import_binding(module_name, element, state);\n }\n}\n\nfunction collect_namespace_import_binding(\n module_name: string,\n local_name: string,\n state: EffectBindingState,\n): void {\n state.local_names.add(local_name);\n\n if (module_name === EFFECT_DIRECT_MODULE) {\n add_ordered_name(state.effect_module_names, local_name);\n return;\n }\n\n if (module_name === EFFECT_PACKAGE_MODULE) {\n add_ordered_name(state.effect_package_names, local_name);\n }\n}\n\nfunction collect_named_import_binding(\n module_name: string,\n element: ts.ImportSpecifier,\n state: EffectBindingState,\n): void {\n const imported_name = element.propertyName?.text ?? element.name.text;\n const local_name = element.name.text;\n\n state.local_names.add(local_name);\n\n if (module_name === EFFECT_PACKAGE_MODULE && imported_name === \"Effect\") {\n add_ordered_name(state.effect_object_names, local_name);\n return;\n }\n\n if (module_name === EFFECT_DIRECT_MODULE) {\n state.direct_members.set(local_name, imported_name);\n }\n}\n\nfunction collect_binding_name(\n name: ts.BindingName,\n local_names: Set<string>,\n): void {\n if (ts.isIdentifier(name)) {\n local_names.add(name.text);\n return;\n }\n\n for (const element of name.elements) {\n if (ts.isOmittedExpression(element)) {\n continue;\n }\n\n collect_binding_name(element.name, local_names);\n }\n}\n\nfunction ensure_implicit_effect_binding(state: EffectBindingState): void {\n if (has_effect_binding(state) || state.local_names.has(\"Effect\")) {\n return;\n }\n\n add_ordered_name(state.effect_object_names, \"Effect\");\n state.implicit_effect_import = true;\n}\n\nfunction has_effect_binding(state: EffectBindingState): boolean {\n return state.effect_object_names.length > 0 ||\n state.effect_module_names.length > 0 ||\n state.effect_package_names.length > 0 ||\n state.direct_members.size > 0;\n}\n\nfunction choose_effect_wrapper(\n state: EffectBindingState,\n): { expression: string; import_text?: string } {\n const effect_object = state.effect_object_names[0];\n\n if (effect_object) {\n return {\n expression: effect_object,\n import_text: state.implicit_effect_import\n ? `import { Effect } from \"effect\";`\n : undefined,\n };\n }\n\n const effect_module = state.effect_module_names[0];\n\n if (effect_module) {\n return { expression: effect_module };\n }\n\n const effect_package = state.effect_package_names[0];\n\n if (effect_package) {\n return { expression: `${effect_package}.Effect` };\n }\n\n const generated_name = make_generated_effect_name(state.local_names);\n\n return {\n expression: generated_name,\n import_text: `import { Effect as ${generated_name} } from \"effect\";`,\n };\n}\n\nfunction make_generated_effect_name(local_names: ReadonlySet<string>): string {\n if (!local_names.has(GENERATED_EFFECT_NAME)) {\n return GENERATED_EFFECT_NAME;\n }\n\n let index = 1;\n\n while (local_names.has(`${GENERATED_EFFECT_NAME}_${index}`)) {\n index += 1;\n }\n\n return `${GENERATED_EFFECT_NAME}_${index}`;\n}\n\nfunction add_ordered_name(names: string[], name: string): void {\n if (names.includes(name)) {\n return;\n }\n\n names.push(name);\n}\n","/**\n * Formats a runtime-owned error message with a stable screaming-case code.\n *\n * @example\n * ```ts\n * throw new Error(make_error_message(\"DISPATCHER_DISPOSED\", \"Dispatcher has been disposed\"));\n * ```\n *\n * @since 2.0.0\n * @param code - Stable screaming-case identifier for the error category.\n * @param message - Human-readable error message without the leading code.\n * @returns The complete error message prefixed with the stable code.\n */\nexport function make_error_message(code: string, message: string): string {\n return `[${code}]: ${message}`;\n}\n\n/**\n * Base error class for all preprocessor errors emitted during script and\n * markup transformation. Carries the source filename so error messages can\n * reference the affected file.\n *\n * @since 2.0.0\n */\nexport class PreprocessError extends Error {\n /**\n * The source filename that triggered this error.\n *\n * @since 2.0.0\n */\n readonly filename: string;\n\n constructor(message: string, filename: string) {\n super(message);\n this.name = \"PreprocessError\";\n this.filename = filename;\n }\n}\n\n/**\n * Thrown when a statement mixes JavaScript `await` with Effect `yield*` work\n * that must be lowered into an `Effect.gen` program.\n *\n * @since 2.0.0\n */\nexport class AwaitInEffectWorkError extends PreprocessError {\n /**\n * The full text of the problematic statement containing mixed async work.\n *\n * @since 2.0.0\n */\n readonly statement_text: string;\n\n constructor(filename: string, statement_text: string) {\n super(\n [\n make_error_message(\n \"AWAIT_IN_EFFECT_WORK\",\n `${filename}: await cannot be mixed with yield* in Effect work.`,\n ),\n `Top-level await is supported as ordinary Svelte async rendering, but statements lowered into Effect.gen must use yield* for async Effect work.`,\n \"\",\n `Problematic statement:`,\n statement_text,\n ].join(\"\\n\"),\n filename,\n );\n this.name = \"AwaitInEffectWorkError\";\n this.statement_text = statement_text;\n }\n}\n\n/**\n * Thrown when async Effect work appears inside a Svelte rune position that\n * must stay synchronous.\n *\n * @since 2.0.0\n */\nexport class AsyncEffectInSyncRuneError extends PreprocessError {\n /**\n * The name of the rune that contained async Effect work.\n *\n * @since 2.0.0\n */\n readonly rune_name: string;\n\n /**\n * The full text of the expression that triggered the error.\n *\n * @since 2.0.0\n */\n readonly expression_text: string;\n\n constructor(rune_name: string, expression_text: string, filename: string) {\n super(\n [\n make_error_message(\n \"ASYNC_EFFECT_IN_SYNC_RUNE\",\n `${filename}: yield* cannot be used inside ${rune_name}().`,\n ),\n `${rune_name}() must stay synchronous. Do not put async Effect work inside this rune.`,\n \"\",\n `Problematic expression:`,\n expression_text,\n ].join(\"\\n\"),\n filename,\n );\n this.name = \"AsyncEffectInSyncRuneError\";\n this.rune_name = rune_name;\n this.expression_text = expression_text;\n }\n}\n/**\n * Thrown when async Effect work appears inside a non-generator callback nested\n * in a markup event handler.\n *\n * @example\n * ```ts\n * throw new AsyncEffectInEventCallbackError(\n * \"Component.svelte\",\n * \"Effect.try(() => yield* save())\",\n * );\n * ```\n *\n * @since 2.0.0\n */\nexport class AsyncEffectInEventCallbackError extends PreprocessError {\n /**\n * The full text of the problematic event handler body.\n *\n * @since 2.0.0\n */\n readonly expression_text: string;\n\n constructor(filename: string, expression_text: string) {\n super(\n [\n make_error_message(\n \"ASYNC_EFFECT_IN_EVENT_CALLBACK\",\n `${filename}: yield* cannot be used inside a nested non-generator callback in a markup event handler.`,\n ),\n `Move the yield* to the event handler body. Effect.try and Effect.sync callbacks are plain synchronous JavaScript; do not call Effect-returning functions inside them.`,\n \"\",\n `Run the remote Effect directly:`,\n ` onclick={yield* UpvotePost(id)}`,\n \"\",\n `Recover from remote failures by composing the Effect value:`,\n ` onclick={yield* UpvotePost(id).pipe(Effect.catch(() => Effect.void))}`,\n \"\",\n `Problematic expression:`,\n expression_text,\n ].join(\"\\n\"),\n filename,\n );\n this.name = \"AsyncEffectInEventCallbackError\";\n this.expression_text = expression_text;\n }\n}\n\n/**\n * Thrown when an event handler callback contains the old raw `yield*`\n * shorthand. Effectful event handlers must put `yield*` directly in the event\n * attribute so the callback boundary is generated by the markup runtime.\n *\n * @example\n * ```ts\n * throw new YieldStarInEventCallbackError(\n * \"Component.svelte\",\n * \"() => yield* save()\",\n * );\n * ```\n *\n * @since 2.0.0\n * @param filename - Svelte component filename used to identify where the\n * invalid event handler callback was found.\n * @param expression_text - Original event handler callback text that contained\n * `yield*` and should be rewritten as a direct event Effect expression.\n */\nexport class YieldStarInEventCallbackError extends PreprocessError {\n /**\n * The full text of the problematic event handler callback.\n *\n * @since 2.0.0\n */\n readonly expression_text: string;\n\n constructor(filename: string, expression_text: string) {\n super(\n [\n make_error_message(\n \"ASYNC_EFFECT_IN_EVENT_HANDLER_CALLBACK\",\n `${filename}: yield* in markup event handlers must be written directly as the event attribute value.`,\n ),\n `SER generates the event callback for effectful event handlers; do not put yield* inside a JavaScript callback.`,\n \"\",\n `Use this form:`,\n ` onclick={yield* UpvotePost(id)}`,\n \"\",\n `Instead of this form:`,\n ` onclick={() => yield* UpvotePost(id)}`,\n \"\",\n `Problematic expression:`,\n expression_text,\n ].join(\"\\n\"),\n filename,\n );\n this.name = \"YieldStarInEventCallbackError\";\n this.expression_text = expression_text;\n }\n}\n\n/**\n * Thrown when async Effect work appears in a markup position SER cannot lower\n * safely.\n *\n * @example\n * ```ts\n * throw new UnsupportedMarkupEffectPositionError(\n * \"Component.svelte\",\n * \"value={yield* load()}\",\n * );\n * ```\n *\n * @since 2.4.2\n */\nexport class UnsupportedMarkupEffectPositionError extends PreprocessError {\n /**\n * The unsupported markup expression text.\n *\n * @since 2.4.2\n */\n readonly expression_text: string;\n\n constructor(filename: string, expression_text: string) {\n super(\n [\n make_error_message(\n \"UNSUPPORTED_MARKUP_EFFECT_POSITION\",\n `${filename}: yield* cannot be used in this markup position.`,\n ),\n `Move the Effect work into a supported expression tag, block expression, render expression, declaration tag, or event handler.`,\n \"\",\n `Problematic expression:`,\n expression_text,\n ].join(\"\\n\"),\n filename,\n );\n this.name = \"UnsupportedMarkupEffectPositionError\";\n this.expression_text = expression_text;\n }\n}\n","import ts from \"typescript\";\n\n/**\n * Strips an event handler arrow function down to its executable body.\n *\n * @since 2.0.0\n * @param expr - Event handler expression text from the original markup.\n * @returns Handler parameters, body text, and body offsets inside `expr`.\n */\nexport function strip_arrow_function(\n expr: string,\n): { params: string; body: string; body_start: number; body_end: number } {\n const arrow_idx = expr.indexOf(\"=>\");\n\n if (arrow_idx === -1) {\n return { params: \"()\", body: expr, body_start: 0, body_end: expr.length };\n }\n\n const params = expr.slice(0, arrow_idx).trim();\n const raw_body = expr.slice(arrow_idx + 2);\n const leading_ws = raw_body.length - raw_body.trimStart().length;\n let body_start = arrow_idx + 2 + leading_ws;\n let body_end = expr.length - (raw_body.length - raw_body.trimEnd().length);\n let body = expr.slice(body_start, body_end);\n\n if (body.startsWith(\"{\") && body.endsWith(\"}\")) {\n body_start += 1;\n body_end -= 1;\n body = body.slice(1, -1);\n }\n\n const body_leading_ws = body.length - body.trimStart().length;\n const body_trailing_ws = body.length - body.trimEnd().length;\n\n body_start += body_leading_ws;\n body_end -= body_trailing_ws;\n body = body.trim();\n\n if (body.endsWith(\";\")) {\n body = body.slice(0, -1);\n body_end -= 1;\n }\n\n return { params, body, body_start, body_end };\n}\n\n/**\n * Returns whether an expression is a callback function.\n *\n * @since 2.0.0\n * @param expr - Expression text from a markup attribute or expression tag.\n * @returns Whether the expression parses as an arrow or function expression.\n */\nexport function is_callback_function_expression(expr: string): boolean {\n const wrapped = `const __SER___callback = ${expr};`;\n const sf = ts.createSourceFile(\n \"callback.ts\",\n wrapped,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n const stmt = sf.statements[0];\n\n if (!ts.isVariableStatement(stmt)) {\n return false;\n }\n\n const initializer = stmt.declarationList.declarations[0]?.initializer;\n\n return initializer !== undefined &&\n (ts.isArrowFunction(initializer) ||\n ts.isFunctionExpression(initializer));\n}\n\n/**\n * Classifies `yield*` placement inside an event handler body.\n *\n * @example\n * ```ts\n * analyze_event_body_yield_star(\"yield* save()\");\n * ```\n *\n * @since 2.0.0\n * @param body - Event handler body text after the outer arrow has been\n * stripped.\n * @returns Whether the body has top-level yield* expressions and whether any\n * yield* appears inside a nested non-generator callback.\n */\nexport function analyze_event_body_yield_star(body: string): {\n has_top_level_yield_star: boolean;\n has_nested_invalid_yield_star: boolean;\n} {\n const wrapped = `function* __SER___event() { ${body}; }`;\n const sf = ts.createSourceFile(\n \"event.ts\",\n wrapped,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n const stmt = sf.statements[0];\n\n if (!ts.isFunctionDeclaration(stmt) || !stmt.body) {\n return {\n has_top_level_yield_star: false,\n has_nested_invalid_yield_star: /\\byield\\s*\\*/.test(body),\n };\n }\n\n const result = {\n has_top_level_yield_star: false,\n has_nested_invalid_yield_star: false,\n };\n\n visit_event_body(stmt.body, \"top_level\", result);\n\n return result;\n}\n\n/**\n * Collects free identifiers that must be captured as reactive dependencies.\n *\n * @since 2.0.0\n * @param expr_text - Markup expression text to inspect.\n * @returns Identifier names referenced by the expression.\n */\nexport function collect_free_identifiers(expr_text: string): string[] {\n const wrapped = `function* __SER___w() { return (${expr_text}); }`;\n let sf: ts.SourceFile;\n\n try {\n sf = ts.createSourceFile(\n \"expr.ts\",\n wrapped,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n } catch {\n return [];\n }\n\n const fn = sf.statements[0];\n\n if (!ts.isFunctionDeclaration(fn) || !fn.body) {\n return [];\n }\n\n const ids: string[] = [];\n const locals = new Set<string>();\n const seen = new Set<string>();\n\n visit_ids(fn.body, locals, seen, ids);\n\n return ids;\n}\n\nfunction visit_ids(\n node: ts.Node,\n locals: Set<string>,\n seen: Set<string>,\n ids: string[],\n): void {\n if (\n ts.isArrowFunction(node) ||\n ts.isFunctionExpression(node) ||\n ts.isFunctionDeclaration(node)\n ) {\n const scoped = new Set(locals);\n\n if (ts.isFunctionDeclaration(node) && node.name) {\n scoped.add(node.name.text);\n }\n\n for (const parameter of node.parameters) {\n add_binding_names(parameter.name, scoped);\n }\n\n if (node.body) {\n visit_ids(node.body, scoped, seen, ids);\n }\n\n return;\n }\n\n if (ts.isVariableDeclaration(node)) {\n if (node.initializer) {\n visit_ids(node.initializer, locals, seen, ids);\n }\n\n add_binding_names(node.name, locals);\n\n return;\n }\n\n if (ts.isTypeReferenceNode(node)) {\n return;\n }\n\n if (ts.isIdentifier(node)) {\n if (\n node.text === \"yield\" ||\n node.text === \"undefined\" ||\n node.text === \"null\" ||\n node.text === \"true\" ||\n node.text === \"false\" ||\n node.text === \"this\"\n ) {\n return;\n }\n\n if (is_property_access_name(node)) {\n return;\n }\n\n if (!locals.has(node.text) && !seen.has(node.text)) {\n seen.add(node.text);\n ids.push(node.text);\n }\n return;\n }\n\n node.forEachChild((child) => visit_ids(child, locals, seen, ids));\n}\n\nfunction add_binding_names(name: ts.BindingName, locals: Set<string>): void {\n if (ts.isIdentifier(name)) {\n locals.add(name.text);\n return;\n }\n\n for (const element of name.elements) {\n if (ts.isOmittedExpression(element)) {\n continue;\n }\n\n add_binding_names(element.name, locals);\n }\n}\n\ntype EventYieldContext = \"top_level\" | \"nested_generator\" | \"nested_invalid\";\n\ninterface EventYieldAnalysis {\n has_top_level_yield_star: boolean;\n has_nested_invalid_yield_star: boolean;\n}\n\nfunction visit_event_body(\n node: ts.Node,\n context: EventYieldContext,\n result: EventYieldAnalysis,\n): void {\n if (is_yield_star_expression(node)) {\n if (context === \"top_level\") {\n result.has_top_level_yield_star = true;\n } else if (context === \"nested_invalid\") {\n result.has_nested_invalid_yield_star = true;\n }\n\n node.forEachChild((child) => visit_event_body(child, context, result));\n return;\n }\n\n if (is_nested_function_boundary(node)) {\n const next_context = is_generator_function_boundary(node)\n ? \"nested_generator\"\n : \"nested_invalid\";\n\n node.forEachChild((child) => visit_event_body(child, next_context, result));\n return;\n }\n\n node.forEachChild((child) => visit_event_body(child, context, result));\n}\n\nfunction is_nested_function_boundary(node: ts.Node): boolean {\n return (\n ts.isArrowFunction(node) ||\n ts.isFunctionExpression(node) ||\n ts.isFunctionDeclaration(node) ||\n ts.isMethodDeclaration(node) ||\n ts.isGetAccessorDeclaration(node) ||\n ts.isSetAccessorDeclaration(node)\n );\n}\n\nfunction is_generator_function_boundary(node: ts.Node): boolean {\n return (\n (ts.isFunctionExpression(node) || ts.isFunctionDeclaration(node) ||\n ts.isMethodDeclaration(node)) &&\n node.asteriskToken !== undefined\n );\n}\n\nfunction is_yield_star_expression(node: ts.Node): boolean {\n if (ts.isYieldExpression(node)) {\n return node.asteriskToken !== undefined;\n }\n\n return (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.AsteriskToken &&\n ts.isIdentifier(node.left) &&\n node.left.text === \"yield\"\n );\n}\n\nfunction is_property_access_name(node: ts.Identifier): boolean {\n const parent = node.parent;\n\n return (\n (ts.isPropertyAccessExpression(parent) && parent.name === node) ||\n (ts.isPropertyAssignment(parent) && parent.name === node) ||\n (ts.isBindingElement(parent) && parent.propertyName === node) ||\n ts.isImportSpecifier(parent) ||\n ts.isExportSpecifier(parent)\n );\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport type { EffectCallbackRewriteContext } from \"./effect-bindings.ts\";\nimport type { HelperDeclaration } from \"./types.ts\";\n\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\nconst MATCH_EFFECT_MEMBERS = new Map([\n [\"match\", \"matchEffect\"],\n [\"matchCause\", \"matchCauseEffect\"],\n]);\n\nconst EFFECTFUL_CALLBACK_MEMBERS = new Set([\n \"andThen\",\n \"catchAll\",\n \"catchAllCause\",\n \"catchCause\",\n \"catchTag\",\n \"flatMap\",\n \"forEach\",\n \"tap\",\n \"tapError\",\n \"tapErrorCause\",\n]);\n\nconst EFFECTFUL_HANDLER_MEMBERS = new Set([\n \"matchCauseEffect\",\n \"matchEffect\",\n \"tapBoth\",\n]);\n\ninterface RewriteContext {\n source_file: ts.SourceFile;\n source_text: string;\n magic: MagicString;\n offset: number;\n bindings: EffectCallbackRewriteContext;\n changed: boolean;\n uses_wrapper: boolean;\n}\n\ninterface EffectMember {\n name: string;\n name_start: number;\n name_end: number;\n direct: boolean;\n}\n\ntype EffectWrapperMember = \"gen\" | \"sync\";\n\n/**\n * Rewrites effectful callback shorthand inside event handler expressions.\n *\n * @example\n * ```ts\n * normalize_effect_callback_yields(\n * `yield* action.pipe(Effect.flatMap((value) => yield* next(value)))`,\n * collect_effect_callback_bindings(source),\n * );\n * ```\n *\n * @since 2.0.0\n * @param expr_text - Markup expression text before it is wrapped in the\n * generated Effect runner.\n * @param bindings - Local Effect import bindings collected from the Svelte\n * component's script blocks.\n * @returns The expression with nested Effect callback `yield*` shorthand\n * lowered into explicit Effect callbacks, plus any import needed by generated\n * wrapper calls.\n */\nexport function normalize_effect_callback_yields(\n expr_text: string,\n bindings: EffectCallbackRewriteContext,\n): { expr_text: string; helpers: HelperDeclaration[] } {\n const prefix = \"const __SER___expression = \";\n const source_text = `${prefix}${expr_text};`;\n const source_file = ts.createSourceFile(\n \"event-expression.ts\",\n source_text,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n const statement = source_file.statements[0];\n const magic = new MagicString(expr_text);\n const context: RewriteContext = {\n source_file,\n source_text,\n magic,\n offset: prefix.length,\n bindings,\n changed: false,\n uses_wrapper: false,\n };\n\n if (!ts.isVariableStatement(statement)) {\n return { expr_text, helpers: [] };\n }\n\n const expression = statement.declarationList.declarations[0]?.initializer;\n\n if (!expression) {\n return { expr_text, helpers: [] };\n }\n\n visit_expression(expression, context);\n\n if (!context.changed) {\n return { expr_text, helpers: [] };\n }\n\n const helpers = context.uses_wrapper && bindings.wrapper_import\n ? [bindings.wrapper_import]\n : [];\n\n return {\n expr_text: magic.toString(),\n helpers,\n };\n}\n\nfunction visit_expression(node: ts.Node, context: RewriteContext): void {\n if (is_non_generator_callback_with_top_level_yield(node)) {\n return;\n }\n\n if (ts.isCallExpression(node)) {\n rewrite_match_call(node, context);\n rewrite_effectful_handler_call(node, context);\n rewrite_effectful_callback_arguments(node, context);\n }\n\n node.forEachChild((child) => {\n visit_expression(child, context);\n });\n}\n\nfunction rewrite_match_call(\n call: ts.CallExpression,\n context: RewriteContext,\n): void {\n const member = get_effect_member(call.expression, context);\n const upgraded_name = member && MATCH_EFFECT_MEMBERS.get(member.name);\n const options = get_last_object_argument(call);\n\n if (!member || !upgraded_name || !options) {\n return;\n }\n\n const handlers = get_handler_properties(options);\n const should_upgrade = handlers.some((handler) =>\n handler.callback &&\n is_non_generator_callback_with_top_level_yield(handler.callback)\n );\n\n if (!should_upgrade) {\n return;\n }\n\n rewrite_effect_member_name(member, upgraded_name, context);\n context.changed = true;\n\n for (const handler of handlers) {\n if (!handler.callback) {\n continue;\n }\n\n if (is_non_generator_callback_with_top_level_yield(handler.callback)) {\n rewrite_callback_to_effect_gen(handler.callback, context);\n } else {\n rewrite_callback_to_effect_sync(handler.callback, context);\n }\n }\n}\n\nfunction rewrite_effectful_handler_call(\n call: ts.CallExpression,\n context: RewriteContext,\n): void {\n const member = get_effect_member(call.expression, context);\n const options = get_last_object_argument(call);\n\n if (!member || !EFFECTFUL_HANDLER_MEMBERS.has(member.name) || !options) {\n return;\n }\n\n for (const handler of get_handler_properties(options)) {\n if (\n handler.callback &&\n is_non_generator_callback_with_top_level_yield(handler.callback)\n ) {\n rewrite_callback_to_effect_gen(handler.callback, context);\n }\n }\n}\n\nfunction rewrite_effectful_callback_arguments(\n call: ts.CallExpression,\n context: RewriteContext,\n): void {\n const member = get_effect_member(call.expression, context);\n\n if (!member || !EFFECTFUL_CALLBACK_MEMBERS.has(member.name)) {\n return;\n }\n\n for (const argument of call.arguments) {\n if (\n is_callback_expression(argument) &&\n is_non_generator_callback_with_top_level_yield(argument)\n ) {\n rewrite_callback_to_effect_gen(argument, context);\n }\n }\n}\n\nfunction rewrite_callback_to_effect_gen(\n callback: ts.ArrowFunction | ts.FunctionExpression,\n context: RewriteContext,\n): void {\n if (is_async_function(callback)) {\n return;\n }\n\n if (ts.isArrowFunction(callback)) {\n rewrite_arrow_callback(callback, \"gen\", context);\n return;\n }\n\n rewrite_function_body(callback, \"gen\", context);\n}\n\nfunction rewrite_callback_to_effect_sync(\n callback: ts.ArrowFunction | ts.FunctionExpression,\n context: RewriteContext,\n): void {\n if (is_async_function(callback)) {\n return;\n }\n\n if (ts.isArrowFunction(callback)) {\n rewrite_arrow_callback(callback, \"sync\", context);\n return;\n }\n\n rewrite_function_body(callback, \"sync\", context);\n}\n\nfunction rewrite_arrow_callback(\n callback: ts.ArrowFunction,\n wrapper: EffectWrapperMember,\n context: RewriteContext,\n): void {\n const start = to_expr_pos(callback.getStart(context.source_file), context);\n const end = to_expr_pos(callback.end, context);\n const params_text = context.source_text\n .slice(\n callback.getStart(context.source_file),\n callback.equalsGreaterThanToken.getStart(context.source_file),\n )\n .trim();\n const body_text = get_body_text(callback.body, context);\n const rewritten_body = make_effect_body(\n callback.body,\n body_text,\n wrapper,\n context,\n );\n const replacement = `${params_text} => ${rewritten_body}`;\n\n context.magic.overwrite(start, end, replacement);\n context.changed = true;\n}\n\nfunction rewrite_function_body(\n callback: ts.FunctionExpression,\n wrapper: EffectWrapperMember,\n context: RewriteContext,\n): void {\n const body_start = to_expr_pos(\n callback.body.getStart(context.source_file),\n context,\n );\n const body_end = to_expr_pos(callback.body.end, context);\n const body_text = get_body_text(callback.body, context);\n const rewritten_body = make_effect_body(\n callback.body,\n body_text,\n wrapper,\n context,\n );\n\n context.magic.overwrite(\n body_start,\n body_end,\n `{ return ${rewritten_body}; }`,\n );\n context.changed = true;\n}\n\nfunction make_effect_body(\n body: ts.ConciseBody,\n body_text: string,\n wrapper: EffectWrapperMember,\n context: RewriteContext,\n): string {\n const wrapper_access = make_effect_access(wrapper, context);\n\n if (wrapper === \"gen\") {\n if (ts.isBlock(body)) {\n return `${wrapper_access}(function* () ${body_text})`;\n }\n\n return `${wrapper_access}(function* () { return (${body_text}); })`;\n }\n\n if (ts.isBlock(body)) {\n return `${wrapper_access}(() => ${body_text})`;\n }\n\n return `${wrapper_access}(() => (${body_text}))`;\n}\n\nfunction get_body_text(body: ts.ConciseBody, context: RewriteContext): string {\n return context.source_text\n .slice(body.getStart(context.source_file), body.end)\n .trim();\n}\n\nfunction get_handler_properties(\n object_literal: ts.ObjectLiteralExpression,\n): Array<{\n callback: ts.ArrowFunction | ts.FunctionExpression | undefined;\n}> {\n return object_literal.properties.flatMap((property) => {\n if (!ts.isPropertyAssignment(property)) {\n return [];\n }\n\n const name = get_property_name(property.name);\n\n if (name !== \"onFailure\" && name !== \"onSuccess\") {\n return [];\n }\n\n const callback = is_callback_expression(property.initializer)\n ? property.initializer\n : undefined;\n\n return [{ callback }];\n });\n}\n\nfunction get_last_object_argument(\n call: ts.CallExpression,\n): ts.ObjectLiteralExpression | undefined {\n const last_argument = call.arguments[call.arguments.length - 1];\n\n if (!last_argument || !ts.isObjectLiteralExpression(last_argument)) {\n return undefined;\n }\n\n return last_argument;\n}\n\nfunction get_effect_member(\n expression: ts.Expression,\n context: RewriteContext,\n): EffectMember | undefined {\n if (ts.isIdentifier(expression)) {\n const direct_member = context.bindings.direct_members.get(expression.text);\n\n if (!direct_member) {\n return undefined;\n }\n\n return {\n name: direct_member,\n name_start: to_expr_pos(\n expression.getStart(context.source_file),\n context,\n ),\n name_end: to_expr_pos(expression.end, context),\n direct: true,\n };\n }\n\n if (!ts.isPropertyAccessExpression(expression)) {\n return undefined;\n }\n\n if (!is_effect_namespace_expression(expression.expression, context)) {\n return undefined;\n }\n\n return {\n name: expression.name.text,\n name_start: to_expr_pos(\n expression.name.getStart(context.source_file),\n context,\n ),\n name_end: to_expr_pos(expression.name.end, context),\n direct: false,\n };\n}\n\nfunction rewrite_effect_member_name(\n member: EffectMember,\n upgraded_name: string,\n context: RewriteContext,\n): void {\n if (member.direct) {\n context.magic.overwrite(\n member.name_start,\n member.name_end,\n make_effect_access(upgraded_name, context),\n );\n\n return;\n }\n\n context.magic.overwrite(member.name_start, member.name_end, upgraded_name);\n}\n\nfunction make_effect_access(\n member_name: string,\n context: RewriteContext,\n): string {\n context.uses_wrapper = true;\n\n return `${context.bindings.wrapper_expression}.${member_name}`;\n}\n\nfunction is_effect_namespace_expression(\n expression: ts.Expression,\n context: RewriteContext,\n): boolean {\n if (ts.isIdentifier(expression)) {\n return context.bindings.effect_object_names.has(expression.text) ||\n context.bindings.effect_module_names.has(expression.text);\n }\n\n if (!ts.isPropertyAccessExpression(expression)) {\n return false;\n }\n\n if (expression.name.text !== \"Effect\") {\n return false;\n }\n\n if (!ts.isIdentifier(expression.expression)) {\n return false;\n }\n\n return context.bindings.effect_package_names.has(expression.expression.text);\n}\n\nfunction get_property_name(name: ts.PropertyName): string | undefined {\n if (ts.isIdentifier(name) || ts.isStringLiteral(name)) {\n return name.text;\n }\n\n return undefined;\n}\n\nfunction is_callback_expression(\n node: ts.Node,\n): node is ts.ArrowFunction | ts.FunctionExpression {\n return ts.isArrowFunction(node) || ts.isFunctionExpression(node);\n}\n\nfunction is_non_generator_callback_with_top_level_yield(\n node: ts.Node,\n): node is ts.ArrowFunction | ts.FunctionExpression {\n if (!is_callback_expression(node)) {\n return false;\n }\n\n if (ts.isFunctionExpression(node) && node.asteriskToken) {\n return false;\n }\n\n return contains_top_level_yield_star(node.body);\n}\n\nfunction is_async_function(\n node: ts.ArrowFunction | ts.FunctionExpression,\n): boolean {\n return node.modifiers?.some(\n (modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword,\n ) ?? false;\n}\n\nfunction to_expr_pos(pos: number, context: RewriteContext): number {\n return pos - context.offset;\n}\n","import {\n AsyncEffectInEventCallbackError,\n YieldStarInEventCallbackError,\n} from \"$/error.ts\";\nimport type { EffectCallbackRewriteContext } from \"./effect-bindings.ts\";\nimport {\n analyze_event_body_yield_star,\n collect_free_identifiers,\n is_callback_function_expression,\n} from \"./expressions.ts\";\nimport { normalize_effect_callback_yields } from \"./effect-callbacks.ts\";\nimport type {\n HelperDeclaration,\n MarkupCandidate,\n MarkupHelperBindings,\n MarkupNameAllocator,\n PendingRelocation,\n Replacement,\n TagKind,\n} from \"./types.ts\";\n\n/**\n * Emits source edits for classified markup Effect expressions.\n *\n * @since 2.0.0\n * @param classified - Candidates paired with their Svelte markup context.\n * @param effect_context - Effect import bindings available to markup\n * expression rewrites.\n * @returns Replacements ready to apply to the original component source.\n */\nexport function emit_replacements(\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n effect_context: EffectCallbackRewriteContext,\n helper_bindings: MarkupHelperBindings,\n name_allocator: MarkupNameAllocator,\n): Replacement[] {\n return classified.map(({ candidate, kind }) =>\n emit_replacement(\n candidate,\n kind,\n effect_context,\n helper_bindings,\n name_allocator,\n )\n );\n}\n\nfunction emit_replacement(\n candidate: MarkupCandidate,\n kind: TagKind,\n effect_context: EffectCallbackRewriteContext,\n helper_bindings: MarkupHelperBindings,\n name_allocator: MarkupNameAllocator,\n): Replacement {\n const normalized = normalize_effect_callback_yields(\n candidate.expr_text,\n effect_context,\n );\n const normalized_candidate = {\n ...candidate,\n expr_text: normalized.expr_text,\n };\n const id = make_cache_id(candidate);\n const id_text = JSON.stringify(id);\n const helper_name = make_helper_name(candidate, name_allocator);\n\n let replacement_text: string;\n let helpers: HelperDeclaration[];\n let relocation: PendingRelocation | undefined;\n\n if (kind === \"await\") {\n const effect = make_effect_helper(normalized_candidate, helper_name);\n\n replacement_text = emit_promise_expression(\n id_text,\n effect,\n helper_bindings,\n );\n helpers = [...normalized.helpers, effect.helper];\n } else if (kind === \"render\") {\n const effect = make_effect_helper(normalized_candidate, helper_name);\n\n replacement_text = emit_render_expression(\n id_text,\n effect,\n candidate,\n helper_bindings,\n );\n helpers = [...normalized.helpers, effect.helper];\n } else if (kind === \"render_argument\") {\n const effect = make_effect_helper(normalized_candidate, helper_name);\n\n replacement_text = emit_each_expression(id_text, effect, helper_bindings);\n helpers = [...normalized.helpers, effect.helper];\n } else if (kind === \"each\") {\n const effect = make_effect_helper(normalized_candidate, helper_name);\n\n replacement_text = emit_each_expression(id_text, effect, helper_bindings);\n helpers = [...normalized.helpers, effect.helper];\n } else if (kind === \"event\") {\n const event = make_event_handler(normalized_candidate, helper_bindings);\n\n replacement_text = event.text;\n helpers = normalized.helpers;\n relocation = make_relocation(candidate, replacement_text, {\n originalStart: 0,\n originalEnd: candidate.expr_text.length,\n generatedText: event.expr_text,\n });\n } else {\n const effect = make_effect_helper(normalized_candidate, helper_name);\n\n replacement_text = emit_each_expression(id_text, effect, helper_bindings);\n helpers = [...normalized.helpers, effect.helper];\n }\n\n return {\n start: candidate.start,\n end: candidate.end,\n text: replacement_text,\n helpers,\n relocation,\n };\n}\n\nfunction make_event_handler(\n candidate: MarkupCandidate,\n helper_bindings: MarkupHelperBindings,\n): { text: string; expr_text: string } {\n const expr_text = candidate.expr_text;\n\n if (is_callback_function_expression(expr_text)) {\n throw new YieldStarInEventCallbackError(\n candidate.filename,\n expr_text,\n );\n }\n\n const analysis = analyze_event_body_yield_star(expr_text);\n\n if (analysis.has_nested_invalid_yield_star) {\n throw new AsyncEffectInEventCallbackError(\n candidate.filename,\n expr_text,\n );\n }\n\n return {\n expr_text,\n text:\n `(event) => { ${helper_bindings.run}(function* () { ${expr_text}; }); }`,\n };\n}\n\nfunction emit_promise_expression(\n id_text: string,\n effect: EffectHelper,\n helper_bindings: MarkupHelperBindings,\n): string {\n return `${helper_bindings.promise}(${id_text}, ${effect.deps_text}, () => ${effect.call})`;\n}\n\nfunction emit_render_expression(\n id_text: string,\n effect: EffectHelper,\n candidate: MarkupCandidate,\n helper_bindings: MarkupHelperBindings,\n): string {\n const expression = emit_promise_expression(id_text, effect, helper_bindings);\n\n if (/^\\s*yield\\s*\\*/.test(candidate.expr_text)) {\n return `(await ${expression})()`;\n }\n\n return `await ${expression}`;\n}\n\nfunction emit_each_expression(\n id_text: string,\n effect: EffectHelper,\n helper_bindings: MarkupHelperBindings,\n): string {\n return `await ${emit_promise_expression(id_text, effect, helper_bindings)}`;\n}\n\ninterface EffectHelper {\n helper: HelperDeclaration;\n call: string;\n deps_text: string;\n}\n\nfunction make_effect_helper(\n candidate: MarkupCandidate,\n helper_name: string,\n): EffectHelper {\n const deps = collect_free_identifiers(candidate.expr_text);\n const args_text = deps.join(\", \");\n const deps_text = deps.length === 0 ? \"[]\" : `[${args_text}]`;\n const call = `${helper_name}()`;\n const text =\n `function* ${helper_name}() { return (${candidate.expr_text}); }`;\n const generated_start = text.indexOf(candidate.expr_text);\n\n return {\n call,\n deps_text,\n helper: {\n text,\n relocation: {\n originalStart: candidate.start,\n originalEnd: candidate.end,\n generatedStartInReplacement: generated_start,\n generatedEndInReplacement: generated_start +\n candidate.expr_text.length,\n },\n },\n };\n}\n\nfunction make_cache_id(candidate: MarkupCandidate): string {\n const normalized_filename = candidate.filename.replace(/[?#].*$/, \"\");\n\n return `${normalized_filename}:${candidate.start}:${candidate.end}`;\n}\n\nfunction make_helper_name(\n candidate: MarkupCandidate,\n name_allocator: MarkupNameAllocator,\n): string {\n return name_allocator.reserve(\n `__SER___markup_effect_${candidate.start}_${candidate.end}`,\n );\n}\n\nfunction make_relocation(\n candidate: MarkupCandidate,\n replacement_text: string,\n inner: {\n originalStart: number;\n originalEnd: number;\n generatedText: string;\n },\n): PendingRelocation | undefined {\n const generated_start = replacement_text.indexOf(inner.generatedText);\n\n if (generated_start === -1) {\n return undefined;\n }\n\n return {\n originalStart: candidate.start + inner.originalStart,\n originalEnd: candidate.start + inner.originalEnd,\n generatedStartInReplacement: generated_start,\n generatedEndInReplacement: generated_start + inner.generatedText.length,\n };\n}\n","import ts from \"typescript\";\n\n/**\n * Checks whether a node is a `yield*` binary expression.\n *\n * @since 2.0.0\n * @param node - TypeScript AST node to check.\n * @returns Whether the node represents `yield * operand`.\n */\nexport function is_yield_star_expression(node: ts.Node): boolean {\n return (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.AsteriskToken &&\n ts.isIdentifier(node.left) &&\n node.left.text === \"yield\"\n );\n}\n\n/**\n * Checks whether a node owns its own yield semantics.\n *\n * @since 2.0.0\n * @param node - TypeScript AST node to check.\n * @returns Whether traversal should stop at this function boundary.\n */\nexport function is_function_boundary_node(node: ts.Node): boolean {\n return (\n ts.isArrowFunction(node) ||\n ts.isFunctionDeclaration(node) ||\n ts.isFunctionExpression(node) ||\n ts.isMethodDeclaration(node) ||\n ts.isGetAccessorDeclaration(node) ||\n ts.isSetAccessorDeclaration(node)\n );\n}\n\n/**\n * Returns `true` if the node tree contains a top-level `await`.\n *\n * @since 2.0.0\n * @param node - Root node to search.\n * @returns Whether a top-level await expression was found.\n */\nexport function contains_top_level_await(node: ts.Node): boolean {\n if (ts.isAwaitExpression(node)) {\n return true;\n }\n\n return node.getChildren().some(\n (child) =>\n !is_function_boundary_node(child) && contains_top_level_await(child),\n );\n}\n\n/**\n * Collects top-level `yield*` nodes under an expression.\n *\n * @since 2.0.0\n * @param node - Root node to search.\n * @param on_found - Callback invoked for each matching yield node.\n * @returns Nothing.\n */\nexport function collect_yield_star_nodes(\n node: ts.Node,\n on_found: (node: ts.Node) => void,\n): void {\n if (is_function_boundary_node(node)) {\n return;\n }\n\n if (is_yield_star_expression(node)) {\n on_found(node);\n return;\n }\n\n node.forEachChild((child) => {\n collect_yield_star_nodes(child, on_found);\n });\n}\n\n/**\n * Finds the first top-level `yield*` expression below a node.\n *\n * @since 2.0.0\n * @param node - Root node to search.\n * @param on_found - Callback invoked with the first matching node.\n * @returns Nothing.\n */\nexport function find_yield_star_node(\n node: ts.Node,\n on_found: (node: ts.Node) => void,\n): void {\n if (is_function_boundary_node(node)) {\n return;\n }\n\n if (is_yield_star_expression(node)) {\n on_found(node);\n return;\n }\n\n node.forEachChild((child) => {\n find_yield_star_node(child, on_found);\n });\n}\n\n/**\n * Extracts identifier names from a TypeScript binding name.\n *\n * @since 2.0.0\n * @param name - Binding name node to flatten.\n * @returns Identifier names from identifiers and destructuring patterns.\n */\nexport function extract_binding_names(name: ts.BindingName): string[] {\n if (ts.isIdentifier(name)) {\n return [name.text];\n }\n\n const result: string[] = [];\n\n for (const element of name.elements) {\n if (ts.isOmittedExpression(element)) {\n continue;\n }\n\n result.push(...extract_binding_names(element.name));\n }\n\n return result;\n}\n","import { collect_yield_star_nodes } from \"$/preprocess/ast.ts\";\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\nimport {\n analyze_event_body_yield_star,\n strip_arrow_function,\n} from \"./expressions.ts\";\nimport { HELPERS } from \"./constants.ts\";\nimport type { MarkupCandidate, TagKind } from \"./types.ts\";\n\ninterface SanitizeResult {\n code: string;\n candidates: MarkupCandidate[];\n}\n\ninterface DeclarationYieldExpression {\n start: number;\n end: number;\n expr_text: string;\n}\n\nexport function sanitize_markup(\n content: string,\n filename: string,\n): SanitizeResult {\n const candidates: MarkupCandidate[] = [];\n const magic = new MagicString(content);\n let helper_index = 0;\n let cursor = 0;\n\n while (cursor < content.length) {\n const open = content.indexOf(\"{\", cursor);\n if (open === -1) break;\n\n /** Skip braces inside <script> and <style> blocks. */\n if (\n is_inside_excluded_block(content, open) ||\n is_inside_html_comment(content, open)\n ) {\n cursor = open + 1;\n continue;\n }\n\n /** Find the matching closing brace. */\n const close = find_closing_brace(content, open + 1);\n if (close === -1) {\n cursor = open + 1;\n continue;\n }\n\n const inner = content.slice(open + 1, close);\n\n const trimmed = inner.trimStart();\n const leading_ws = inner.length - trimmed.length;\n\n const tag_info = get_tag_info(trimmed);\n\n const declaration_yields = collect_declaration_yield_expressions(\n content,\n open,\n leading_ws,\n trimmed,\n );\n\n if (declaration_yields.length > 0) {\n for (const declaration_yield of declaration_yields) {\n const placeholder = `__SER___markup_placeholder_${helper_index}`;\n helper_index += 1;\n\n candidates.push({\n placeholder,\n start: declaration_yield.start,\n end: declaration_yield.end,\n expr_text: declaration_yield.expr_text,\n filename,\n key: \"plain\",\n });\n\n magic.overwrite(\n declaration_yield.start,\n declaration_yield.end,\n placeholder,\n );\n }\n\n cursor = close + 1;\n continue;\n }\n\n let expr_body = trimmed.slice(tag_info.prefix_length);\n\n /** For @const, only use the RHS after `=` as the expression body. */\n const equal_idx = tag_info.kind === \"plain\" && trimmed.startsWith(\"@const \")\n ? expr_body.indexOf(\"=\")\n : -1;\n\n /** Check if this is a callback handler containing yield*. */\n const is_event_callback = is_event_callback_expression(inner);\n\n /** Determine if this brace contains yield* that needs lowering. */\n const event_yield = is_event_callback\n ? analyze_event_yield(inner)\n : undefined;\n const has_yield = event_yield?.has_top_level_yield_star ??\n contains_yield_star_in_text(expr_body);\n\n if (!has_yield) {\n cursor = close + 1;\n continue;\n }\n\n /** The expression starts after the tag prefix. For @const, after the `=`. */\n let extra_prefix = 0;\n\n if (equal_idx !== -1) {\n const after_eq_raw = expr_body.slice(equal_idx + 1);\n expr_body = after_eq_raw.trimStart();\n extra_prefix = equal_idx + 1 + (after_eq_raw.length - expr_body.length);\n }\n\n const expr_start = open + 1 + leading_ws + tag_info.prefix_length +\n extra_prefix;\n\n /** For each/await, the expression ends before ` as ` or ` then `/` catch `. */\n let expr_end = close;\n\n const key = tag_info.kind;\n\n if (key === \"each\") {\n const as_idx = expr_body.lastIndexOf(\" as \");\n if (as_idx !== -1) expr_end = expr_start + as_idx;\n }\n\n if (key === \"await\") {\n const then_idx = expr_body.indexOf(\" then \");\n const catch_idx = expr_body.indexOf(\" catch \");\n const boundary = Math.min(\n then_idx === -1 ? Infinity : then_idx,\n catch_idx === -1 ? Infinity : catch_idx,\n );\n if (boundary !== Infinity) expr_end = expr_start + boundary;\n }\n\n const expr_text = content.slice(expr_start, expr_end).trim();\n\n if (expr_text.length === 0) {\n cursor = close + 1;\n continue;\n }\n\n if (key === \"render\" && !/^\\s*yield\\s*\\*/.test(expr_text)) {\n const render_arg_yields = collect_expression_yield_expressions(\n content,\n expr_start,\n expr_text,\n );\n\n if (render_arg_yields.length > 0) {\n for (const render_arg_yield of render_arg_yields) {\n const placeholder = `__SER___markup_placeholder_${helper_index}`;\n helper_index += 1;\n\n candidates.push({\n placeholder,\n start: render_arg_yield.start,\n end: render_arg_yield.end,\n expr_text: render_arg_yield.expr_text,\n filename,\n key: \"render_argument\",\n });\n\n magic.overwrite(\n render_arg_yield.start,\n render_arg_yield.end,\n placeholder,\n );\n }\n\n cursor = close + 1;\n continue;\n }\n }\n\n /** Create a placeholder and replace the expression (preserving tag prefixes). */\n const placeholder = `__SER___markup_placeholder_${helper_index}`;\n helper_index += 1;\n\n candidates.push({\n placeholder,\n start: expr_start,\n end: expr_end,\n expr_text,\n filename,\n key,\n });\n\n magic.overwrite(\n expr_start,\n expr_end,\n key === \"render\" ? `${placeholder}()` : placeholder,\n );\n\n cursor = close + 1;\n }\n\n return { code: magic.toString(), candidates };\n}\n\nfunction collect_expression_yield_expressions(\n content: string,\n expr_start: number,\n expr_text: string,\n): DeclarationYieldExpression[] {\n const source_file = ts.createSourceFile(\n \"markup-expression.ts\",\n `const __SER___expr = ${expr_text};`,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n const stmt = source_file.statements[0];\n\n if (!stmt || !ts.isVariableStatement(stmt)) {\n return [];\n }\n\n const initializer = stmt.declarationList.declarations[0]?.initializer;\n\n if (!initializer || !contains_top_level_yield_star(initializer)) {\n return [];\n }\n\n const prefix_length = source_file.text.indexOf(expr_text);\n const expressions: DeclarationYieldExpression[] = [];\n\n collect_yield_star_nodes(initializer, (yield_node) => {\n const start = expr_start + yield_node.getStart(source_file) -\n prefix_length;\n const end = expr_start + yield_node.end - prefix_length;\n const yielded_text = content.slice(start, end).trim();\n\n expressions.push({\n start,\n end,\n expr_text: yielded_text,\n });\n });\n\n return expressions;\n}\n\nfunction is_inside_excluded_block(content: string, pos: number): boolean {\n const script = find_tag_end(content, \"script\", pos);\n const style = find_tag_end(content, \"style\", pos);\n\n return (\n (script !== undefined && pos < script.end && pos > script.start) ||\n (style !== undefined && pos < style.end && pos > style.start)\n );\n}\n\nfunction is_inside_html_comment(content: string, pos: number): boolean {\n const open = content.lastIndexOf(\"<!--\", pos);\n const close = content.lastIndexOf(\"-->\", pos);\n\n return open !== -1 && open > close;\n}\n\nfunction find_tag_end(\n content: string,\n tag: string,\n after_pos: number,\n): { start: number; end: number } | undefined {\n const pattern = new RegExp(\n `<${tag}\\\\b[^>]*>([\\\\s\\\\S]*?)<\\\\/${tag}\\\\s*>`,\n \"gi\",\n );\n\n for (const match of content.matchAll(pattern)) {\n if (match.index === undefined) continue;\n const end_pos = match.index + match[0].length;\n if (match.index <= after_pos && after_pos < end_pos) {\n return { start: match.index, end: end_pos };\n }\n }\n\n return undefined;\n}\n\n/** Brace matching helpers for extracting complete markup expressions. */\n\nfunction find_closing_brace(content: string, start: number): number {\n let depth = 0;\n\n for (let i = start; i < content.length; i += 1) {\n const ch = content[i];\n\n if (ch === \"{\" && content[i - 1] !== \"$\") {\n depth += 1;\n } else if (ch === \"}\") {\n if (depth === 0) return i;\n depth -= 1;\n } else if (ch === \"'\" || ch === '\"' || ch === \"`\") {\n i = skip_string(content, i, ch);\n if (i === -1) return -1;\n } else if (ch === \"/\" && content[i + 1] === \"/\") {\n i = skip_line_comment(content, i);\n } else if (ch === \"/\" && content[i + 1] === \"*\") {\n i = skip_block_comment(content, i);\n if (i === -1) return -1;\n }\n }\n\n return -1;\n}\n\nfunction skip_string(content: string, start: number, quote: string): number {\n for (let i = start + 1; i < content.length; i += 1) {\n if (content[i] === \"\\\\\") {\n i += 1;\n continue;\n }\n if (content[i] === quote) return i;\n }\n return -1;\n}\n\nfunction skip_line_comment(content: string, start: number): number {\n for (let i = start + 2; i < content.length; i += 1) {\n if (content[i] === \"\\n\") return i;\n }\n return content.length;\n}\n\nfunction skip_block_comment(content: string, start: number): number {\n for (let i = start + 2; i < content.length; i += 1) {\n if (content[i] === \"*\" && content[i + 1] === \"/\") return i + 1;\n }\n return -1;\n}\n\ninterface TagInfo {\n kind: TagKind;\n prefix_length: number;\n}\n\nfunction get_tag_info(trimmed: string): TagInfo {\n if (trimmed.startsWith(\"#each \")) {\n return { kind: \"each\", prefix_length: \"#each \".length };\n }\n if (trimmed.startsWith(\"#await \")) {\n return { kind: \"await\", prefix_length: \"#await \".length };\n }\n if (trimmed.startsWith(\"@render \")) {\n return { kind: \"render\", prefix_length: \"@render \".length };\n }\n\n /** Strip prefix-only tags — the expression starts after the tag keyword. */\n if (trimmed.startsWith(\"#if \")) {\n return { kind: \"plain\", prefix_length: \"#if \".length };\n }\n if (trimmed.startsWith(\":else if \")) {\n return { kind: \"plain\", prefix_length: \":else if \".length };\n }\n if (trimmed.startsWith(\"#key \")) {\n return { kind: \"plain\", prefix_length: \"#key \".length };\n }\n if (trimmed.startsWith(\"@const \")) {\n return { kind: \"plain\", prefix_length: \"@const \".length };\n }\n if (trimmed.startsWith(\"@html \")) {\n return { kind: \"plain\", prefix_length: \"@html \".length };\n }\n if (trimmed.startsWith(\"@debug \")) {\n return { kind: \"plain\", prefix_length: \"@debug \".length };\n }\n\n return { kind: \"plain\", prefix_length: 0 };\n}\n\nfunction collect_declaration_yield_expressions(\n content: string,\n open: number,\n leading_ws: number,\n trimmed: string,\n): DeclarationYieldExpression[] {\n if (!is_declaration_tag_text(trimmed)) {\n return [];\n }\n\n const source_file = ts.createSourceFile(\n \"declaration-tag.ts\",\n `${trimmed};`,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n const stmt = source_file.statements[0];\n\n if (!stmt || !ts.isVariableStatement(stmt)) {\n return [];\n }\n\n const tag_start = open + 1 + leading_ws;\n\n return stmt.declarationList.declarations.flatMap((decl) => {\n const initializer = decl.initializer;\n\n if (!initializer || !contains_top_level_yield_star(initializer)) {\n return [];\n }\n\n const expressions: DeclarationYieldExpression[] = [];\n\n collect_yield_star_nodes(initializer, (yield_node) => {\n const start = tag_start + yield_node.getStart(source_file);\n const end = tag_start + yield_node.end;\n const expr_text = content.slice(start, end).trim();\n\n expressions.push({\n start,\n end,\n expr_text,\n });\n });\n\n return expressions;\n });\n}\n\nfunction is_declaration_tag_text(trimmed: string): boolean {\n return /^(?:const|let)\\s/.test(trimmed);\n}\n\nfunction is_event_callback_expression(inner: string): boolean {\n const trimmed = inner.trimStart();\n\n return /^(?:async\\s+)?(?:\\([^)]*\\)|[A-Za-z_$][\\w$]*)\\s*=>/.test(trimmed) ||\n /^(?:async\\s+)?function\\b/.test(trimmed);\n}\n\nfunction analyze_event_yield(\n inner: string,\n): {\n has_top_level_yield_star: boolean;\n} {\n const event = strip_arrow_function(inner);\n const analysis = analyze_event_body_yield_star(event.body);\n const generated_run = new RegExp(`${HELPERS.run}(?:_\\\\d+)?\\\\(function\\\\*`);\n\n if (generated_run.test(event.body)) {\n return {\n has_top_level_yield_star: false,\n };\n }\n\n return {\n has_top_level_yield_star: analysis.has_top_level_yield_star ||\n analysis.has_nested_invalid_yield_star ||\n /\\byield\\s*\\*/.test(event.body),\n };\n}\n\nfunction contains_yield_star_in_text(text: string): boolean {\n if (!/\\byield\\s*\\*/.test(text)) return false;\n\n try {\n const sf = ts.createSourceFile(\n \"expr.ts\",\n `const x = ${text};`,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n const stmt = sf.statements[0];\n if (!ts.isVariableStatement(stmt)) return false;\n const decl = stmt.declarationList.declarations[0];\n if (!decl?.initializer) return false;\n return contains_top_level_yield_star(decl.initializer);\n } catch {\n return true;\n }\n}\n\n/** Free identifier collection helpers for generated closures. */\n","import { type AST, parse } from \"svelte/compiler\";\n\nimport MagicString from \"magic-string\";\n\nimport {\n blank_script_blocks,\n create_relocations,\n create_source_map,\n inject_helpers,\n make_markup_helper_bindings,\n} from \"./apply.ts\";\nimport { classify_candidates } from \"./classify.ts\";\nimport { collect_effect_callback_bindings } from \"./effect-bindings.ts\";\nimport { emit_replacements } from \"./emit.ts\";\nimport { sanitize_markup } from \"./scan.ts\";\nimport { UnsupportedMarkupEffectPositionError } from \"$/error.ts\";\nimport type { MarkupTransformResult } from \"./types.ts\";\n\nexport type { MarkupRelocation, MarkupTransformResult } from \"./types.ts\";\n\n/**\n * Transforms Svelte markup containing `{yield* expr}` brace expressions\n * into calls to the markup runtime helpers (`value`, `promise`, `run`).\n *\n * Strategy: first find all brace expressions containing `yield*` via\n * character scanning, replace them with placeholder identifiers, then\n * parse the sanitized markup with Svelte's AST to determine the correct\n * context for each placeholder (plain expression, #each, #await, event\n * handler, etc.).\n *\n * @since 2.0.0\n * @param content - The raw `.svelte` file content.\n * @param filename - The source filename, used in error messages.\n * @returns The transformed markup and a flag indicating whether yield* was\n * found.\n */\nexport function transform_markup_effect(\n content: string,\n filename: string,\n): MarkupTransformResult {\n if (!/\\byield\\s*\\*/.test(content)) {\n return { code: content, has_yield: false };\n }\n\n /** Find all brace expressions containing yield* and replace with placeholders. */\n const work = sanitize_markup(content, filename);\n const effect_context = collect_effect_callback_bindings(content);\n const helper_context = make_markup_helper_bindings(content);\n\n if (work.candidates.length === 0) {\n return { code: content, has_yield: false };\n }\n\n /** Parse the sanitized markup with Svelte's AST. Strip <script> blocks\n * first so TypeScript syntax (import type, etc.) doesn't break the parser. */\n const clean = blank_script_blocks(work.code);\n const ast = parse(clean, { filename, modern: true }) as AST.Root;\n\n /** Match placeholders to their AST context and build replacements. */\n const classified = classify_candidates(\n ast,\n work.candidates,\n );\n const matched = new Set(\n classified.map(({ candidate }) => candidate.placeholder),\n );\n const unmatched = work.candidates.find((candidate) =>\n !matched.has(candidate.placeholder)\n );\n\n if (unmatched) {\n throw new UnsupportedMarkupEffectPositionError(\n filename,\n unmatched.expr_text,\n );\n }\n\n const replacements = emit_replacements(\n classified,\n effect_context,\n helper_context.bindings,\n helper_context.name_allocator,\n );\n const helpers = replacements.flatMap((replacement) =>\n replacement.helpers ?? []\n );\n\n const magic = new MagicString(content);\n\n replacements.sort((a, b) => b.start - a.start);\n\n for (const r of replacements) {\n magic.overwrite(r.start, r.end, r.text);\n }\n\n const helper_insertion = inject_helpers(\n magic,\n content,\n helpers,\n helper_context.bindings,\n );\n const relocations = create_relocations(replacements, helper_insertion);\n\n return {\n code: magic.toString(),\n has_yield: true,\n map: create_source_map(magic, filename),\n relocations,\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAsBA,SAAgB,aACd,mBACA,uBACA,oBACA,WAAkC;CAChC,QAAQ;CACR,YAAY;CACZ,kBAAkB;CAClB,QAAQ;CACR,SAAS;CACT,SAAS;AACX,GACA,UAAgC,CAAC,GACzB;CACR,MAAM,mBAAmB,QAAQ,oBAAoB;CACrD,MAAM,eAAe,QAAQ,gBAAgB;CAC7C,MAAM,gBAAgB,QAAQ,iBAAiB;CAE/C,MAAM,oBAAoB,SAAS,eAAe,mBAC9C,gFACA,8BAA8B,SAAS,WAAW;CAEtD,MAAM,iBAAiB,SAAS,YAAY,YACxC,sCACA,uBAAuB,SAAS,QAAQ;CAE5C,MAAM,gBAAgB,oBAClB,QACA,SAAS,WAAW,WACpB,qCACA,sBAAsB,SAAS,OAAO;CAE1C,OAAO;EACL,oBAAoB,CAAC,yBAAyB;EAC9C,iBAAiB,CAAC,sBAAsB;EACxC,gBAAgB;CAClB,EACG,OAAO,OAAO,EACd,KAAK,IAAI;AACd;;;;;;;;;;AAWA,SAAgB,yBACd,aACA,aACA,YACS;CACT,OAAO,YAAY,WAAW,MAAM,SAAS;EAC3C,IACE,CAAC,GAAG,oBAAoB,IAAI,KAC5B,CAAC,GAAG,gBAAgB,KAAK,eAAe,KACxC,KAAK,gBAAgB,SAAS,aAE9B,OAAO;EAGT,MAAM,SAAS,KAAK;EAEpB,IAAI,CAAC,UAAU,OAAO,YACpB,OAAO;EAGT,IAAI,OAAO,MAAM,SAAS,YACxB,OAAO;EAGT,MAAM,iBAAiB,OAAO;EAE9B,IAAI,CAAC,gBACH,OAAO;EAGT,IAAI,GAAG,kBAAkB,cAAc,GACrC,OAAO,eAAe,KAAK,SAAS;EAGtC,OAAO,eAAe,SAAS,MAC5B,YAAY,CAAC,QAAQ,cAAc,QAAQ,KAAK,SAAS,UAC5D;CACF,CAAC;AACH;;;;;;;;AAyBA,SAAgB,gCACd,aACU;CACV,OAAO,YAAY,WAAW,QAAQ,+BAA+B;AACvE;AAEA,SAAS,gCAAgC,MAA8B;CACrE,IAAI,GAAG,oBAAoB,IAAI,GAC7B,OAAO,6BAA6B,IAAI;CAG1C,IAAI,GAAG,oBAAoB,IAAI,GAC7B,OAAO,KAAK,gBAAgB,aAAa,SAAS,SAChD,0BAA0B,KAAK,IAAI,CACrC;CAGF,IACE,GAAG,sBAAsB,IAAI,KAC7B,GAAG,mBAAmB,IAAI,KAC1B,GAAG,uBAAuB,IAAI,KAC9B,GAAG,uBAAuB,IAAI,KAC9B,GAAG,kBAAkB,IAAI,KACzB,GAAG,oBAAoB,IAAI,GAE3B,OAAO,KAAK,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC;CAGzC,OAAO,CAAC;AACV;AAEA,SAAS,6BAA6B,MAAsC;CAC1E,MAAM,SAAS,KAAK;CAEpB,IAAI,CAAC,QACH,OAAO,CAAC;CAGV,OAAO;EACL,OAAO,MAAM;EACb,OAAO,iBAAiB,GAAG,kBAAkB,OAAO,aAAa,IAC7D,OAAO,cAAc,KAAK,OAC1B,KAAA;EACJ,OAAO,iBAAiB,GAAG,eAAe,OAAO,aAAa,IAC1D,OAAO,cAAc,SAAS,KAAK,YAAY,QAAQ,KAAK,IAAI,IAChE,KAAA;CACN,EAAE,KAAK,EAAE,QAAQ,SAAyB,SAAS,KAAA,CAAS;AAC9D;AAEA,SAAS,0BAA0B,MAAgC;CACjE,IAAI,GAAG,aAAa,IAAI,GACtB,OAAO,CAAC,KAAK,IAAI;CAGnB,OAAO,KAAK,SAAS,SAAS,YAAY;EACxC,IAAI,GAAG,oBAAoB,OAAO,GAChC,OAAO,CAAC;EAGV,OAAO,0BAA0B,QAAQ,IAAI;CAC/C,CAAC;AACH;;;ACpMA,MAAa,UAAU;CACrB,OAAO;CACP,SAAS;CACT,KAAK;AACP;;;ACUA,SAAgB,kBACd,OACA,UACyB;CAOzB,OANY,MAAM,YAAY;EAC5B,OAAO;EACP,gBAAgB;EAChB,QAAQ;CACV,CAES;AACX;AAEA,SAAgB,oBAAoB,SAAyB;CAC3D,OAAO,QAAQ,QACb,2CACC,UAAU;EAET,OADc,MAAM,MAAM,IACf,EAAE,KAAK,MAAM,IAAI,OAAO,EAAE,MAAM,CAAC,EAAE,KAAK,IAAI;CACzD,CACF;AACF;AAEA,SAAgB,eACd,OACA,SACA,UAA+B,CAAC,GAChC,WAAiC,SACV;CACvB,MAAM,iBAAiB,sBAAsB,OAAO;CACpD,MAAM,gBAAgB,QAAQ,QAAQ,WAAW,CAAC,iBAAiB,MAAM,CAAC;CAE1E,MAAM,kBAGD;EACH,qBAAqB,SAAS,MAAM;EACpC,uBAAuB,SAAS,QAAQ;EACxC,mBAAmB,SAAS,IAAI;EAChC,GAAG;EACH,GAAG;CACL,EAAE,KAAK,WAAW,OAAO,WAAW,WAAW,EAAE,MAAM,OAAO,IAAI,MAAM;CAExE,MAAM,eAAe,gBAAgB,KAAK,YAAY,QAAQ,IAAI,EAAE,KAClE,IACF;CAEA,MAAM,aAAa,yBAAyB,OAAO;CAEnD,IAAI,YAAY;EACd,MAAM,OAAO,KAAK,aAAa;EAE/B,MAAM,WAAW,WAAW,KAAK,IAAI;EAErC,OAAO;GACL,OAAO,WAAW;GAClB;GACA,aAAa,2BAA2B,iBAAiB,IAAI;EAC/D;CACF,OAAO;EACL,MAAM,OAAO,aAAa,aAAa;EAEvC,MAAM,QAAQ,IAAI;EAElB,OAAO;GACL,OAAO;GACP;GACA,aAAa,2BAA2B,iBAAiB,YAAY;EACvE;CACF;AACF;AAEA,SAAgB,4BACd,SAIA;CACA,MAAM,aAAa,yBAAyB,OAAO;CAMnD,MAAM,iBAAiB,oBALD,aAClB,6BACA,QAAQ,MAAM,WAAW,OAAO,WAAW,GAAG,CAChD,IACE,CAAC,CACmD;CAExD,OAAO;EACL,UAAU;GACR,OAAO,eAAe,QAAQ,QAAQ,KAAK;GAC3C,SAAS,eAAe,QAAQ,QAAQ,OAAO;GAC/C,KAAK,eAAe,QAAQ,QAAQ,GAAG;EACzC;EACA;CACF;AACF;AAEA,SAAgB,mBACd,cACA,kBACoB;CACpB,MAAM,QAAQ,CACZ,oBAAoB;EAClB,OAAO,iBAAiB;EACxB,eAAe;EACf,gBAAgB,iBAAiB,KAAK;CACxC,GACA,GAAG,aAAa,KAAK,iBAAiB;EACpC,OAAO,YAAY;EACnB,eAAe,YAAY,MAAM,YAAY;EAC7C,gBAAgB,YAAY,KAAK;CACnC,EAAE,CACJ,EAAE,OAAO,OAAO;CAMhB,MAAM,0BAA0B,aAAa,SAAS,gBAAgB;EACpE,IAAI,CAAC,YAAY,YACf,OAAO,CAAC;EAGV,MAAM,eAAe,MAClB,QAAQ,SAAS,KAAK,QAAQ,YAAY,KAAK,EAC/C,QACE,OAAO,SAAS,QAAQ,KAAK,iBAAiB,KAAK,eACpD,CACF;EACF,MAAM,kBAAkB,YAAY,QAAQ;EAE5C,OAAO,CAAC;GACN,eAAe,YAAY,WAAW;GACtC,aAAa,YAAY,WAAW;GACpC,gBAAgB,kBACd,YAAY,WAAW;GACzB,cAAc,kBACZ,YAAY,WAAW;EAC3B,CAAC;CACH,CAAC;CAED,MAAM,qBAAqB,kBAAkB,aAAa,KACvD,gBAAgB;EACf,eAAe,WAAW;EAC1B,aAAa,WAAW;EACxB,gBAAgB,iBAAiB,QAC/B,WAAW;EACb,cAAc,iBAAiB,QAC7B,WAAW;CACf,EACF,KAAK,CAAC;CAEN,OAAO,CACL,GAAG,yBACH,GAAG,kBACL;AACF;AAEA,SAAS,2BACP,UAIA,QACqB;CACrB,MAAM,cAAmC,CAAC;CAC1C,IAAI,SAAS,OAAO;CAEpB,KAAK,MAAM,WAAW,UAAU;EAC9B,IAAI,QAAQ,YACV,YAAY,KAAK;GACf,eAAe,QAAQ,WAAW;GAClC,aAAa,QAAQ,WAAW;GAChC,6BAA6B,SAC3B,QAAQ,WAAW;GACrB,2BAA2B,SACzB,QAAQ,WAAW;EACvB,CAAC;EAGH,UAAU,QAAQ,KAAK,SAAS;CAClC;CAEA,OAAO;AACT;AAEA,SAAS,yBACP,SAC4C;CAG5C,KAAK,MAAM,SAAS,QAAQ,SAAS,4CAAO,GAAG;EAC7C,IAAI,MAAM,UAAU,KAAA,GAAW;EAE/B,MAAM,QAAQ,MAAM,MAAM;EAC1B,IACE,iCAAiC,KAAK,KAAK,KAC3C,aAAa,KAAK,KAAK,GAEvB;EAGF,MAAM,WAAW,MAAM,GAAG,QAAQ,GAAG,IAAI;EACzC,OAAO;GACL,OAAO,MAAM,QAAQ;GACrB,KAAK,MAAM,QAAQ,MAAM,GAAG,SAAS;EACvC;CACF;AAGF;AAEA,SAAS,sBACP,SACqB;CACrB,MAAM,uBAAO,IAAI,IAAY;CAE7B,OAAO,QAAQ,QAAQ,WAAW;EAChC,IAAI,CAAC,iBAAiB,MAAM,GAC1B,OAAO;EAGT,IAAI,KAAK,IAAI,OAAO,IAAI,GACtB,OAAO;EAGT,KAAK,IAAI,OAAO,IAAI;EAEpB,OAAO;CACT,CAAC;AACH;AAEA,SAAS,iBAAiB,QAAoC;CAC5D,OAAO,OAAO,KAAK,UAAU,EAAE,WAAW,SAAS;AACrD;AAEA,SAAS,6BAA6B,gBAAkC;CAStE,OAAO,gCARa,GAAG,iBACrB,oBACA,gBACA,GAAG,aAAa,QAChB,MACA,GAAG,WAAW,EAGiC,CAAC;AACpD;AAEA,SAAS,oBAAoB,eAE3B;CACA,MAAM,aAAa,IAAI,IAAI,aAAa;CAExC,OAAO,EACL,QAAQ,MAAsB;EAC5B,IAAI,YAAY;EAChB,IAAI,SAAS;EAEb,OAAO,WAAW,IAAI,SAAS,GAAG;GAChC,YAAY,GAAG,KAAK,GAAG;GACvB,UAAU;EACZ;EAEA,WAAW,IAAI,SAAS;EAExB,OAAO;CACT,EACF;AACF;;;;;;;;;;;;AC5QA,SAAgB,oBACd,KACA,YACsD;CACtD,MAAM,iBAAiB,IAAI,IACzB,WAAW,KAAK,cAAc,CAAC,UAAU,aAAa,SAAS,CAAC,CAClE;CAEA,MAAM,aAAmE,CAAC;CAC1E,MAAM,0BAAU,IAAI,IAAY;CAEhC,SAAS,IAAI,UAAU,gBAAgB,SAAS,UAAU;CAE1D,OAAO;AACT;AAEA,SAAS,SACP,UACA,YACA,SACA,YACM;CACN,KAAK,MAAM,QAAQ,SAAS,OAC1B,eAAe,MAAM,YAAY,SAAS,UAAU;AAExD;AAEA,SAAS,eACP,MACA,YACA,SACA,YACM;CACN,QAAQ,KAAK,MAAb;EACE,KAAK;GACH,oBACE,KAAK,YACL,SACA,YACA,SACA,UACF;GACA;EAEF,KAAK;GACH,oBAAoB,KAAK,MAAM,SAAS,YAAY,SAAS,UAAU;GACvE,SAAS,KAAK,YAAY,YAAY,SAAS,UAAU;GACzD,IAAI,KAAK,WACP,SAAS,KAAK,WAAW,YAAY,SAAS,UAAU;GAE1D;EAEF,KAAK;GACH,oBACE,KAAK,YACL,QACA,YACA,SACA,UACF;GACA,SAAS,KAAK,MAAM,YAAY,SAAS,UAAU;GACnD,IAAI,KAAK,UACP,SAAS,KAAK,UAAU,YAAY,SAAS,UAAU;GAEzD;EAEF,KAAK;GACH,oBACE,KAAK,YACL,SACA,YACA,SACA,UACF;GACA,IAAI,KAAK,SACP,SAAS,KAAK,SAAS,YAAY,SAAS,UAAU;GAExD,IAAI,KAAK,MAAM,SAAS,KAAK,MAAM,YAAY,SAAS,UAAU;GAClE,IAAI,KAAK,OAAO,SAAS,KAAK,OAAO,YAAY,SAAS,UAAU;GACpE;EAEF,KAAK;GACH,oBACE,KAAK,YACL,UACA,YACA,SACA,UACF;GACA;EAEF,KAAK;GACH,oBACE,KAAK,YACL,SACA,YACA,SACA,UACF;GACA;EAEF,KAAK,YAEH;EAEF,KAAK;EACL,KAAK;GACH,yBAAyB,MAAM,YAAY,SAAS,UAAU;GAC9D;EAEF,KAAK;GACH,oBACE,KAAK,YACL,SACA,YACA,SACA,UACF;GACA,SAAS,KAAK,UAAU,YAAY,SAAS,UAAU;GACvD;EAEF,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;GACH,yBAAyB,MAAM,YAAY,SAAS,UAAU;GAC9D,SAAS,KAAK,UAAU,YAAY,SAAS,UAAU;GACvD;EAEF,SACE;CACJ;AACF;AAWA,SAAS,yBACP,MAIA,YACA,SACA,YACM;CACN,KAAK,MAAM,QAAQ,KAAK,YAAY,cAAc;EAChD,IAAI,CAAC,KAAK,MACR;EAGF,oBAAoB,KAAK,MAAM,SAAS,YAAY,SAAS,UAAU;CACzE;AACF;AAYA,SAAS,yBACP,MACA,YACA,SACA,YACM;CACN,KAAK,MAAM,QAAQ,KAAK,YAAY;EAClC,IACE,KAAK,SAAS,eACd,KAAK,QACL,wBAAwB,KAAK,IAAI,GACjC;GACA,sBACE,KAAK,OAIL,SACA,YACA,SACA,UACF;GACA;EACF;EAEA,IAAI,KAAK,SAAS,iBAAiB,KAAK,YAAY;GAClD,oBACE,KAAK,YACL,SACA,YACA,SACA,UACF;GACA;EACF;CACF;AACF;AAEA,SAAS,wBAAwB,MAAuB;CACtD,OAAO,KAAK,WAAW,KAAK,KAAK,WAAW,KAAK,IAAI;AACvD;AAEA,SAAS,sBACP,OACA,MACA,YACA,SACA,YACM;CACN,IAAI,UAAU,MACZ;CAGF,IAAI,MAAM,QAAQ,KAAK,GAAG;EACxB,KAAK,MAAM,QAAQ,OACjB,IAAI,KAAK,SAAS,iBAChB,oBACE,KAAK,YACL,MACA,YACA,SACA,UACF;EAGJ;CACF;CAEA,oBACE,MAAM,YACN,MACA,YACA,SACA,UACF;AACF;AAQA,SAAS,oBACP,YACA,MACA,YACA,SACA,YACM;CACN,IAAI,CAAC,YACH;CAGF,MAAM,mBAAmB,gBAAgB,YAAY,UAAU;CAE/D,KAAK,MAAM,aAAa,kBAAkB;EACxC,IAAI,QAAQ,IAAI,UAAU,WAAW,GACnC;EAGF,QAAQ,IAAI,UAAU,WAAW;EACjC,WAAW,KAAK;GACd;GACA,MAAM,uBAAuB,WAAW,IAAI;EAC9C,CAAC;CACH;AACF;AAEA,SAAS,uBACP,WACA,cACS;CACT,IAAI,UAAU,QAAQ,mBACpB,OAAO;CAGT,OAAO;AACT;AAEA,SAAS,gBACP,YACA,YACmB;CACnB,MAAM,QAA2B,CAAC;CAIlC,uBACE,YACA,4BACA,IANqB,IAMZ,mBACT,IAN4B,IAMZ,GAChB,KACF;CAEA,OAAO;AACT;AAEA,SAAS,uBACP,OACA,YACA,YACA,mBACA,OACM;CACN,IAAI,MAAM,QAAQ,KAAK,GAAG;EACxB,KAAK,MAAM,QAAQ,OACjB,uBACE,MACA,YACA,YACA,mBACA,KACF;EAGF;CACF;CAEA,IAAI,CAAC,UAAU,KAAK,KAAK,WAAW,IAAI,KAAK,GAC3C;CAGF,WAAW,IAAI,KAAK;CAEpB,IAAI,MAAM,SAAS,gBAAgB,OAAO,MAAM,SAAS,UAAU;EACjE,MAAM,YAAY,WAAW,IAAI,MAAM,IAAI;EAE3C,IAAI,aAAa,CAAC,kBAAkB,IAAI,UAAU,WAAW,GAAG;GAC9D,kBAAkB,IAAI,UAAU,WAAW;GAC3C,MAAM,KAAK,SAAS;EACtB;CACF;CAEA,KAAK,MAAM,SAAS,OAAO,OAAO,KAAK,GACrC,uBACE,OACA,YACA,YACA,mBACA,KACF;AAEJ;AAEA,SAAS,UAAU,OAAkD;CACnE,OAAO,OAAO,UAAU,YAAY,UAAU;AAChD;;;ACzXA,MAAM,wBAAwB;AAC9B,MAAM,uBAAuB;AAC7B,MAAM,wBAAwB;;;;;;;;;;;;;;;AAmD9B,SAAgB,iCACd,SAC8B;CAC9B,MAAM,QAAQ,0BAA0B;CACxC,MAAM,UAAU,sBAAsB,OAAO;CAE7C,KAAK,MAAM,UAAU,SASnB,6BARoB,GAAG,iBACrB,uBACA,QACA,GAAG,aAAa,QAChB,MACA,GAAG,WAAW,EAGuB,GAAG,KAAK;CAGjD,+BAA+B,KAAK;CAEpC,MAAM,UAAU,sBAAsB,KAAK;CAE3C,OAAO;EACL,qBAAqB,IAAI,IAAI,MAAM,mBAAmB;EACtD,qBAAqB,IAAI,IAAI,MAAM,mBAAmB;EACtD,sBAAsB,IAAI,IAAI,MAAM,oBAAoB;EACxD,gBAAgB,IAAI,IAAI,MAAM,cAAc;EAC5C,oBAAoB,QAAQ;EAC5B,gBAAgB,QAAQ,cACpB,EAAE,MAAM,QAAQ,YAAY,IAC5B,KAAA;CACN;AACF;AAEA,SAAS,4BAAgD;CACvD,OAAO;EACL,qBAAqB,CAAC;EACtB,qBAAqB,CAAC;EACtB,sBAAsB,CAAC;EACvB,gCAAgB,IAAI,IAAI;EACxB,6BAAa,IAAI,IAAI;EACrB,wBAAwB;CAC1B;AACF;AAEA,SAAS,sBAAsB,SAA2B;CAGxD,OAAO,CAAC,GAAG,QAAQ,SAAS,0CAAO,CAAC,EAAE,KAAK,UAAU,MAAM,MAAM,EAAE;AACrE;AAEA,SAAS,6BACP,aACA,OACM;CACN,KAAK,MAAM,aAAa,YAAY,YAClC,0BAA0B,WAAW,KAAK;AAE9C;AAEA,SAAS,0BACP,WACA,OACM;CACN,IAAI,GAAG,oBAAoB,SAAS,GAAG;EACrC,uBAAuB,WAAW,KAAK;EACvC;CACF;CAEA,IAAI,GAAG,0BAA0B,SAAS,GAAG;EAC3C,MAAM,YAAY,IAAI,UAAU,KAAK,IAAI;EACzC;CACF;CAEA,IAAI,GAAG,oBAAoB,SAAS,GAAG;EACrC,KAAK,MAAM,eAAe,UAAU,gBAAgB,cAClD,qBAAqB,YAAY,MAAM,MAAM,WAAW;EAG1D;CACF;CAEA,IACE,GAAG,sBAAsB,SAAS,KAClC,GAAG,mBAAmB,SAAS,KAC/B,GAAG,uBAAuB,SAAS,KACnC,GAAG,uBAAuB,SAAS,KACnC,GAAG,kBAAkB,SAAS,KAC9B,GAAG,oBAAoB,SAAS;MAE5B,UAAU,MACZ,MAAM,YAAY,IAAI,UAAU,KAAK,IAAI;CAAA;AAG/C;AAEA,SAAS,uBACP,WACA,OACM;CACN,IAAI,CAAC,GAAG,gBAAgB,UAAU,eAAe,GAC/C;CAGF,MAAM,cAAc,UAAU,gBAAgB;CAC9C,MAAM,SAAS,UAAU;CAEzB,IAAI,CAAC,QACH;CAGF,IAAI,OAAO,MACT,MAAM,YAAY,IAAI,OAAO,KAAK,IAAI;CAGxC,MAAM,iBAAiB,OAAO;CAE9B,IAAI,CAAC,gBACH;CAGF,IAAI,GAAG,kBAAkB,cAAc,GAAG;EACxC,iCACE,aACA,eAAe,KAAK,MACpB,KACF;EACA;CACF;CAEA,KAAK,MAAM,WAAW,eAAe,UACnC,6BAA6B,aAAa,SAAS,KAAK;AAE5D;AAEA,SAAS,iCACP,aACA,YACA,OACM;CACN,MAAM,YAAY,IAAI,UAAU;CAEhC,IAAI,gBAAgB,sBAAsB;EACxC,iBAAiB,MAAM,qBAAqB,UAAU;EACtD;CACF;CAEA,IAAI,gBAAgB,uBAClB,iBAAiB,MAAM,sBAAsB,UAAU;AAE3D;AAEA,SAAS,6BACP,aACA,SACA,OACM;CACN,MAAM,gBAAgB,QAAQ,cAAc,QAAQ,QAAQ,KAAK;CACjE,MAAM,aAAa,QAAQ,KAAK;CAEhC,MAAM,YAAY,IAAI,UAAU;CAEhC,IAAI,gBAAgB,yBAAyB,kBAAkB,UAAU;EACvE,iBAAiB,MAAM,qBAAqB,UAAU;EACtD;CACF;CAEA,IAAI,gBAAgB,sBAClB,MAAM,eAAe,IAAI,YAAY,aAAa;AAEtD;AAEA,SAAS,qBACP,MACA,aACM;CACN,IAAI,GAAG,aAAa,IAAI,GAAG;EACzB,YAAY,IAAI,KAAK,IAAI;EACzB;CACF;CAEA,KAAK,MAAM,WAAW,KAAK,UAAU;EACnC,IAAI,GAAG,oBAAoB,OAAO,GAChC;EAGF,qBAAqB,QAAQ,MAAM,WAAW;CAChD;AACF;AAEA,SAAS,+BAA+B,OAAiC;CACvE,IAAI,mBAAmB,KAAK,KAAK,MAAM,YAAY,IAAI,QAAQ,GAC7D;CAGF,iBAAiB,MAAM,qBAAqB,QAAQ;CACpD,MAAM,yBAAyB;AACjC;AAEA,SAAS,mBAAmB,OAAoC;CAC9D,OAAO,MAAM,oBAAoB,SAAS,KACxC,MAAM,oBAAoB,SAAS,KACnC,MAAM,qBAAqB,SAAS,KACpC,MAAM,eAAe,OAAO;AAChC;AAEA,SAAS,sBACP,OAC8C;CAC9C,MAAM,gBAAgB,MAAM,oBAAoB;CAEhD,IAAI,eACF,OAAO;EACL,YAAY;EACZ,aAAa,MAAM,yBACf,qCACA,KAAA;CACN;CAGF,MAAM,gBAAgB,MAAM,oBAAoB;CAEhD,IAAI,eACF,OAAO,EAAE,YAAY,cAAc;CAGrC,MAAM,iBAAiB,MAAM,qBAAqB;CAElD,IAAI,gBACF,OAAO,EAAE,YAAY,GAAG,eAAe,SAAS;CAGlD,MAAM,iBAAiB,2BAA2B,MAAM,WAAW;CAEnE,OAAO;EACL,YAAY;EACZ,aAAa,sBAAsB,eAAe;CACpD;AACF;AAEA,SAAS,2BAA2B,aAA0C;CAC5E,IAAI,CAAC,YAAY,IAAI,qBAAqB,GACxC,OAAO;CAGT,IAAI,QAAQ;CAEZ,OAAO,YAAY,IAAI,GAAG,sBAAsB,GAAG,OAAO,GACxD,SAAS;CAGX,OAAO,GAAG,sBAAsB,GAAG;AACrC;AAEA,SAAS,iBAAiB,OAAiB,MAAoB;CAC7D,IAAI,MAAM,SAAS,IAAI,GACrB;CAGF,MAAM,KAAK,IAAI;AACjB;;;;;;;;;;;;;;;;AChTA,SAAgB,mBAAmB,MAAc,SAAyB;CACxE,OAAO,IAAI,KAAK,KAAK;AACvB;;;;;;;;AASA,IAAa,kBAAb,cAAqC,MAAM;;;;;;CAMzC;CAEA,YAAY,SAAiB,UAAkB;EAC7C,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,WAAW;CAClB;AACF;;;;;;;AAQA,IAAa,yBAAb,cAA4C,gBAAgB;;;;;;CAM1D;CAEA,YAAY,UAAkB,gBAAwB;EACpD,MACE;GACE,mBACE,wBACA,GAAG,SAAS,oDACd;GACA;GACA;GACA;GACA;EACF,EAAE,KAAK,IAAI,GACX,QACF;EACA,KAAK,OAAO;EACZ,KAAK,iBAAiB;CACxB;AACF;;;;;;;AAQA,IAAa,6BAAb,cAAgD,gBAAgB;;;;;;CAM9D;;;;;;CAOA;CAEA,YAAY,WAAmB,iBAAyB,UAAkB;EACxE,MACE;GACE,mBACE,6BACA,GAAG,SAAS,iCAAiC,UAAU,IACzD;GACA,GAAG,UAAU;GACb;GACA;GACA;EACF,EAAE,KAAK,IAAI,GACX,QACF;EACA,KAAK,OAAO;EACZ,KAAK,YAAY;EACjB,KAAK,kBAAkB;CACzB;AACF;;;;;;;;;;;;;;;AAeA,IAAa,kCAAb,cAAqD,gBAAgB;;;;;;CAMnE;CAEA,YAAY,UAAkB,iBAAyB;EACrD,MACE;GACE,mBACE,kCACA,GAAG,SAAS,0FACd;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,EAAE,KAAK,IAAI,GACX,QACF;EACA,KAAK,OAAO;EACZ,KAAK,kBAAkB;CACzB;AACF;;;;;;;;;;;;;;;;;;;;AAqBA,IAAa,gCAAb,cAAmD,gBAAgB;;;;;;CAMjE;CAEA,YAAY,UAAkB,iBAAyB;EACrD,MACE;GACE,mBACE,0CACA,GAAG,SAAS,yFACd;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,EAAE,KAAK,IAAI,GACX,QACF;EACA,KAAK,OAAO;EACZ,KAAK,kBAAkB;CACzB;AACF;;;;;;;;;;;;;;;AAgBA,IAAa,uCAAb,cAA0D,gBAAgB;;;;;;CAMxE;CAEA,YAAY,UAAkB,iBAAyB;EACrD,MACE;GACE,mBACE,sCACA,GAAG,SAAS,iDACd;GACA;GACA;GACA;GACA;EACF,EAAE,KAAK,IAAI,GACX,QACF;EACA,KAAK,OAAO;EACZ,KAAK,kBAAkB;CACzB;AACF;;;;;;;;;;ACjPA,SAAgB,qBACd,MACwE;CACxE,MAAM,YAAY,KAAK,QAAQ,IAAI;CAEnC,IAAI,cAAc,IAChB,OAAO;EAAE,QAAQ;EAAM,MAAM;EAAM,YAAY;EAAG,UAAU,KAAK;CAAO;CAG1E,MAAM,SAAS,KAAK,MAAM,GAAG,SAAS,EAAE,KAAK;CAC7C,MAAM,WAAW,KAAK,MAAM,YAAY,CAAC;CACzC,MAAM,aAAa,SAAS,SAAS,SAAS,UAAU,EAAE;CAC1D,IAAI,aAAa,YAAY,IAAI;CACjC,IAAI,WAAW,KAAK,UAAU,SAAS,SAAS,SAAS,QAAQ,EAAE;CACnE,IAAI,OAAO,KAAK,MAAM,YAAY,QAAQ;CAE1C,IAAI,KAAK,WAAW,GAAG,KAAK,KAAK,SAAS,GAAG,GAAG;EAC9C,cAAc;EACd,YAAY;EACZ,OAAO,KAAK,MAAM,GAAG,EAAE;CACzB;CAEA,MAAM,kBAAkB,KAAK,SAAS,KAAK,UAAU,EAAE;CACvD,MAAM,mBAAmB,KAAK,SAAS,KAAK,QAAQ,EAAE;CAEtD,cAAc;CACd,YAAY;CACZ,OAAO,KAAK,KAAK;CAEjB,IAAI,KAAK,SAAS,GAAG,GAAG;EACtB,OAAO,KAAK,MAAM,GAAG,EAAE;EACvB,YAAY;CACd;CAEA,OAAO;EAAE;EAAQ;EAAM;EAAY;CAAS;AAC9C;;;;;;;;AASA,SAAgB,gCAAgC,MAAuB;CACrE,MAAM,UAAU,4BAA4B,KAAK;CAQjD,MAAM,OAPK,GAAG,iBACZ,eACA,SACA,GAAG,aAAa,QAChB,MACA,GAAG,WAAW,EAEF,EAAE,WAAW;CAE3B,IAAI,CAAC,GAAG,oBAAoB,IAAI,GAC9B,OAAO;CAGT,MAAM,cAAc,KAAK,gBAAgB,aAAa,IAAI;CAE1D,OAAO,gBAAgB,KAAA,MACpB,GAAG,gBAAgB,WAAW,KAC7B,GAAG,qBAAqB,WAAW;AACzC;;;;;;;;;;;;;;;AAgBA,SAAgB,8BAA8B,MAG5C;CACA,MAAM,UAAU,+BAA+B,KAAK;CAQpD,MAAM,OAPK,GAAG,iBACZ,YACA,SACA,GAAG,aAAa,QAChB,MACA,GAAG,WAAW,EAEF,EAAE,WAAW;CAE3B,IAAI,CAAC,GAAG,sBAAsB,IAAI,KAAK,CAAC,KAAK,MAC3C,OAAO;EACL,0BAA0B;EAC1B,+BAA+B,eAAe,KAAK,IAAI;CACzD;CAGF,MAAM,SAAS;EACb,0BAA0B;EAC1B,+BAA+B;CACjC;CAEA,iBAAiB,KAAK,MAAM,aAAa,MAAM;CAE/C,OAAO;AACT;;;;;;;;AASA,SAAgB,yBAAyB,WAA6B;CACpE,MAAM,UAAU,mCAAmC,UAAU;CAC7D,IAAI;CAEJ,IAAI;EACF,KAAK,GAAG,iBACN,WACA,SACA,GAAG,aAAa,QAChB,MACA,GAAG,WAAW,EAChB;CACF,QAAQ;EACN,OAAO,CAAC;CACV;CAEA,MAAM,KAAK,GAAG,WAAW;CAEzB,IAAI,CAAC,GAAG,sBAAsB,EAAE,KAAK,CAAC,GAAG,MACvC,OAAO,CAAC;CAGV,MAAM,MAAgB,CAAC;CACvB,MAAM,yBAAS,IAAI,IAAY;CAC/B,MAAM,uBAAO,IAAI,IAAY;CAE7B,UAAU,GAAG,MAAM,QAAQ,MAAM,GAAG;CAEpC,OAAO;AACT;AAEA,SAAS,UACP,MACA,QACA,MACA,KACM;CACN,IACE,GAAG,gBAAgB,IAAI,KACvB,GAAG,qBAAqB,IAAI,KAC5B,GAAG,sBAAsB,IAAI,GAC7B;EACA,MAAM,SAAS,IAAI,IAAI,MAAM;EAE7B,IAAI,GAAG,sBAAsB,IAAI,KAAK,KAAK,MACzC,OAAO,IAAI,KAAK,KAAK,IAAI;EAG3B,KAAK,MAAM,aAAa,KAAK,YAC3B,kBAAkB,UAAU,MAAM,MAAM;EAG1C,IAAI,KAAK,MACP,UAAU,KAAK,MAAM,QAAQ,MAAM,GAAG;EAGxC;CACF;CAEA,IAAI,GAAG,sBAAsB,IAAI,GAAG;EAClC,IAAI,KAAK,aACP,UAAU,KAAK,aAAa,QAAQ,MAAM,GAAG;EAG/C,kBAAkB,KAAK,MAAM,MAAM;EAEnC;CACF;CAEA,IAAI,GAAG,oBAAoB,IAAI,GAC7B;CAGF,IAAI,GAAG,aAAa,IAAI,GAAG;EACzB,IACE,KAAK,SAAS,WACd,KAAK,SAAS,eACd,KAAK,SAAS,UACd,KAAK,SAAS,UACd,KAAK,SAAS,WACd,KAAK,SAAS,QAEd;EAGF,IAAI,wBAAwB,IAAI,GAC9B;EAGF,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,IAAI,GAAG;GAClD,KAAK,IAAI,KAAK,IAAI;GAClB,IAAI,KAAK,KAAK,IAAI;EACpB;EACA;CACF;CAEA,KAAK,cAAc,UAAU,UAAU,OAAO,QAAQ,MAAM,GAAG,CAAC;AAClE;AAEA,SAAS,kBAAkB,MAAsB,QAA2B;CAC1E,IAAI,GAAG,aAAa,IAAI,GAAG;EACzB,OAAO,IAAI,KAAK,IAAI;EACpB;CACF;CAEA,KAAK,MAAM,WAAW,KAAK,UAAU;EACnC,IAAI,GAAG,oBAAoB,OAAO,GAChC;EAGF,kBAAkB,QAAQ,MAAM,MAAM;CACxC;AACF;AASA,SAAS,iBACP,MACA,SACA,QACM;CACN,IAAIA,2BAAyB,IAAI,GAAG;EAClC,IAAI,YAAY,aACd,OAAO,2BAA2B;OAC7B,IAAI,YAAY,kBACrB,OAAO,gCAAgC;EAGzC,KAAK,cAAc,UAAU,iBAAiB,OAAO,SAAS,MAAM,CAAC;EACrE;CACF;CAEA,IAAI,4BAA4B,IAAI,GAAG;EACrC,MAAM,eAAe,+BAA+B,IAAI,IACpD,qBACA;EAEJ,KAAK,cAAc,UAAU,iBAAiB,OAAO,cAAc,MAAM,CAAC;EAC1E;CACF;CAEA,KAAK,cAAc,UAAU,iBAAiB,OAAO,SAAS,MAAM,CAAC;AACvE;AAEA,SAAS,4BAA4B,MAAwB;CAC3D,OACE,GAAG,gBAAgB,IAAI,KACvB,GAAG,qBAAqB,IAAI,KAC5B,GAAG,sBAAsB,IAAI,KAC7B,GAAG,oBAAoB,IAAI,KAC3B,GAAG,yBAAyB,IAAI,KAChC,GAAG,yBAAyB,IAAI;AAEpC;AAEA,SAAS,+BAA+B,MAAwB;CAC9D,QACG,GAAG,qBAAqB,IAAI,KAAK,GAAG,sBAAsB,IAAI,KAC7D,GAAG,oBAAoB,IAAI,MAC7B,KAAK,kBAAkB,KAAA;AAE3B;AAEA,SAASA,2BAAyB,MAAwB;CACxD,IAAI,GAAG,kBAAkB,IAAI,GAC3B,OAAO,KAAK,kBAAkB,KAAA;CAGhC,OACE,GAAG,mBAAmB,IAAI,KAC1B,KAAK,cAAc,SAAS,GAAG,WAAW,iBAC1C,GAAG,aAAa,KAAK,IAAI,KACzB,KAAK,KAAK,SAAS;AAEvB;AAEA,SAAS,wBAAwB,MAA8B;CAC7D,MAAM,SAAS,KAAK;CAEpB,OACG,GAAG,2BAA2B,MAAM,KAAK,OAAO,SAAS,QACzD,GAAG,qBAAqB,MAAM,KAAK,OAAO,SAAS,QACnD,GAAG,iBAAiB,MAAM,KAAK,OAAO,iBAAiB,QACxD,GAAG,kBAAkB,MAAM,KAC3B,GAAG,kBAAkB,MAAM;AAE/B;;;ACvTA,MAAM,uBAAuB,IAAI,IAAI,CACnC,CAAC,SAAS,aAAa,GACvB,CAAC,cAAc,kBAAkB,CACnC,CAAC;AAED,MAAM,6BAA6B,IAAI,IAAI;CACzC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,4BAA4B,IAAI,IAAI;CACxC;CACA;CACA;AACF,CAAC;;;;;;;;;;;;;;;;;;;;;AAyCD,SAAgB,iCACd,WACA,UACqD;CAErD,MAAM,cAAc,8BAAY,UAAU;CAC1C,MAAM,cAAc,GAAG,iBACrB,uBACA,aACA,GAAG,aAAa,QAChB,MACA,GAAG,WAAW,EAChB;CACA,MAAM,YAAY,YAAY,WAAW;CACzC,MAAM,QAAQ,IAAI,YAAY,SAAS;CACvC,MAAM,UAA0B;EAC9B;EACA;EACA;EACA,QAAQ;EACR;EACA,SAAS;EACT,cAAc;CAChB;CAEA,IAAI,CAAC,GAAG,oBAAoB,SAAS,GACnC,OAAO;EAAE;EAAW,SAAS,CAAC;CAAE;CAGlC,MAAM,aAAa,UAAU,gBAAgB,aAAa,IAAI;CAE9D,IAAI,CAAC,YACH,OAAO;EAAE;EAAW,SAAS,CAAC;CAAE;CAGlC,iBAAiB,YAAY,OAAO;CAEpC,IAAI,CAAC,QAAQ,SACX,OAAO;EAAE;EAAW,SAAS,CAAC;CAAE;CAGlC,MAAM,UAAU,QAAQ,gBAAgB,SAAS,iBAC7C,CAAC,SAAS,cAAc,IACxB,CAAC;CAEL,OAAO;EACL,WAAW,MAAM,SAAS;EAC1B;CACF;AACF;AAEA,SAAS,iBAAiB,MAAe,SAA+B;CACtE,IAAI,+CAA+C,IAAI,GACrD;CAGF,IAAI,GAAG,iBAAiB,IAAI,GAAG;EAC7B,mBAAmB,MAAM,OAAO;EAChC,+BAA+B,MAAM,OAAO;EAC5C,qCAAqC,MAAM,OAAO;CACpD;CAEA,KAAK,cAAc,UAAU;EAC3B,iBAAiB,OAAO,OAAO;CACjC,CAAC;AACH;AAEA,SAAS,mBACP,MACA,SACM;CACN,MAAM,SAAS,kBAAkB,KAAK,YAAY,OAAO;CACzD,MAAM,gBAAgB,UAAU,qBAAqB,IAAI,OAAO,IAAI;CACpE,MAAM,UAAU,yBAAyB,IAAI;CAE7C,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,SAChC;CAGF,MAAM,WAAW,uBAAuB,OAAO;CAM/C,IAAI,CALmB,SAAS,MAAM,YACpC,QAAQ,YACR,+CAA+C,QAAQ,QAAQ,CAG/C,GAChB;CAGF,2BAA2B,QAAQ,eAAe,OAAO;CACzD,QAAQ,UAAU;CAElB,KAAK,MAAM,WAAW,UAAU;EAC9B,IAAI,CAAC,QAAQ,UACX;EAGF,IAAI,+CAA+C,QAAQ,QAAQ,GACjE,+BAA+B,QAAQ,UAAU,OAAO;OAExD,gCAAgC,QAAQ,UAAU,OAAO;CAE7D;AACF;AAEA,SAAS,+BACP,MACA,SACM;CACN,MAAM,SAAS,kBAAkB,KAAK,YAAY,OAAO;CACzD,MAAM,UAAU,yBAAyB,IAAI;CAE7C,IAAI,CAAC,UAAU,CAAC,0BAA0B,IAAI,OAAO,IAAI,KAAK,CAAC,SAC7D;CAGF,KAAK,MAAM,WAAW,uBAAuB,OAAO,GAClD,IACE,QAAQ,YACR,+CAA+C,QAAQ,QAAQ,GAE/D,+BAA+B,QAAQ,UAAU,OAAO;AAG9D;AAEA,SAAS,qCACP,MACA,SACM;CACN,MAAM,SAAS,kBAAkB,KAAK,YAAY,OAAO;CAEzD,IAAI,CAAC,UAAU,CAAC,2BAA2B,IAAI,OAAO,IAAI,GACxD;CAGF,KAAK,MAAM,YAAY,KAAK,WAC1B,IACE,uBAAuB,QAAQ,KAC/B,+CAA+C,QAAQ,GAEvD,+BAA+B,UAAU,OAAO;AAGtD;AAEA,SAAS,+BACP,UACA,SACM;CACN,IAAI,kBAAkB,QAAQ,GAC5B;CAGF,IAAI,GAAG,gBAAgB,QAAQ,GAAG;EAChC,uBAAuB,UAAU,OAAO,OAAO;EAC/C;CACF;CAEA,sBAAsB,UAAU,OAAO,OAAO;AAChD;AAEA,SAAS,gCACP,UACA,SACM;CACN,IAAI,kBAAkB,QAAQ,GAC5B;CAGF,IAAI,GAAG,gBAAgB,QAAQ,GAAG;EAChC,uBAAuB,UAAU,QAAQ,OAAO;EAChD;CACF;CAEA,sBAAsB,UAAU,QAAQ,OAAO;AACjD;AAEA,SAAS,uBACP,UACA,SACA,SACM;CACN,MAAM,QAAQ,YAAY,SAAS,SAAS,QAAQ,WAAW,GAAG,OAAO;CACzE,MAAM,MAAM,YAAY,SAAS,KAAK,OAAO;CAC7C,MAAM,cAAc,QAAQ,YACzB,MACC,SAAS,SAAS,QAAQ,WAAW,GACrC,SAAS,uBAAuB,SAAS,QAAQ,WAAW,CAC9D,EACC,KAAK;CACR,MAAM,YAAY,cAAc,SAAS,MAAM,OAAO;CAOtD,MAAM,cAAc,GAAG,YAAY,MANZ,iBACrB,SAAS,MACT,WACA,SACA,OAEoD;CAEtD,QAAQ,MAAM,UAAU,OAAO,KAAK,WAAW;CAC/C,QAAQ,UAAU;AACpB;AAEA,SAAS,sBACP,UACA,SACA,SACM;CACN,MAAM,aAAa,YACjB,SAAS,KAAK,SAAS,QAAQ,WAAW,GAC1C,OACF;CACA,MAAM,WAAW,YAAY,SAAS,KAAK,KAAK,OAAO;CACvD,MAAM,YAAY,cAAc,SAAS,MAAM,OAAO;CACtD,MAAM,iBAAiB,iBACrB,SAAS,MACT,WACA,SACA,OACF;CAEA,QAAQ,MAAM,UACZ,YACA,UACA,YAAY,eAAe,IAC7B;CACA,QAAQ,UAAU;AACpB;AAEA,SAAS,iBACP,MACA,WACA,SACA,SACQ;CACR,MAAM,iBAAiB,mBAAmB,SAAS,OAAO;CAE1D,IAAI,YAAY,OAAO;EACrB,IAAI,GAAG,QAAQ,IAAI,GACjB,OAAO,GAAG,eAAe,gBAAgB,UAAU;EAGrD,OAAO,GAAG,eAAe,0BAA0B,UAAU;CAC/D;CAEA,IAAI,GAAG,QAAQ,IAAI,GACjB,OAAO,GAAG,eAAe,SAAS,UAAU;CAG9C,OAAO,GAAG,eAAe,UAAU,UAAU;AAC/C;AAEA,SAAS,cAAc,MAAsB,SAAiC;CAC5E,OAAO,QAAQ,YACZ,MAAM,KAAK,SAAS,QAAQ,WAAW,GAAG,KAAK,GAAG,EAClD,KAAK;AACV;AAEA,SAAS,uBACP,gBAGC;CACD,OAAO,eAAe,WAAW,SAAS,aAAa;EACrD,IAAI,CAAC,GAAG,qBAAqB,QAAQ,GACnC,OAAO,CAAC;EAGV,MAAM,OAAO,kBAAkB,SAAS,IAAI;EAE5C,IAAI,SAAS,eAAe,SAAS,aACnC,OAAO,CAAC;EAOV,OAAO,CAAC,EAAE,UAJO,uBAAuB,SAAS,WAAW,IACxD,SAAS,cACT,KAAA,EAEe,CAAC;CACtB,CAAC;AACH;AAEA,SAAS,yBACP,MACwC;CACxC,MAAM,gBAAgB,KAAK,UAAU,KAAK,UAAU,SAAS;CAE7D,IAAI,CAAC,iBAAiB,CAAC,GAAG,0BAA0B,aAAa,GAC/D;CAGF,OAAO;AACT;AAEA,SAAS,kBACP,YACA,SAC0B;CAC1B,IAAI,GAAG,aAAa,UAAU,GAAG;EAC/B,MAAM,gBAAgB,QAAQ,SAAS,eAAe,IAAI,WAAW,IAAI;EAEzE,IAAI,CAAC,eACH;EAGF,OAAO;GACL,MAAM;GACN,YAAY,YACV,WAAW,SAAS,QAAQ,WAAW,GACvC,OACF;GACA,UAAU,YAAY,WAAW,KAAK,OAAO;GAC7C,QAAQ;EACV;CACF;CAEA,IAAI,CAAC,GAAG,2BAA2B,UAAU,GAC3C;CAGF,IAAI,CAAC,+BAA+B,WAAW,YAAY,OAAO,GAChE;CAGF,OAAO;EACL,MAAM,WAAW,KAAK;EACtB,YAAY,YACV,WAAW,KAAK,SAAS,QAAQ,WAAW,GAC5C,OACF;EACA,UAAU,YAAY,WAAW,KAAK,KAAK,OAAO;EAClD,QAAQ;CACV;AACF;AAEA,SAAS,2BACP,QACA,eACA,SACM;CACN,IAAI,OAAO,QAAQ;EACjB,QAAQ,MAAM,UACZ,OAAO,YACP,OAAO,UACP,mBAAmB,eAAe,OAAO,CAC3C;EAEA;CACF;CAEA,QAAQ,MAAM,UAAU,OAAO,YAAY,OAAO,UAAU,aAAa;AAC3E;AAEA,SAAS,mBACP,aACA,SACQ;CACR,QAAQ,eAAe;CAEvB,OAAO,GAAG,QAAQ,SAAS,mBAAmB,GAAG;AACnD;AAEA,SAAS,+BACP,YACA,SACS;CACT,IAAI,GAAG,aAAa,UAAU,GAC5B,OAAO,QAAQ,SAAS,oBAAoB,IAAI,WAAW,IAAI,KAC7D,QAAQ,SAAS,oBAAoB,IAAI,WAAW,IAAI;CAG5D,IAAI,CAAC,GAAG,2BAA2B,UAAU,GAC3C,OAAO;CAGT,IAAI,WAAW,KAAK,SAAS,UAC3B,OAAO;CAGT,IAAI,CAAC,GAAG,aAAa,WAAW,UAAU,GACxC,OAAO;CAGT,OAAO,QAAQ,SAAS,qBAAqB,IAAI,WAAW,WAAW,IAAI;AAC7E;AAEA,SAAS,kBAAkB,MAA2C;CACpE,IAAI,GAAG,aAAa,IAAI,KAAK,GAAG,gBAAgB,IAAI,GAClD,OAAO,KAAK;AAIhB;AAEA,SAAS,uBACP,MACkD;CAClD,OAAO,GAAG,gBAAgB,IAAI,KAAK,GAAG,qBAAqB,IAAI;AACjE;AAEA,SAAS,+CACP,MACkD;CAClD,IAAI,CAAC,uBAAuB,IAAI,GAC9B,OAAO;CAGT,IAAI,GAAG,qBAAqB,IAAI,KAAK,KAAK,eACxC,OAAO;CAGT,OAAO,8BAA8B,KAAK,IAAI;AAChD;AAEA,SAAS,kBACP,MACS;CACT,OAAO,KAAK,WAAW,MACpB,aAAa,SAAS,SAAS,GAAG,WAAW,YAChD,KAAK;AACP;AAEA,SAAS,YAAY,KAAa,SAAiC;CACjE,OAAO,MAAM,QAAQ;AACvB;;;;;;;;;;;;ACjdA,SAAgB,kBACd,YACA,gBACA,iBACA,gBACe;CACf,OAAO,WAAW,KAAK,EAAE,WAAW,WAClC,iBACE,WACA,MACA,gBACA,iBACA,cACF,CACF;AACF;AAEA,SAAS,iBACP,WACA,MACA,gBACA,iBACA,gBACa;CACb,MAAM,aAAa,iCACjB,UAAU,WACV,cACF;CACA,MAAM,uBAAuB;EAC3B,GAAG;EACH,WAAW,WAAW;CACxB;CACA,MAAM,KAAK,cAAc,SAAS;CAClC,MAAM,UAAU,KAAK,UAAU,EAAE;CACjC,MAAM,cAAc,iBAAiB,WAAW,cAAc;CAE9D,IAAI;CACJ,IAAI;CACJ,IAAI;CAEJ,IAAI,SAAS,SAAS;EACpB,MAAM,SAAS,mBAAmB,sBAAsB,WAAW;EAEnE,mBAAmB,wBACjB,SACA,QACA,eACF;EACA,UAAU,CAAC,GAAG,WAAW,SAAS,OAAO,MAAM;CACjD,OAAO,IAAI,SAAS,UAAU;EAC5B,MAAM,SAAS,mBAAmB,sBAAsB,WAAW;EAEnE,mBAAmB,uBACjB,SACA,QACA,WACA,eACF;EACA,UAAU,CAAC,GAAG,WAAW,SAAS,OAAO,MAAM;CACjD,OAAO,IAAI,SAAS,mBAAmB;EACrC,MAAM,SAAS,mBAAmB,sBAAsB,WAAW;EAEnE,mBAAmB,qBAAqB,SAAS,QAAQ,eAAe;EACxE,UAAU,CAAC,GAAG,WAAW,SAAS,OAAO,MAAM;CACjD,OAAO,IAAI,SAAS,QAAQ;EAC1B,MAAM,SAAS,mBAAmB,sBAAsB,WAAW;EAEnE,mBAAmB,qBAAqB,SAAS,QAAQ,eAAe;EACxE,UAAU,CAAC,GAAG,WAAW,SAAS,OAAO,MAAM;CACjD,OAAO,IAAI,SAAS,SAAS;EAC3B,MAAM,QAAQ,mBAAmB,sBAAsB,eAAe;EAEtE,mBAAmB,MAAM;EACzB,UAAU,WAAW;EACrB,aAAa,gBAAgB,WAAW,kBAAkB;GACxD,eAAe;GACf,aAAa,UAAU,UAAU;GACjC,eAAe,MAAM;EACvB,CAAC;CACH,OAAO;EACL,MAAM,SAAS,mBAAmB,sBAAsB,WAAW;EAEnE,mBAAmB,qBAAqB,SAAS,QAAQ,eAAe;EACxE,UAAU,CAAC,GAAG,WAAW,SAAS,OAAO,MAAM;CACjD;CAEA,OAAO;EACL,OAAO,UAAU;EACjB,KAAK,UAAU;EACf,MAAM;EACN;EACA;CACF;AACF;AAEA,SAAS,mBACP,WACA,iBACqC;CACrC,MAAM,YAAY,UAAU;CAE5B,IAAI,gCAAgC,SAAS,GAC3C,MAAM,IAAI,8BACR,UAAU,UACV,SACF;CAKF,IAFiB,8BAA8B,SAEpC,EAAE,+BACX,MAAM,IAAI,gCACR,UAAU,UACV,SACF;CAGF,OAAO;EACL;EACA,MACE,gBAAgB,gBAAgB,IAAI,kBAAkB,UAAU;CACpE;AACF;AAEA,SAAS,wBACP,SACA,QACA,iBACQ;CACR,OAAO,GAAG,gBAAgB,QAAQ,GAAG,QAAQ,IAAI,OAAO,UAAU,UAAU,OAAO,KAAK;AAC1F;AAEA,SAAS,uBACP,SACA,QACA,WACA,iBACQ;CACR,MAAM,aAAa,wBAAwB,SAAS,QAAQ,eAAe;CAE3E,IAAI,iBAAiB,KAAK,UAAU,SAAS,GAC3C,OAAO,UAAU,WAAW;CAG9B,OAAO,SAAS;AAClB;AAEA,SAAS,qBACP,SACA,QACA,iBACQ;CACR,OAAO,SAAS,wBAAwB,SAAS,QAAQ,eAAe;AAC1E;AAQA,SAAS,mBACP,WACA,aACc;CACd,MAAM,OAAO,yBAAyB,UAAU,SAAS;CACzD,MAAM,YAAY,KAAK,KAAK,IAAI;CAChC,MAAM,YAAY,KAAK,WAAW,IAAI,OAAO,IAAI,UAAU;CAC3D,MAAM,OAAO,GAAG,YAAY;CAC5B,MAAM,OACJ,aAAa,YAAY,eAAe,UAAU,UAAU;CAC9D,MAAM,kBAAkB,KAAK,QAAQ,UAAU,SAAS;CAExD,OAAO;EACL;EACA;EACA,QAAQ;GACN;GACA,YAAY;IACV,eAAe,UAAU;IACzB,aAAa,UAAU;IACvB,6BAA6B;IAC7B,2BAA2B,kBACzB,UAAU,UAAU;GACxB;EACF;CACF;AACF;AAEA,SAAS,cAAc,WAAoC;CAGzD,OAAO,GAFqB,UAAU,SAAS,QAAQ,WAAW,EAEtC,EAAE,GAAG,UAAU,MAAM,GAAG,UAAU;AAChE;AAEA,SAAS,iBACP,WACA,gBACQ;CACR,OAAO,eAAe,QACpB,yBAAyB,UAAU,MAAM,GAAG,UAAU,KACxD;AACF;AAEA,SAAS,gBACP,WACA,kBACA,OAK+B;CAC/B,MAAM,kBAAkB,iBAAiB,QAAQ,MAAM,aAAa;CAEpE,IAAI,oBAAoB,IACtB;CAGF,OAAO;EACL,eAAe,UAAU,QAAQ,MAAM;EACvC,aAAa,UAAU,QAAQ,MAAM;EACrC,6BAA6B;EAC7B,2BAA2B,kBAAkB,MAAM,cAAc;CACnE;AACF;;;;;;;;;;ACtPA,SAAgB,yBAAyB,MAAwB;CAC/D,OACE,GAAG,mBAAmB,IAAI,KAC1B,KAAK,cAAc,SAAS,GAAG,WAAW,iBAC1C,GAAG,aAAa,KAAK,IAAI,KACzB,KAAK,KAAK,SAAS;AAEvB;;;;;;;;AASA,SAAgB,0BAA0B,MAAwB;CAChE,OACE,GAAG,gBAAgB,IAAI,KACvB,GAAG,sBAAsB,IAAI,KAC7B,GAAG,qBAAqB,IAAI,KAC5B,GAAG,oBAAoB,IAAI,KAC3B,GAAG,yBAAyB,IAAI,KAChC,GAAG,yBAAyB,IAAI;AAEpC;;;;;;;;AASA,SAAgB,yBAAyB,MAAwB;CAC/D,IAAI,GAAG,kBAAkB,IAAI,GAC3B,OAAO;CAGT,OAAO,KAAK,YAAY,EAAE,MACvB,UACC,CAAC,0BAA0B,KAAK,KAAK,yBAAyB,KAAK,CACvE;AACF;;;;;;;;;AAUA,SAAgB,yBACd,MACA,UACM;CACN,IAAI,0BAA0B,IAAI,GAChC;CAGF,IAAI,yBAAyB,IAAI,GAAG;EAClC,SAAS,IAAI;EACb;CACF;CAEA,KAAK,cAAc,UAAU;EAC3B,yBAAyB,OAAO,QAAQ;CAC1C,CAAC;AACH;;;;;;;;;AAUA,SAAgB,qBACd,MACA,UACM;CACN,IAAI,0BAA0B,IAAI,GAChC;CAGF,IAAI,yBAAyB,IAAI,GAAG;EAClC,SAAS,IAAI;EACb;CACF;CAEA,KAAK,cAAc,UAAU;EAC3B,qBAAqB,OAAO,QAAQ;CACtC,CAAC;AACH;;;;;;;;AASA,SAAgB,sBAAsB,MAAgC;CACpE,IAAI,GAAG,aAAa,IAAI,GACtB,OAAO,CAAC,KAAK,IAAI;CAGnB,MAAM,SAAmB,CAAC;CAE1B,KAAK,MAAM,WAAW,KAAK,UAAU;EACnC,IAAI,GAAG,oBAAoB,OAAO,GAChC;EAGF,OAAO,KAAK,GAAG,sBAAsB,QAAQ,IAAI,CAAC;CACpD;CAEA,OAAO;AACT;;;AC1GA,SAAgB,gBACd,SACA,UACgB;CAChB,MAAM,aAAgC,CAAC;CACvC,MAAM,QAAQ,IAAI,YAAY,OAAO;CACrC,IAAI,eAAe;CACnB,IAAI,SAAS;CAEb,OAAO,SAAS,QAAQ,QAAQ;EAC9B,MAAM,OAAO,QAAQ,QAAQ,KAAK,MAAM;EACxC,IAAI,SAAS,IAAI;;EAGjB,IACE,yBAAyB,SAAS,IAAI,KACtC,uBAAuB,SAAS,IAAI,GACpC;GACA,SAAS,OAAO;GAChB;EACF;;EAGA,MAAM,QAAQ,mBAAmB,SAAS,OAAO,CAAC;EAClD,IAAI,UAAU,IAAI;GAChB,SAAS,OAAO;GAChB;EACF;EAEA,MAAM,QAAQ,QAAQ,MAAM,OAAO,GAAG,KAAK;EAE3C,MAAM,UAAU,MAAM,UAAU;EAChC,MAAM,aAAa,MAAM,SAAS,QAAQ;EAE1C,MAAM,WAAW,aAAa,OAAO;EAErC,MAAM,qBAAqB,sCACzB,SACA,MACA,YACA,OACF;EAEA,IAAI,mBAAmB,SAAS,GAAG;GACjC,KAAK,MAAM,qBAAqB,oBAAoB;IAClD,MAAM,cAAc,8BAA8B;IAClD,gBAAgB;IAEhB,WAAW,KAAK;KACd;KACA,OAAO,kBAAkB;KACzB,KAAK,kBAAkB;KACvB,WAAW,kBAAkB;KAC7B;KACA,KAAK;IACP,CAAC;IAED,MAAM,UACJ,kBAAkB,OAClB,kBAAkB,KAClB,WACF;GACF;GAEA,SAAS,QAAQ;GACjB;EACF;EAEA,IAAI,YAAY,QAAQ,MAAM,SAAS,aAAa;;EAGpD,MAAM,YAAY,SAAS,SAAS,WAAW,QAAQ,WAAW,SAAS,IACvE,UAAU,QAAQ,GAAG,IACrB;EAYJ,IAAI,GATsB,6BAA6B,KAGnB,IAChC,oBAAoB,KAAK,IACzB,KAAA,IAC2B,4BAC7B,4BAA4B,SAAS,IAEvB;GACd,SAAS,QAAQ;GACjB;EACF;;EAGA,IAAI,eAAe;EAEnB,IAAI,cAAc,IAAI;GACpB,MAAM,eAAe,UAAU,MAAM,YAAY,CAAC;GAClD,YAAY,aAAa,UAAU;GACnC,eAAe,YAAY,KAAK,aAAa,SAAS,UAAU;EAClE;EAEA,MAAM,aAAa,OAAO,IAAI,aAAa,SAAS,gBAClD;;EAGF,IAAI,WAAW;EAEf,MAAM,MAAM,SAAS;EAErB,IAAI,QAAQ,QAAQ;GAClB,MAAM,SAAS,UAAU,YAAY,MAAM;GAC3C,IAAI,WAAW,IAAI,WAAW,aAAa;EAC7C;EAEA,IAAI,QAAQ,SAAS;GACnB,MAAM,WAAW,UAAU,QAAQ,QAAQ;GAC3C,MAAM,YAAY,UAAU,QAAQ,SAAS;GAC7C,MAAM,WAAW,KAAK,IACpB,aAAa,KAAK,WAAW,UAC7B,cAAc,KAAK,WAAW,SAChC;GACA,IAAI,aAAa,UAAU,WAAW,aAAa;EACrD;EAEA,MAAM,YAAY,QAAQ,MAAM,YAAY,QAAQ,EAAE,KAAK;EAE3D,IAAI,UAAU,WAAW,GAAG;GAC1B,SAAS,QAAQ;GACjB;EACF;EAEA,IAAI,QAAQ,YAAY,CAAC,iBAAiB,KAAK,SAAS,GAAG;GACzD,MAAM,oBAAoB,qCACxB,SACA,YACA,SACF;GAEA,IAAI,kBAAkB,SAAS,GAAG;IAChC,KAAK,MAAM,oBAAoB,mBAAmB;KAChD,MAAM,cAAc,8BAA8B;KAClD,gBAAgB;KAEhB,WAAW,KAAK;MACd;MACA,OAAO,iBAAiB;MACxB,KAAK,iBAAiB;MACtB,WAAW,iBAAiB;MAC5B;MACA,KAAK;KACP,CAAC;KAED,MAAM,UACJ,iBAAiB,OACjB,iBAAiB,KACjB,WACF;IACF;IAEA,SAAS,QAAQ;IACjB;GACF;EACF;;EAGA,MAAM,cAAc,8BAA8B;EAClD,gBAAgB;EAEhB,WAAW,KAAK;GACd;GACA,OAAO;GACP,KAAK;GACL;GACA;GACA;EACF,CAAC;EAED,MAAM,UACJ,YACA,UACA,QAAQ,WAAW,GAAG,YAAY,MAAM,WAC1C;EAEA,SAAS,QAAQ;CACnB;CAEA,OAAO;EAAE,MAAM,MAAM,SAAS;EAAG;CAAW;AAC9C;AAEA,SAAS,qCACP,SACA,YACA,WAC8B;CAC9B,MAAM,cAAc,GAAG,iBACrB,wBACA,wBAAwB,UAAU,IAClC,GAAG,aAAa,QAChB,MACA,GAAG,WAAW,EAChB;CACA,MAAM,OAAO,YAAY,WAAW;CAEpC,IAAI,CAAC,QAAQ,CAAC,GAAG,oBAAoB,IAAI,GACvC,OAAO,CAAC;CAGV,MAAM,cAAc,KAAK,gBAAgB,aAAa,IAAI;CAE1D,IAAI,CAAC,eAAe,CAAC,8BAA8B,WAAW,GAC5D,OAAO,CAAC;CAGV,MAAM,gBAAgB,YAAY,KAAK,QAAQ,SAAS;CACxD,MAAM,cAA4C,CAAC;CAEnD,yBAAyB,cAAc,eAAe;EACpD,MAAM,QAAQ,aAAa,WAAW,SAAS,WAAW,IACxD;EACF,MAAM,MAAM,aAAa,WAAW,MAAM;EAC1C,MAAM,eAAe,QAAQ,MAAM,OAAO,GAAG,EAAE,KAAK;EAEpD,YAAY,KAAK;GACf;GACA;GACA,WAAW;EACb,CAAC;CACH,CAAC;CAED,OAAO;AACT;AAEA,SAAS,yBAAyB,SAAiB,KAAsB;CACvE,MAAM,SAAS,aAAa,SAAS,UAAU,GAAG;CAClD,MAAM,QAAQ,aAAa,SAAS,SAAS,GAAG;CAEhD,OACG,WAAW,KAAA,KAAa,MAAM,OAAO,OAAO,MAAM,OAAO,SACzD,UAAU,KAAA,KAAa,MAAM,MAAM,OAAO,MAAM,MAAM;AAE3D;AAEA,SAAS,uBAAuB,SAAiB,KAAsB;CACrE,MAAM,OAAO,QAAQ,YAAY,QAAQ,GAAG;CAC5C,MAAM,QAAQ,QAAQ,YAAY,OAAO,GAAG;CAE5C,OAAO,SAAS,MAAM,OAAO;AAC/B;AAEA,SAAS,aACP,SACA,KACA,WAC4C;CAC5C,MAAM,UAAU,IAAI,OAClB,IAAI,IAAI,2BAA2B,IAAI,QACvC,IACF;CAEA,KAAK,MAAM,SAAS,QAAQ,SAAS,OAAO,GAAG;EAC7C,IAAI,MAAM,UAAU,KAAA,GAAW;EAC/B,MAAM,UAAU,MAAM,QAAQ,MAAM,GAAG;EACvC,IAAI,MAAM,SAAS,aAAa,YAAY,SAC1C,OAAO;GAAE,OAAO,MAAM;GAAO,KAAK;EAAQ;CAE9C;AAGF;;AAIA,SAAS,mBAAmB,SAAiB,OAAuB;CAClE,IAAI,QAAQ;CAEZ,KAAK,IAAI,IAAI,OAAO,IAAI,QAAQ,QAAQ,KAAK,GAAG;EAC9C,MAAM,KAAK,QAAQ;EAEnB,IAAI,OAAO,OAAO,QAAQ,IAAI,OAAO,KACnC,SAAS;OACJ,IAAI,OAAO,KAAK;GACrB,IAAI,UAAU,GAAG,OAAO;GACxB,SAAS;EACX,OAAO,IAAI,OAAO,OAAO,OAAO,QAAO,OAAO,KAAK;GACjD,IAAI,YAAY,SAAS,GAAG,EAAE;GAC9B,IAAI,MAAM,IAAI,OAAO;EACvB,OAAO,IAAI,OAAO,OAAO,QAAQ,IAAI,OAAO,KAC1C,IAAI,kBAAkB,SAAS,CAAC;OAC3B,IAAI,OAAO,OAAO,QAAQ,IAAI,OAAO,KAAK;GAC/C,IAAI,mBAAmB,SAAS,CAAC;GACjC,IAAI,MAAM,IAAI,OAAO;EACvB;CACF;CAEA,OAAO;AACT;AAEA,SAAS,YAAY,SAAiB,OAAe,OAAuB;CAC1E,KAAK,IAAI,IAAI,QAAQ,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;EAClD,IAAI,QAAQ,OAAO,MAAM;GACvB,KAAK;GACL;EACF;EACA,IAAI,QAAQ,OAAO,OAAO,OAAO;CACnC;CACA,OAAO;AACT;AAEA,SAAS,kBAAkB,SAAiB,OAAuB;CACjE,KAAK,IAAI,IAAI,QAAQ,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAC/C,IAAI,QAAQ,OAAO,MAAM,OAAO;CAElC,OAAO,QAAQ;AACjB;AAEA,SAAS,mBAAmB,SAAiB,OAAuB;CAClE,KAAK,IAAI,IAAI,QAAQ,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAC/C,IAAI,QAAQ,OAAO,OAAO,QAAQ,IAAI,OAAO,KAAK,OAAO,IAAI;CAE/D,OAAO;AACT;AAOA,SAAS,aAAa,SAA0B;CAC9C,IAAI,QAAQ,WAAW,QAAQ,GAC7B,OAAO;EAAE,MAAM;EAAQ,eAAe;CAAgB;CAExD,IAAI,QAAQ,WAAW,SAAS,GAC9B,OAAO;EAAE,MAAM;EAAS,eAAe;CAAiB;CAE1D,IAAI,QAAQ,WAAW,UAAU,GAC/B,OAAO;EAAE,MAAM;EAAU,eAAe;CAAkB;;CAI5D,IAAI,QAAQ,WAAW,MAAM,GAC3B,OAAO;EAAE,MAAM;EAAS,eAAe;CAAc;CAEvD,IAAI,QAAQ,WAAW,WAAW,GAChC,OAAO;EAAE,MAAM;EAAS,eAAe;CAAmB;CAE5D,IAAI,QAAQ,WAAW,OAAO,GAC5B,OAAO;EAAE,MAAM;EAAS,eAAe;CAAe;CAExD,IAAI,QAAQ,WAAW,SAAS,GAC9B,OAAO;EAAE,MAAM;EAAS,eAAe;CAAiB;CAE1D,IAAI,QAAQ,WAAW,QAAQ,GAC7B,OAAO;EAAE,MAAM;EAAS,eAAe;CAAgB;CAEzD,IAAI,QAAQ,WAAW,SAAS,GAC9B,OAAO;EAAE,MAAM;EAAS,eAAe;CAAiB;CAG1D,OAAO;EAAE,MAAM;EAAS,eAAe;CAAE;AAC3C;AAEA,SAAS,sCACP,SACA,MACA,YACA,SAC8B;CAC9B,IAAI,CAAC,wBAAwB,OAAO,GAClC,OAAO,CAAC;CAGV,MAAM,cAAc,GAAG,iBACrB,sBACA,GAAG,QAAQ,IACX,GAAG,aAAa,QAChB,MACA,GAAG,WAAW,EAChB;CAEA,MAAM,OAAO,YAAY,WAAW;CAEpC,IAAI,CAAC,QAAQ,CAAC,GAAG,oBAAoB,IAAI,GACvC,OAAO,CAAC;CAGV,MAAM,YAAY,OAAO,IAAI;CAE7B,OAAO,KAAK,gBAAgB,aAAa,SAAS,SAAS;EACzD,MAAM,cAAc,KAAK;EAEzB,IAAI,CAAC,eAAe,CAAC,8BAA8B,WAAW,GAC5D,OAAO,CAAC;EAGV,MAAM,cAA4C,CAAC;EAEnD,yBAAyB,cAAc,eAAe;GACpD,MAAM,QAAQ,YAAY,WAAW,SAAS,WAAW;GACzD,MAAM,MAAM,YAAY,WAAW;GACnC,MAAM,YAAY,QAAQ,MAAM,OAAO,GAAG,EAAE,KAAK;GAEjD,YAAY,KAAK;IACf;IACA;IACA;GACF,CAAC;EACH,CAAC;EAED,OAAO;CACT,CAAC;AACH;AAEA,SAAS,wBAAwB,SAA0B;CACzD,OAAO,mBAAmB,KAAK,OAAO;AACxC;AAEA,SAAS,6BAA6B,OAAwB;CAC5D,MAAM,UAAU,MAAM,UAAU;CAEhC,OAAO,oDAAoD,KAAK,OAAO,KACrE,2BAA2B,KAAK,OAAO;AAC3C;AAEA,SAAS,oBACP,OAGA;CACA,MAAM,QAAQ,qBAAqB,KAAK;CACxC,MAAM,WAAW,8BAA8B,MAAM,IAAI;CAGzD,IAAI,IAFsB,OAAO,GAAG,QAAQ,IAAI,yBAEhC,EAAE,KAAK,MAAM,IAAI,GAC/B,OAAO,EACL,0BAA0B,MAC5B;CAGF,OAAO,EACL,0BAA0B,SAAS,4BACjC,SAAS,iCACT,eAAe,KAAK,MAAM,IAAI,EAClC;AACF;AAEA,SAAS,4BAA4B,MAAuB;CAC1D,IAAI,CAAC,eAAe,KAAK,IAAI,GAAG,OAAO;CAEvC,IAAI;EAQF,MAAM,OAPK,GAAG,iBACZ,WACA,aAAa,KAAK,IAClB,GAAG,aAAa,QAChB,MACA,GAAG,WAAW,EAEF,EAAE,WAAW;EAC3B,IAAI,CAAC,GAAG,oBAAoB,IAAI,GAAG,OAAO;EAC1C,MAAM,OAAO,KAAK,gBAAgB,aAAa;EAC/C,IAAI,CAAC,MAAM,aAAa,OAAO;EAC/B,OAAO,8BAA8B,KAAK,WAAW;CACvD,QAAQ;EACN,OAAO;CACT;AACF;;;;;;;;;;;;;;;;;;;;ACjcA,SAAgB,wBACd,SACA,UACuB;CACvB,IAAI,CAAC,eAAe,KAAK,OAAO,GAC9B,OAAO;EAAE,MAAM;EAAS,WAAW;CAAM;;CAI3C,MAAM,OAAO,gBAAgB,SAAS,QAAQ;CAC9C,MAAM,iBAAiB,iCAAiC,OAAO;CAC/D,MAAM,iBAAiB,4BAA4B,OAAO;CAE1D,IAAI,KAAK,WAAW,WAAW,GAC7B,OAAO;EAAE,MAAM;EAAS,WAAW;CAAM;;CAS3C,MAAM,aAAa,oBAHP,MADE,oBAAoB,KAAK,IACjB,GAAG;EAAE;EAAU,QAAQ;CAAK,CAI9C,GACF,KAAK,UACP;CACA,MAAM,UAAU,IAAI,IAClB,WAAW,KAAK,EAAE,gBAAgB,UAAU,WAAW,CACzD;CACA,MAAM,YAAY,KAAK,WAAW,MAAM,cACtC,CAAC,QAAQ,IAAI,UAAU,WAAW,CACpC;CAEA,IAAI,WACF,MAAM,IAAI,qCACR,UACA,UAAU,SACZ;CAGF,MAAM,eAAe,kBACnB,YACA,gBACA,eAAe,UACf,eAAe,cACjB;CACA,MAAM,UAAU,aAAa,SAAS,gBACpC,YAAY,WAAW,CAAC,CAC1B;CAEA,MAAM,QAAQ,IAAI,YAAY,OAAO;CAErC,aAAa,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;CAE7C,KAAK,MAAM,KAAK,cACd,MAAM,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI;CASxC,MAAM,cAAc,mBAAmB,cANd,eACvB,OACA,SACA,SACA,eAAe,QAEmD,CAAC;CAErE,OAAO;EACL,MAAM,MAAM,SAAS;EACrB,WAAW;EACX,KAAK,kBAAkB,OAAO,QAAQ;EACtC;CACF;AACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as transform_markup_effect } from "../chunks/transform-
|
|
1
|
+
import { t as transform_markup_effect } from "../chunks/transform-PXwkylXd.js";
|
|
2
2
|
export { transform_markup_effect };
|
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
import ts from "typescript";
|
|
2
1
|
import type { RuntimeImportBindings } from "./types.js";
|
|
2
|
+
import ts from "typescript";
|
|
3
|
+
interface RuntimeImportOptions {
|
|
4
|
+
needs_dispatcher?: boolean;
|
|
5
|
+
needs_effect?: boolean;
|
|
6
|
+
needs_untrack?: boolean;
|
|
7
|
+
}
|
|
3
8
|
/**
|
|
4
9
|
* Builds the import statements injected by the script preprocessor.
|
|
5
10
|
*
|
|
@@ -8,9 +13,11 @@ import type { RuntimeImportBindings } from "./types.js";
|
|
|
8
13
|
* @param has_dispatcher_import - Whether the user already imports
|
|
9
14
|
* `get_dispatcher`.
|
|
10
15
|
* @param has_untrack_import - Whether the user already imports `untrack`.
|
|
16
|
+
* @param bindings - Local names reserved for generated runtime helpers.
|
|
17
|
+
* @param options - Runtime helper imports required by this transformed script.
|
|
11
18
|
* @returns Newline-separated import statements to inject.
|
|
12
19
|
*/
|
|
13
|
-
export declare function make_imports(has_effect_import: boolean, has_dispatcher_import: boolean, has_untrack_import: boolean, bindings?: RuntimeImportBindings): string;
|
|
20
|
+
export declare function make_imports(has_effect_import: boolean, has_dispatcher_import: boolean, has_untrack_import: boolean, bindings?: RuntimeImportBindings, options?: RuntimeImportOptions): string;
|
|
14
21
|
/**
|
|
15
22
|
* Checks whether a source file imports a local binding from a module.
|
|
16
23
|
*
|
|
@@ -39,3 +46,4 @@ export declare function has_top_level_binding(source_file: ts.SourceFile, local_
|
|
|
39
46
|
* @returns Top-level names declared by imports, declarations, and variables.
|
|
40
47
|
*/
|
|
41
48
|
export declare function collect_top_level_binding_names(source_file: ts.SourceFile): string[];
|
|
49
|
+
export {};
|
|
@@ -41,8 +41,10 @@ export interface TempBinding {
|
|
|
41
41
|
export interface LoweredStatement {
|
|
42
42
|
/** `$state` bindings to emit at component scope. */
|
|
43
43
|
temps: TempBinding[];
|
|
44
|
-
/** Helper declarations
|
|
44
|
+
/** Helper declarations to emit before the rewritten statement. */
|
|
45
45
|
type_helpers?: string[];
|
|
46
|
+
/** Whether the rewritten statement directly awaits a dispatcher promise. */
|
|
47
|
+
uses_dispatcher_promise?: boolean;
|
|
46
48
|
/** The rewritten statement text with yield* replaced by temp refs. */
|
|
47
49
|
rewritten_text: string;
|
|
48
50
|
/** Effect bodies to emit in dependency-tracked runtime blocks. */
|
|
@@ -82,9 +84,14 @@ export interface LoweredExpression {
|
|
|
82
84
|
* @since 2.0.0
|
|
83
85
|
*/
|
|
84
86
|
export interface ScriptLoweringContext {
|
|
87
|
+
/** Source filename used for stable generated runtime ids. */
|
|
88
|
+
filename: string;
|
|
89
|
+
/** Binding name used for the dispatcher factory in generated code. */
|
|
90
|
+
dispatcher_name: string;
|
|
85
91
|
effect_name: string;
|
|
86
92
|
/** Whether generated state placeholders should carry TypeScript types. */
|
|
87
93
|
emit_types: boolean;
|
|
94
|
+
next_helper_name(hint?: string): string;
|
|
88
95
|
next_temp_name(hint?: string): string;
|
|
89
96
|
next_type_helper_name(hint?: string): string;
|
|
90
97
|
}
|
package/.dist/preprocess.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as transform_markup_effect } from "./chunks/transform-
|
|
2
|
-
import { t as transform_script_effect } from "./chunks/preprocess-
|
|
1
|
+
import { t as transform_markup_effect } from "./chunks/transform-PXwkylXd.js";
|
|
2
|
+
import { t as transform_script_effect } from "./chunks/preprocess-D84Ngmby.js";
|
|
3
3
|
export { transform_markup_effect, transform_script_effect };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as transform_svelte_effect } from "../chunks/transform-
|
|
2
|
-
import { t as transform_markup_effect } from "../chunks/transform-
|
|
3
|
-
import { t as transform_script_effect } from "../chunks/preprocess-
|
|
1
|
+
import { n as transform_svelte_effect } from "../chunks/transform-CHAnW68p.js";
|
|
2
|
+
import { t as transform_markup_effect } from "../chunks/transform-PXwkylXd.js";
|
|
3
|
+
import { t as transform_script_effect } from "../chunks/preprocess-D84Ngmby.js";
|
|
4
4
|
//#region src/runtime/preprocess.ts
|
|
5
5
|
/**
|
|
6
6
|
* Svelte preprocessor that lowers `yield*` in script and markup blocks.
|
package/.dist/vite.js
CHANGED
|
@@ -31,7 +31,7 @@ function make_svelte_transform_plugin() {
|
|
|
31
31
|
order: "pre",
|
|
32
32
|
async handler(code, id) {
|
|
33
33
|
if (!is_svelte_component_module(id)) return;
|
|
34
|
-
const { transform_svelte_effect } = await import("./chunks/transform-
|
|
34
|
+
const { transform_svelte_effect } = await import("./chunks/transform-CHAnW68p.js").then((n) => n.t);
|
|
35
35
|
const result = transform_svelte_effect(code, id);
|
|
36
36
|
if (result.code === code) return;
|
|
37
37
|
return {
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"preprocess-DseI9Doo.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/preprocess/source.ts","../../../modules/svelte-effect-runtime/src/preprocess/runtime-block.ts","../../../modules/svelte-effect-runtime/src/preprocess/runes.ts","../../../modules/svelte-effect-runtime/src/preprocess/lower.ts","../../../modules/svelte-effect-runtime/src/preprocess/index.ts"],"sourcesContent":["import type MagicString from \"magic-string\";\nimport type ts from \"typescript\";\n\n/**\n * Creates a source map from transformed script back to the original block.\n *\n * @since 2.0.0\n * @param magic - MagicString instance holding the transformed source.\n * @param filename - Source filename used for the source map entry.\n * @returns A plain source map object.\n */\nexport function create_source_map(\n magic: MagicString,\n filename: string,\n): Record<string, unknown> {\n const map = magic.generateMap({\n hires: true,\n includeContent: true,\n source: filename,\n });\n\n return map as unknown as Record<string, unknown>;\n}\n\n/**\n * Slices a substring matching a node's full source range.\n *\n * @since 2.0.0\n * @param content - Original source text.\n * @param node - AST node whose full range should be extracted.\n * @returns Source text including leading trivia.\n */\nexport function slice(content: string, node: ts.Node): string {\n return content.slice(node.getFullStart(), node.end);\n}\n\n/**\n * Slices a substring matching a node's source range without leading trivia.\n *\n * @since 2.0.0\n * @param content - Original source text.\n * @param node - AST node whose non-trivia range should be extracted.\n * @returns Source text excluding leading trivia.\n */\nexport function slice_start(content: string, node: ts.Node): string {\n return content.slice(node.getStart(), node.end);\n}\n","import type { EffectBlock, RuntimeImportBindings } from \"./types.ts\";\n\n/**\n * Builds the runtime blocks appended to lowered script effect code.\n *\n * @since 2.0.0\n * @param blocks - Effect bodies and dependency reads to emit.\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\n */\nexport function make_runtime_block(blocks: EffectBlock[]): string {\n const bindings: RuntimeImportBindings = {\n cancel: \"__SER___cancel\",\n dispatcher: \"get_dispatcher\",\n dispatcher_value: \"__SER___dispatcher\",\n effect: \"Effect\",\n program: \"__SER___program\",\n untrack: \"untrack\",\n };\n\n return make_runtime_block_with_bindings(blocks, bindings);\n}\n\n/**\n * Builds the runtime blocks appended to lowered script effect code with\n * explicit runtime import bindings.\n *\n * @since 2.4.2\n * @param blocks - Effect bodies and dependency reads to emit.\n * @param bindings - Runtime binding names available in the generated code.\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\n */\nexport function make_runtime_block_with_bindings(\n blocks: EffectBlock[],\n bindings: RuntimeImportBindings,\n): string {\n const merged_block = merge_effect_blocks(blocks);\n const dep_reads = merged_block.deps.map((dep) => ` ${dep};`);\n\n const body = merged_block.statements\n .map((statement) => ` ${statement}`)\n .join(\"\\n\");\n\n return [\n \"\",\n \"$effect(() => {\",\n ...dep_reads,\n ` const ${bindings.dispatcher_value} = ${bindings.dispatcher}();`,\n ` const ${bindings.program} = ${bindings.effect}.gen(function* () {`,\n body,\n \" });\",\n ` const ${bindings.cancel} = ${bindings.untrack}(() => ${bindings.dispatcher_value}.fork(${bindings.program}));`,\n ` import.meta.hot?.dispose(${bindings.cancel});`,\n ` return ${bindings.cancel};`,\n \"});\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction merge_effect_blocks(blocks: EffectBlock[]): EffectBlock {\n const statements = blocks.flatMap((block) => block.statements);\n const deps = blocks.flatMap((block) => block.deps);\n\n return {\n statements,\n deps: [...new Set(deps)],\n };\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport { AsyncEffectInSyncRuneError } from \"$/error.ts\";\nimport { slice } from \"./source.ts\";\n\nimport ts from \"typescript\";\n\nconst ASYNC_EXPRESSION_RUNES = new Set([\n \"$derived\",\n \"$inspect\",\n \"$state\",\n \"$state.raw\",\n]);\n\nconst CALLBACK_RUNES = new Set([\n \"$derived.by\",\n \"$effect\",\n \"$effect.pre\",\n \"$effect.root\",\n]);\n\n/**\n * Validates that `yield*` only appears in rune positions the script-effect\n * transform can lower without changing the rune's normal Svelte contract.\n *\n * @since 2.0.0\n * @param node - AST node to scan.\n * @param content - Original script source used for diagnostics.\n * @param filename - Source filename used for diagnostics.\n * @returns Nothing.\n */\nexport function validate_rune_yield_usage(\n node: ts.Node,\n content: string,\n filename: string,\n): void {\n visit_rune_yield_usage(node, content, filename);\n}\n\n/**\n * Identifies `$state(...)` and `$state.raw(...)` initializer calls.\n *\n * @since 2.0.0\n * @param expr - Expression to classify.\n * @param content - Original script source used to preserve argument text.\n * @returns State rune details when the expression is a state initializer.\n */\nexport function get_state_rune_initializer(\n expr: ts.Expression,\n content: string,\n): { rune_name: \"$state\" | \"$state.raw\"; value_text: string } | undefined {\n if (!ts.isCallExpression(expr)) {\n return undefined;\n }\n\n const rune_name = get_rune_name(expr.expression);\n\n if (rune_name !== \"$state\" && rune_name !== \"$state.raw\") {\n return undefined;\n }\n\n const first_arg = expr.arguments[0];\n\n if (!first_arg) {\n return undefined;\n }\n\n return {\n rune_name,\n value_text: slice(content, first_arg).trim(),\n };\n}\n\nfunction visit_rune_yield_usage(\n node: ts.Node,\n content: string,\n filename: string,\n): void {\n if (ts.isCallExpression(node)) {\n validate_call_expression(node, content, filename);\n }\n\n node.forEachChild((child) => {\n visit_rune_yield_usage(child, content, filename);\n });\n}\n\nfunction validate_call_expression(\n call: ts.CallExpression,\n content: string,\n filename: string,\n): void {\n const rune_name = get_rune_name(call.expression);\n\n if (!rune_name) {\n return;\n }\n\n if (\n !ASYNC_EXPRESSION_RUNES.has(rune_name) &&\n contains_top_level_yield_star(call)\n ) {\n throw new AsyncEffectInSyncRuneError(\n rune_name,\n slice(content, call),\n filename,\n );\n }\n\n if (!CALLBACK_RUNES.has(rune_name)) {\n return;\n }\n\n const callback = call.arguments[0];\n\n if (!callback || !callback_has_top_level_yield_star(callback)) {\n return;\n }\n\n throw new AsyncEffectInSyncRuneError(\n rune_name,\n slice(content, call),\n filename,\n );\n}\n\nfunction callback_has_top_level_yield_star(node: ts.Expression): boolean {\n if (\n (ts.isArrowFunction(node) ||\n ts.isFunctionExpression(node)) &&\n node.body !== undefined\n ) {\n return contains_top_level_yield_star(node.body);\n }\n\n return contains_top_level_yield_star(node);\n}\n\nfunction get_rune_name(expr: ts.Expression): string | undefined {\n if (ts.isIdentifier(expr) && is_rune_root(expr.text)) {\n return expr.text;\n }\n\n if (!ts.isPropertyAccessExpression(expr)) {\n return undefined;\n }\n\n const root_name = get_rune_name(expr.expression);\n\n if (!root_name) {\n return undefined;\n }\n\n return `${root_name}.${expr.name.text}`;\n}\n\nfunction is_rune_root(name: string): boolean {\n return (\n name === \"$bindable\" ||\n name === \"$derived\" ||\n name === \"$effect\" ||\n name === \"$host\" ||\n name === \"$inspect\" ||\n name === \"$props\" ||\n name === \"$state\"\n );\n}\n","import { collect_free_identifiers } from \"$/markup/transform/expressions.ts\";\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\nimport {\n collect_yield_star_nodes,\n extract_binding_names,\n find_yield_star_node,\n is_yield_star_expression,\n} from \"./ast.ts\";\nimport { get_state_rune_initializer } from \"./runes.ts\";\nimport { slice, slice_start } from \"./source.ts\";\nimport type {\n EffectBlock,\n LoweredExpression,\n LoweredStatement,\n ScriptLoweringContext,\n TempBinding,\n} from \"./types.ts\";\n\nimport ts from \"typescript\";\n\n/**\n * Delegates a statement to the correct lowerer based on syntax kind.\n *\n * @since 2.0.0\n * @param stmt - Statement to lower.\n * @param content - Original source text.\n * @param context - Lowering services for this transform pass.\n * @returns Lowered statement descriptor.\n */\nexport function lower_statement(\n stmt: ts.Statement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n if (ts.isExpressionStatement(stmt)) {\n return lower_expression_statement(stmt, content, context);\n }\n\n if (ts.isVariableStatement(stmt)) {\n return lower_variable_statement(stmt, content, context);\n }\n\n const text = slice(content, stmt);\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [make_effect_block([text], collect_deps(text))],\n range: { start: stmt.getFullStart(), end: stmt.end },\n };\n}\n\nfunction lower_variable_statement(\n stmt: ts.VariableStatement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n const temps: TempBinding[] = [];\n const type_helpers: string[] = [];\n const rewritten_decls: string[] = [];\n const statements: string[] = [];\n const deps: string[] = [];\n\n const decl_list = stmt.declarationList;\n const kind = (decl_list.flags & ts.NodeFlags.Let) !== 0 ? \"let\" : \"const\";\n let has_bare_yield = false;\n\n for (const decl of decl_list.declarations) {\n if (!decl.initializer || !contains_top_level_yield_star(decl.initializer)) {\n if (contains_top_level_yield_star(decl.name)) {\n has_bare_yield = true;\n\n const binding_text = slice(content, decl.name).trim();\n const initializer_text = decl.initializer\n ? slice(content, decl.initializer).trim()\n : \"undefined\";\n const names = extract_binding_names(decl.name);\n const statement = `(${binding_text} = ${initializer_text});`;\n\n temps.push(...names.map((name) => make_unknown_temp(name, context)));\n statements.push(statement);\n deps.push(...collect_deps(statement, names));\n\n continue;\n }\n\n rewritten_decls.push(slice(content, decl).trim());\n continue;\n }\n\n const binding_text = slice(content, decl.name).trim();\n\n if (ts.isIdentifier(decl.name)) {\n const original_name = binding_text;\n\n if (is_yield_star_expression(decl.initializer)) {\n const temp_name = context.next_temp_name(original_name);\n const yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n const type_helper = make_yield_type_helper(\n yield_text,\n original_name,\n context,\n );\n\n if (type_helper) {\n type_helpers.push(type_helper.declaration);\n temps.push({ name: temp_name, type: type_helper.type });\n } else {\n temps.push({ name: temp_name });\n }\n\n has_bare_yield = true;\n rewritten_decls.push(`${original_name} = $derived(${temp_name})`);\n\n statements.push(`${temp_name} = ${yield_text};`);\n deps.push(...collect_deps(yield_text));\n } else {\n const state_rune = get_state_rune_initializer(\n decl.initializer,\n content,\n );\n\n if (state_rune) {\n const direct_yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n const state_type = direct_yield_text === state_rune.value_text\n ? make_yield_type_helper(\n state_rune.value_text,\n original_name,\n context,\n )\n : undefined;\n\n if (state_type) {\n type_helpers.push(state_type.declaration);\n }\n\n has_bare_yield = true;\n rewritten_decls.push(\n `${original_name} = ${\n make_state_placeholder(\n state_rune.rune_name,\n state_type?.type,\n context,\n )\n }`,\n );\n statements.push(`${original_name} = ${state_rune.value_text};`);\n deps.push(...collect_deps(state_rune.value_text));\n continue;\n }\n\n const lowered = lower_expression_yields(\n decl.initializer,\n content,\n original_name,\n context,\n );\n\n temps.push(...lowered.temps);\n type_helpers.push(...(lowered.type_helpers ?? []));\n for (const block of lowered.effect_blocks) {\n statements.push(...block.statements);\n deps.push(...block.deps);\n }\n\n const rewritten_expr = rewrite_state_rune_as_derived(\n lowered.rewritten_expr,\n );\n const final_expr = should_wrap_complex_initializer_as_derived(\n decl.initializer,\n content,\n )\n ? `$derived(${rewritten_expr})`\n : rewritten_expr;\n\n if (final_expr !== rewritten_expr) {\n has_bare_yield = true;\n }\n\n rewritten_decls.push(`${original_name} = ${final_expr}`);\n }\n } else {\n has_bare_yield = true;\n\n const temp_name = context.next_temp_name(\"destructure\");\n const names = extract_binding_names(decl.name);\n const yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n const type_helper = make_yield_type_helper(\n yield_text,\n \"destructure\",\n context,\n );\n\n if (type_helper) {\n type_helpers.push(type_helper.declaration);\n temps.push({ name: temp_name, type: type_helper.type });\n } else {\n temps.push({ name: temp_name });\n }\n\n temps.push(...names.map((name) => make_unknown_temp(name, context)));\n\n statements.push(`${temp_name} = ${yield_text};`);\n statements.push(`(${binding_text} = ${temp_name});`);\n deps.push(...collect_deps(yield_text));\n }\n }\n\n const rewritten_text = rewritten_decls.length === 0\n ? \"\"\n : `${has_bare_yield ? \"let\" : kind} ${rewritten_decls.join(\", \")};`;\n\n return {\n temps,\n type_helpers,\n rewritten_text,\n effect_blocks: statements.length === 0\n ? []\n : [make_effect_block(statements, deps)],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n}\n\nfunction lower_expression_statement(\n stmt: ts.ExpressionStatement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n const expr = stmt.expression;\n\n if (!contains_top_level_yield_star(expr)) {\n return {\n temps: [],\n rewritten_text: slice(content, stmt).trim(),\n effect_blocks: [],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n if (is_yield_star_expression(expr)) {\n const text = slice(content, expr).trim();\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [make_effect_block([text + \";\"], collect_deps(text))],\n range: { start: stmt.getFullStart(), end: stmt.end },\n };\n }\n\n if (ts.isBinaryExpression(expr) && is_assignment_operator(expr)) {\n const target = slice(content, expr.left).trim();\n const target_names = collect_assignment_target_names(expr.left);\n\n if (\n expr.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n is_yield_star_expression(expr.right)\n ) {\n const yield_text = extract_yield_star_full_text(expr.right, content);\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [\n make_effect_block(\n [`${target} = ${yield_text};`],\n collect_deps(yield_text, target_names),\n ),\n ],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n const lowered = lower_expression_yields(\n expr.right,\n content,\n make_temp_hint(target),\n context,\n );\n const temp_names = lowered.temps.map((temp) => temp.name);\n const statement = `${target} ${\n slice(content, expr.operatorToken).trim()\n } ${lowered.rewritten_expr};`;\n\n return {\n temps: lowered.temps,\n type_helpers: lowered.type_helpers,\n rewritten_text: \"\",\n effect_blocks: [\n make_effect_block(\n [\n ...lowered.effect_blocks.flatMap((block) => block.statements),\n statement,\n ],\n [\n ...lowered.effect_blocks.flatMap((block) => block.deps),\n ...collect_deps(lowered.rewritten_expr, [\n ...target_names,\n ...temp_names,\n ]),\n ],\n ),\n ],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n const lowered = lower_expression_yields(\n expr,\n content,\n \"call\",\n context,\n );\n\n if (is_top_level_rune_call(expr)) {\n return {\n temps: lowered.temps,\n type_helpers: lowered.type_helpers,\n rewritten_text: lowered.rewritten_expr + \";\",\n effect_blocks: lowered.effect_blocks,\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n const temp_names = lowered.temps.map((temp) => temp.name);\n\n return {\n temps: lowered.temps,\n type_helpers: lowered.type_helpers,\n rewritten_text: \"\",\n effect_blocks: [\n make_effect_block(\n [\n ...lowered.effect_blocks.flatMap((block) => block.statements),\n lowered.rewritten_expr + \";\",\n ],\n [\n ...lowered.effect_blocks.flatMap((block) => block.deps),\n ...collect_deps(lowered.rewritten_expr, temp_names),\n ],\n ),\n ],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n}\n\nfunction lower_expression_yields(\n expr: ts.Expression,\n content: string,\n hint: string,\n context: ScriptLoweringContext,\n): LoweredExpression {\n const replacements: Array<{\n start: number;\n end: number;\n text: string;\n }> = [];\n\n const temps: TempBinding[] = [];\n const type_helpers: string[] = [];\n const statements: string[] = [];\n const deps: string[] = [];\n\n collect_yield_star_nodes(expr, (node) => {\n const temp_name = context.next_temp_name(hint);\n const yield_text = slice_start(content, node).trim();\n const type_helper = make_yield_type_helper(yield_text, hint, context);\n\n if (type_helper) {\n type_helpers.push(type_helper.declaration);\n temps.push({ name: temp_name, type: type_helper.type });\n } else {\n temps.push({ name: temp_name });\n }\n\n statements.push(`${temp_name} = ${yield_text};`);\n deps.push(...collect_deps(yield_text));\n replacements.push({\n start: node.getStart(),\n end: node.end,\n text: temp_name,\n });\n });\n\n if (replacements.length === 0) {\n return {\n temps,\n type_helpers,\n rewritten_expr: slice(content, expr).trim(),\n effect_blocks: [],\n };\n }\n\n replacements.sort((a, b) => b.start - a.start);\n\n let text = slice(content, expr);\n\n const offset_in_expr = expr.getFullStart();\n\n for (const replacement of replacements) {\n text = text.slice(0, replacement.start - offset_in_expr) +\n replacement.text +\n text.slice(replacement.end - offset_in_expr);\n }\n\n return {\n temps,\n type_helpers,\n rewritten_expr: text.trim(),\n effect_blocks: [make_effect_block(statements, deps)],\n };\n}\n\nfunction make_yield_type_helper(\n yield_text: string,\n hint: string,\n context: ScriptLoweringContext,\n): { declaration: string; type: string } | undefined {\n if (!context.emit_types) {\n return undefined;\n }\n\n const helper_name = context.next_type_helper_name(hint);\n const effect_text = strip_yield_star(yield_text);\n\n return {\n declaration: `function ${helper_name}() { return (${effect_text}); }`,\n type:\n `${context.effect_name}.Success<ReturnType<typeof ${helper_name}>> | undefined`,\n };\n}\n\nfunction make_unknown_temp(\n name: string,\n context: ScriptLoweringContext,\n): TempBinding {\n return {\n name,\n type: context.emit_types ? \"unknown\" : undefined,\n };\n}\n\nfunction make_state_placeholder(\n rune_name: string,\n type: string | undefined,\n context: ScriptLoweringContext,\n): string {\n if (type) {\n return `${rune_name}<${type}>(undefined)`;\n }\n\n if (context.emit_types) {\n return `${rune_name}<unknown>(undefined)`;\n }\n\n return `${rune_name}(undefined)`;\n}\n\nfunction strip_yield_star(yield_text: string): string {\n return yield_text.replace(/^yield\\*\\s*/, \"\");\n}\n\nfunction rewrite_state_rune_as_derived(expression: string): string {\n const state_call = expression.match(/^\\$state(?:\\.raw)?\\(([\\s\\S]*)\\)$/);\n\n if (!state_call) {\n return expression;\n }\n\n return `$derived(${state_call[1]})`;\n}\n\nfunction should_wrap_complex_initializer_as_derived(\n expr: ts.Expression,\n content: string,\n): boolean {\n const text = slice(content, expr).trim();\n\n return !/^\\$derived(?:\\.by)?\\(/.test(text) &&\n !/^\\$inspect(?:\\.trace)?\\(/.test(text);\n}\n\nfunction is_assignment_operator(expr: ts.BinaryExpression): boolean {\n return expr.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&\n expr.operatorToken.kind <= ts.SyntaxKind.LastAssignment;\n}\n\nfunction is_top_level_rune_call(expr: ts.Expression): boolean {\n if (!ts.isCallExpression(expr)) {\n return false;\n }\n\n const callee = expr.expression;\n\n if (ts.isIdentifier(callee)) {\n return callee.text.startsWith(\"$\");\n }\n\n return ts.isPropertyAccessExpression(callee) &&\n ts.isIdentifier(callee.expression) &&\n callee.expression.text.startsWith(\"$\");\n}\n\nfunction make_temp_hint(target: string): string {\n const match = target.match(/[A-Za-z_$][\\w$]*$/);\n\n return match?.[0] ?? \"assignment\";\n}\n\nfunction extract_yield_star_full_text(\n expr: ts.Expression,\n content: string,\n): string {\n let found: string | undefined;\n\n find_yield_star_node(expr, (node) => {\n found = slice_start(content, node).trim();\n });\n\n return found ?? \"undefined\";\n}\n\nfunction make_effect_block(\n statements: string[],\n deps: string[],\n): EffectBlock {\n return {\n statements,\n deps: [...new Set(deps)],\n };\n}\n\nfunction collect_deps(\n expr_text: string,\n excluded_names: readonly string[] = [],\n): string[] {\n const excluded = new Set(excluded_names);\n\n return collect_free_identifiers(expr_text).filter(\n (identifier) =>\n !identifier.startsWith(\"__SER___\") && !excluded.has(identifier),\n );\n}\n\nfunction collect_assignment_target_names(node: ts.Node): string[] {\n if (ts.isIdentifier(node)) {\n return [node.text];\n }\n\n if (ts.isParenthesizedExpression(node)) {\n return collect_assignment_target_names(node.expression);\n }\n\n if (\n ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)\n ) {\n return collect_assignment_target_names(node.expression);\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n return node.properties.flatMap((property) => {\n if (ts.isShorthandPropertyAssignment(property)) {\n return [property.name.text];\n }\n\n if (ts.isPropertyAssignment(property)) {\n return collect_assignment_target_names(property.initializer);\n }\n\n if (ts.isSpreadAssignment(property)) {\n return collect_assignment_target_names(property.expression);\n }\n\n return [];\n });\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n return node.elements.flatMap((element) =>\n ts.isSpreadElement(element)\n ? collect_assignment_target_names(element.expression)\n : collect_assignment_target_names(element)\n );\n }\n\n return [];\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport {\n collect_top_level_binding_names,\n has_local_import_binding,\n make_imports,\n} from \"./imports.ts\";\nimport { create_source_map, slice } from \"./source.ts\";\nimport { AwaitInEffectWorkError, PreprocessError } from \"$/error.ts\";\nimport { make_runtime_block_with_bindings } from \"./runtime-block.ts\";\nimport { contains_top_level_await } from \"./ast.ts\";\nimport { lower_statement } from \"./lower.ts\";\nimport { validate_rune_yield_usage } from \"./runes.ts\";\nimport type {\n BlockRef,\n EffectBlock,\n RuntimeImportBindings,\n ScriptLoweringContext,\n ScriptTransformResult,\n} from \"./types.ts\";\n\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\nexport type { BlockRef, ScriptTransformResult } from \"./types.ts\";\n\ninterface ScriptTransformOptions {\n emit_types?: boolean;\n}\n\n/**\n * Transforms a `<script effect>` body by extracting top-level `yield*`\n * expressions into `$state` temp bindings and wrapping the lowered\n * assignments in a dependency-tracked `$effect` block.\n *\n * @example\n * ```ts\n * const result = transform_script_effect(\n * `let user = $state(yield* getUser(id));`,\n * \"App.svelte\",\n * );\n * ```\n *\n * @since 2.0.0\n * @param content - The raw `<script effect>` body content.\n * @param filename - The source filename, used in error messages.\n * @param options - Optional transform settings for generated script code.\n * @returns The transformed code and any block references.\n */\nexport function transform_script_effect(\n content: string,\n filename: string,\n options: ScriptTransformOptions = {},\n): ScriptTransformResult {\n let temp_counter = 0;\n\n const source_file = ts.createSourceFile(\n filename,\n content,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n const magic = new MagicString(content);\n const effect_blocks: EffectBlock[] = [];\n const block_refs: BlockRef[] = [];\n const top_level_binding_names = collect_top_level_binding_names(source_file);\n const top_level_binding_names_set = new Set(top_level_binding_names);\n const name_allocator = make_name_allocator(top_level_binding_names);\n const emit_types = options.emit_types ?? true;\n\n let has_effect = false;\n\n /** Phase 1: detect imports already provided by the user. */\n const has_effect_import = has_local_import_binding(\n source_file,\n \"effect\",\n \"Effect\",\n );\n\n const has_dispatcher_import = has_local_import_binding(\n source_file,\n \"svelte-effect-runtime/internal/generators\",\n \"get_dispatcher\",\n );\n\n const has_untrack_import = has_local_import_binding(\n source_file,\n \"svelte\",\n \"untrack\",\n );\n\n const reserve_runtime_import = (name: string) =>\n top_level_binding_names_set.has(name)\n ? name_allocator.reserve(make_generated_name(name, \"\"))\n : name_allocator.reserve(name);\n\n const runtime_bindings: RuntimeImportBindings = {\n cancel: name_allocator.reserve(\"__SER___cancel\"),\n dispatcher: has_dispatcher_import\n ? \"get_dispatcher\"\n : reserve_runtime_import(\"get_dispatcher\"),\n dispatcher_value: name_allocator.reserve(\"__SER___dispatcher\"),\n effect: has_effect_import ? \"Effect\" : reserve_runtime_import(\"Effect\"),\n program: name_allocator.reserve(\"__SER___program\"),\n untrack: has_untrack_import ? \"untrack\" : reserve_runtime_import(\"untrack\"),\n };\n\n const context: ScriptLoweringContext = {\n effect_name: runtime_bindings.effect,\n emit_types,\n next_temp_name(hint?: string) {\n const suffix = temp_counter === 0 ? \"\" : `_${temp_counter}`;\n const name = make_generated_name(hint ?? String(temp_counter), suffix);\n\n temp_counter += 1;\n\n return name_allocator.reserve(name);\n },\n next_type_helper_name(hint?: string) {\n return name_allocator.reserve(\n make_generated_name(`type_${hint ?? \"effect\"}`, \"\"),\n );\n },\n };\n\n /** Phase 2: lower every top-level statement that contains `yield*`. */\n for (const stmt of source_file.statements) {\n validate_rune_yield_usage(stmt, content, filename);\n validate_script_yield_boundaries(stmt, content, filename);\n\n const has_top_level_yield_star = contains_top_level_yield_star(stmt);\n\n if (!has_top_level_yield_star) {\n continue;\n }\n\n if (contains_top_level_await(stmt)) {\n const text = slice(content, stmt);\n throw new AwaitInEffectWorkError(filename, text);\n }\n\n has_effect = true;\n const lowered = lower_statement(stmt, content, context);\n\n magic.overwrite(\n lowered.range.start,\n lowered.range.end,\n lowered.rewritten_text,\n );\n\n if (lowered.temps.length > 0 || lowered.type_helpers?.length) {\n const temp_declarations = lowered.temps.map((temp) =>\n temp.type\n ? `let ${temp.name} = $state<${temp.type}>(undefined);`\n : `let ${temp.name} = $state(undefined);`\n );\n\n const prefix = [\n ...(lowered.type_helpers ?? []),\n ...temp_declarations,\n ].join(\"\\n\");\n\n magic.appendLeft(lowered.range.start, prefix + \"\\n\");\n }\n\n effect_blocks.push(...lowered.effect_blocks);\n }\n\n if (!has_effect) {\n block_refs.push({ id: filename, kind: \"script\" });\n\n return { code: content, blocks: block_refs };\n }\n\n /** Phase 3: inject runtime imports after the last user import. */\n const imports = make_imports(\n has_effect_import,\n has_dispatcher_import,\n has_untrack_import,\n runtime_bindings,\n );\n\n const last_import = [...source_file.statements]\n .reverse()\n .find(ts.isImportDeclaration);\n\n if (last_import) {\n magic.appendRight(last_import.end, \"\\n\" + imports);\n } else {\n magic.prepend(imports + \"\\n\");\n }\n\n /** Phase 4: append the runtime program and lifecycle wiring. */\n const runtime_block = make_runtime_block_with_bindings(\n effect_blocks,\n runtime_bindings,\n );\n magic.append(\"\\n\" + runtime_block);\n\n block_refs.push({ id: filename, kind: \"script\" });\n\n return {\n code: magic.toString(),\n blocks: block_refs,\n map: create_source_map(magic, filename),\n };\n}\n\nfunction validate_script_yield_boundaries(\n stmt: ts.Statement,\n content: string,\n filename: string,\n): void {\n const bad_member = find_class_member_with_yield_star(stmt);\n\n if (!bad_member) {\n return;\n }\n\n throw new PreprocessError(\n [\n `[ASYNC_EFFECT_IN_CLASS_MEMBER]: ${filename}: yield* cannot be used inside class members.`,\n `Class fields and methods are not component top-level reactive work. Move the Effect work into a script effect statement before assigning it to the class instance.`,\n \"\",\n \"Problematic member:\",\n slice(content, bad_member),\n ].join(\"\\n\"),\n filename,\n );\n}\n\nfunction find_class_member_with_yield_star(\n stmt: ts.Statement,\n): ts.Node | undefined {\n let found: ts.Node | undefined;\n\n function visit(node: ts.Node): void {\n if (found) {\n return;\n }\n\n if (\n ts.isPropertyDeclaration(node) &&\n node.initializer &&\n contains_top_level_yield_star(node.initializer)\n ) {\n found = node;\n return;\n }\n\n node.forEachChild(visit);\n }\n\n visit(stmt);\n\n return found;\n}\n\nfunction make_name_allocator(initial_names: readonly string[]): {\n reserve(name: string): string;\n} {\n const used_names = new Set(initial_names);\n\n return {\n reserve(name: string): string {\n let candidate = name;\n let suffix = 1;\n\n while (used_names.has(candidate)) {\n candidate = `${name}_${suffix}`;\n suffix += 1;\n }\n\n used_names.add(candidate);\n\n return candidate;\n },\n };\n}\n\nfunction make_generated_name(hint: string, suffix: string): string {\n const normalized_hint = hint.replace(/[^A-Za-z0-9_$]/g, \"_\");\n const safe_hint = /^[A-Za-z_$]/.test(normalized_hint)\n ? normalized_hint\n : `temp_${normalized_hint}`;\n\n return `__SER___${safe_hint}${suffix}`;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transform-Cx5bjmP6.js","names":["is_yield_star_expression"],"sources":["../../../modules/svelte-effect-runtime/src/preprocess/imports.ts","../../../modules/svelte-effect-runtime/src/markup/transform/constants.ts","../../../modules/svelte-effect-runtime/src/markup/transform/apply.ts","../../../modules/svelte-effect-runtime/src/markup/transform/classify.ts","../../../modules/svelte-effect-runtime/src/markup/transform/effect-bindings.ts","../../../modules/svelte-effect-runtime/src/error.ts","../../../modules/svelte-effect-runtime/src/markup/transform/expressions.ts","../../../modules/svelte-effect-runtime/src/markup/transform/effect-callbacks.ts","../../../modules/svelte-effect-runtime/src/markup/transform/emit.ts","../../../modules/svelte-effect-runtime/src/preprocess/ast.ts","../../../modules/svelte-effect-runtime/src/markup/transform/scan.ts","../../../modules/svelte-effect-runtime/src/markup/transform/index.ts"],"sourcesContent":["import ts from \"typescript\";\nimport type { RuntimeImportBindings } from \"./types.ts\";\n\n/**\n * Builds the import statements injected by the script preprocessor.\n *\n * @since 2.0.0\n * @param has_effect_import - Whether the user already imports `Effect`.\n * @param has_dispatcher_import - Whether the user already imports\n * `get_dispatcher`.\n * @param has_untrack_import - Whether the user already imports `untrack`.\n * @returns Newline-separated import statements to inject.\n */\nexport function make_imports(\n has_effect_import: boolean,\n has_dispatcher_import: boolean,\n has_untrack_import: boolean,\n bindings: RuntimeImportBindings = {\n cancel: \"__SER___cancel\",\n dispatcher: \"get_dispatcher\",\n dispatcher_value: \"__SER___dispatcher\",\n effect: \"Effect\",\n program: \"__SER___program\",\n untrack: \"untrack\",\n },\n): string {\n const dispatcher_import = bindings.dispatcher === \"get_dispatcher\"\n ? `import { get_dispatcher } from \"svelte-effect-runtime/internal/generators\";`\n : `import { get_dispatcher as ${bindings.dispatcher} } from \"svelte-effect-runtime/internal/generators\";`;\n\n const untrack_import = bindings.untrack === \"untrack\"\n ? `import { untrack } from \"svelte\";`\n : `import { untrack as ${bindings.untrack} } from \"svelte\";`;\n\n const effect_import = has_effect_import\n ? false\n : bindings.effect === \"Effect\"\n ? `import { Effect } from \"effect\";`\n : `import { Effect as ${bindings.effect} } from \"effect\";`;\n\n return [\n !has_dispatcher_import && dispatcher_import,\n !has_untrack_import && untrack_import,\n effect_import,\n ]\n .filter(Boolean)\n .join(\"\\n\");\n}\n\n/**\n * Checks whether a source file imports a local binding from a module.\n *\n * @since 2.0.0\n * @param source_file - Parsed TypeScript source file to inspect.\n * @param module_name - Module specifier to match.\n * @param local_name - Local binding name to look for.\n * @returns Whether that binding is already locally available.\n */\nexport function has_local_import_binding(\n source_file: ts.SourceFile,\n module_name: string,\n local_name: string,\n): boolean {\n return source_file.statements.some((stmt) => {\n if (\n !ts.isImportDeclaration(stmt) ||\n !ts.isStringLiteral(stmt.moduleSpecifier) ||\n stmt.moduleSpecifier.text !== module_name\n ) {\n return false;\n }\n\n const clause = stmt.importClause;\n\n if (!clause || clause.isTypeOnly) {\n return false;\n }\n\n if (clause.name?.text === local_name) {\n return true;\n }\n\n const named_bindings = clause.namedBindings;\n\n if (!named_bindings) {\n return false;\n }\n\n if (ts.isNamespaceImport(named_bindings)) {\n return named_bindings.name.text === local_name;\n }\n\n return named_bindings.elements.some(\n (element) => !element.isTypeOnly && element.name.text === local_name,\n );\n });\n}\n\n/**\n * Checks whether a source file already has any top-level binding with a local\n * name.\n *\n * @since 2.4.2\n * @param source_file - Parsed TypeScript source file to inspect.\n * @param local_name - Local binding name to look for.\n * @returns Whether that local name is already declared in the file.\n */\nexport function has_top_level_binding(\n source_file: ts.SourceFile,\n local_name: string,\n): boolean {\n return collect_top_level_binding_names(source_file).includes(local_name);\n}\n\n/**\n * Collects every local binding declared at module top level.\n *\n * @since 2.4.2\n * @param source_file - Parsed TypeScript source file to inspect.\n * @returns Top-level names declared by imports, declarations, and variables.\n */\nexport function collect_top_level_binding_names(\n source_file: ts.SourceFile,\n): string[] {\n return source_file.statements.flatMap(collect_statement_binding_names);\n}\n\nfunction collect_statement_binding_names(stmt: ts.Statement): string[] {\n if (ts.isImportDeclaration(stmt)) {\n return collect_import_binding_names(stmt);\n }\n\n if (ts.isVariableStatement(stmt)) {\n return stmt.declarationList.declarations.flatMap((decl) =>\n collect_binding_name_text(decl.name)\n );\n }\n\n if (\n ts.isFunctionDeclaration(stmt) ||\n ts.isClassDeclaration(stmt) ||\n ts.isInterfaceDeclaration(stmt) ||\n ts.isTypeAliasDeclaration(stmt) ||\n ts.isEnumDeclaration(stmt) ||\n ts.isModuleDeclaration(stmt)\n ) {\n return stmt.name ? [stmt.name.text] : [];\n }\n\n return [];\n}\n\nfunction collect_import_binding_names(stmt: ts.ImportDeclaration): string[] {\n const clause = stmt.importClause;\n\n if (!clause) {\n return [];\n }\n\n return [\n clause.name?.text,\n clause.namedBindings && ts.isNamespaceImport(clause.namedBindings)\n ? clause.namedBindings.name.text\n : undefined,\n clause.namedBindings && ts.isNamedImports(clause.namedBindings)\n ? clause.namedBindings.elements.map((element) => element.name.text)\n : undefined,\n ].flat().filter((name): name is string => name !== undefined);\n}\n\nfunction collect_binding_name_text(name: ts.BindingName): string[] {\n if (ts.isIdentifier(name)) {\n return [name.text];\n }\n\n return name.elements.flatMap((element) => {\n if (ts.isOmittedExpression(element)) {\n return [];\n }\n\n return collect_binding_name_text(element.name);\n });\n}\n","export const HELPERS = {\n value: \"__SER___markup_value\",\n promise: \"__SER___markup_promise\",\n run: \"__SER___markup_run\",\n} as const;\n","import type MagicString from \"magic-string\";\n\nimport { collect_top_level_binding_names } from \"$/preprocess/imports.ts\";\nimport { HELPERS } from \"./constants.ts\";\nimport type {\n HelperDeclaration,\n Insertion,\n MarkupHelperBindings,\n MarkupRelocation,\n PendingRelocation,\n Replacement,\n} from \"./types.ts\";\nimport ts from \"typescript\";\n\nexport function create_source_map(\n magic: MagicString,\n filename: string,\n): Record<string, unknown> {\n const map = magic.generateMap({\n hires: true,\n includeContent: true,\n source: filename,\n });\n\n return map as unknown as Record<string, unknown>;\n}\n\nexport function blank_script_blocks(content: string): string {\n return content.replace(\n /<script\\b[^>]*>[\\s\\S]*?<\\/script\\s*>/gi,\n (match) => {\n const lines = match.split(\"\\n\");\n return lines.map((l) => \" \".repeat(l.length)).join(\"\\n\");\n },\n );\n}\n\nexport function inject_helpers(\n magic: MagicString,\n content: string,\n helpers: HelperDeclaration[] = [],\n bindings: MarkupHelperBindings = HELPERS,\n): Insertion | undefined {\n const import_helpers = unique_import_helpers(helpers);\n const local_helpers = helpers.filter((helper) => !is_import_helper(helper));\n\n const helper_segments: Array<{\n text: string;\n relocation?: PendingRelocation;\n }> = [\n `import { value as ${bindings.value} } from \"svelte-effect-runtime/internal/generators\";`,\n `import { promise as ${bindings.promise} } from \"svelte-effect-runtime/internal/generators\";`,\n `import { run as ${bindings.run} } from \"svelte-effect-runtime/internal/generators\";`,\n ...import_helpers,\n ...local_helpers,\n ].map((helper) => typeof helper === \"string\" ? { text: helper } : helper);\n\n const helper_block = helper_segments.map((segment) => segment.text).join(\n \"\\n\",\n );\n\n const script_tag = find_instance_script_tag(content);\n\n if (script_tag) {\n const text = `\\n${helper_block}\\n`;\n\n magic.appendLeft(script_tag.end, text);\n\n return {\n start: script_tag.end,\n text,\n relocations: make_insertion_relocations(helper_segments, \"\\n\"),\n };\n } else {\n const text = `<script>\\n${helper_block}\\n</script>\\n\\n`;\n\n magic.prepend(text);\n\n return {\n start: 0,\n text,\n relocations: make_insertion_relocations(helper_segments, \"<script>\\n\"),\n };\n }\n}\n\nexport function make_markup_helper_bindings(\n content: string,\n): {\n bindings: MarkupHelperBindings;\n name_allocator: { reserve(name: string): string };\n} {\n const script_tag = find_instance_script_tag(content);\n const binding_names = script_tag\n ? collect_script_binding_names(\n content.slice(script_tag.start, script_tag.end),\n )\n : [];\n const name_allocator = make_name_allocator(binding_names);\n\n return {\n bindings: {\n value: name_allocator.reserve(HELPERS.value),\n promise: name_allocator.reserve(HELPERS.promise),\n run: name_allocator.reserve(HELPERS.run),\n },\n name_allocator,\n };\n}\n\nexport function create_relocations(\n replacements: Replacement[],\n helper_insertion: Insertion | undefined,\n): MarkupRelocation[] {\n const edits = [\n helper_insertion && {\n start: helper_insertion.start,\n removedLength: 0,\n insertedLength: helper_insertion.text.length,\n },\n ...replacements.map((replacement) => ({\n start: replacement.start,\n removedLength: replacement.end - replacement.start,\n insertedLength: replacement.text.length,\n })),\n ].filter(Boolean) as Array<{\n start: number;\n removedLength: number;\n insertedLength: number;\n }>;\n\n const replacement_relocations = replacements.flatMap((replacement) => {\n if (!replacement.relocation) {\n return [];\n }\n\n const delta_before = edits\n .filter((edit) => edit.start < replacement.start)\n .reduce(\n (total, edit) => total + edit.insertedLength - edit.removedLength,\n 0,\n );\n const generated_start = replacement.start + delta_before;\n\n return [{\n originalStart: replacement.relocation.originalStart,\n originalEnd: replacement.relocation.originalEnd,\n generatedStart: generated_start +\n replacement.relocation.generatedStartInReplacement,\n generatedEnd: generated_start +\n replacement.relocation.generatedEndInReplacement,\n }];\n });\n\n const helper_relocations = helper_insertion?.relocations?.map(\n (relocation) => ({\n originalStart: relocation.originalStart,\n originalEnd: relocation.originalEnd,\n generatedStart: helper_insertion.start +\n relocation.generatedStartInReplacement,\n generatedEnd: helper_insertion.start +\n relocation.generatedEndInReplacement,\n }),\n ) ?? [];\n\n return [\n ...replacement_relocations,\n ...helper_relocations,\n ];\n}\n\nfunction make_insertion_relocations(\n segments: Array<{\n text: string;\n relocation?: PendingRelocation;\n }>,\n prefix: string,\n): PendingRelocation[] {\n const relocations: PendingRelocation[] = [];\n let offset = prefix.length;\n\n for (const segment of segments) {\n if (segment.relocation) {\n relocations.push({\n originalStart: segment.relocation.originalStart,\n originalEnd: segment.relocation.originalEnd,\n generatedStartInReplacement: offset +\n segment.relocation.generatedStartInReplacement,\n generatedEndInReplacement: offset +\n segment.relocation.generatedEndInReplacement,\n });\n }\n\n offset += segment.text.length + 1;\n }\n\n return relocations;\n}\n\nfunction find_instance_script_tag(\n content: string,\n): { start: number; end: number } | undefined {\n const pattern = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n for (const match of content.matchAll(pattern)) {\n if (match.index === undefined) continue;\n\n const attrs = match[1] ?? \"\";\n if (\n /\\bcontext\\s*=\\s*[\"']module[\"']/.test(attrs) ||\n /\\bmodule\\b/.test(attrs)\n ) {\n continue;\n }\n\n const open_end = match[0].indexOf(\">\") + 1;\n return {\n start: match.index + open_end,\n end: match.index + match[0].length - \"</script>\".length,\n };\n }\n\n return undefined;\n}\n\nfunction unique_import_helpers(\n helpers: HelperDeclaration[],\n): HelperDeclaration[] {\n const seen = new Set<string>();\n\n return helpers.filter((helper) => {\n if (!is_import_helper(helper)) {\n return false;\n }\n\n if (seen.has(helper.text)) {\n return false;\n }\n\n seen.add(helper.text);\n\n return true;\n });\n}\n\nfunction is_import_helper(helper: HelperDeclaration): boolean {\n return helper.text.trimStart().startsWith(\"import \");\n}\n\nfunction collect_script_binding_names(script_content: string): string[] {\n const source_file = ts.createSourceFile(\n \"markup-script.ts\",\n script_content,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n return collect_top_level_binding_names(source_file);\n}\n\nfunction make_name_allocator(initial_names: readonly string[]): {\n reserve(name: string): string;\n} {\n const used_names = new Set(initial_names);\n\n return {\n reserve(name: string): string {\n let candidate = name;\n let suffix = 1;\n\n while (used_names.has(candidate)) {\n candidate = `${name}_${suffix}`;\n suffix += 1;\n }\n\n used_names.add(candidate);\n\n return candidate;\n },\n };\n}\n","import type { AST } from \"svelte/compiler\";\n\nimport type { MarkupCandidate, TagKind } from \"./types.ts\";\n\n/**\n * Matches sanitized placeholders back to their Svelte AST context.\n *\n * @since 2.0.0\n * @param ast - Parsed Svelte AST for the sanitized component markup.\n * @param candidates - Placeholder candidates produced by the scanner.\n * @returns Candidates paired with the markup context that determines how they\n * should be emitted.\n */\nexport function classify_candidates(\n ast: AST.Root,\n candidates: MarkupCandidate[],\n): Array<{ candidate: MarkupCandidate; kind: TagKind }> {\n const by_placeholder = new Map(\n candidates.map((candidate) => [candidate.placeholder, candidate]),\n );\n\n const classified: Array<{ candidate: MarkupCandidate; kind: TagKind }> = [];\n const matched = new Set<string>();\n\n walk_ast(ast.fragment, by_placeholder, matched, classified);\n\n return classified;\n}\n\nfunction walk_ast(\n fragment: AST.Fragment,\n candidates: Map<string, MarkupCandidate>,\n matched: Set<string>,\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n for (const node of fragment.nodes) {\n visit_ast_node(node, candidates, matched, classified);\n }\n}\n\nfunction visit_ast_node(\n node: AST.Fragment[\"nodes\"][number],\n candidates: Map<string, MarkupCandidate>,\n matched: Set<string>,\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n switch (node.type) {\n case \"ExpressionTag\":\n classify_expression(\n node.expression,\n \"plain\",\n candidates,\n matched,\n classified,\n );\n return;\n\n case \"IfBlock\":\n classify_expression(node.test, \"plain\", candidates, matched, classified);\n walk_ast(node.consequent, candidates, matched, classified);\n if (node.alternate) {\n walk_ast(node.alternate, candidates, matched, classified);\n }\n return;\n\n case \"EachBlock\":\n classify_expression(\n node.expression,\n \"each\",\n candidates,\n matched,\n classified,\n );\n walk_ast(node.body, candidates, matched, classified);\n if (node.fallback) {\n walk_ast(node.fallback, candidates, matched, classified);\n }\n return;\n\n case \"AwaitBlock\":\n classify_expression(\n node.expression,\n \"await\",\n candidates,\n matched,\n classified,\n );\n if (node.pending) {\n walk_ast(node.pending, candidates, matched, classified);\n }\n if (node.then) walk_ast(node.then, candidates, matched, classified);\n if (node.catch) walk_ast(node.catch, candidates, matched, classified);\n return;\n\n case \"RenderTag\":\n classify_expression(\n node.expression,\n \"render\",\n candidates,\n matched,\n classified,\n );\n return;\n\n case \"HtmlTag\":\n classify_expression(\n node.expression,\n \"plain\",\n candidates,\n matched,\n classified,\n );\n return;\n\n case \"DebugTag\":\n classify_debug_tag(node, candidates, matched, classified);\n return;\n\n case \"ConstTag\":\n case \"DeclarationTag\":\n classify_declaration_tag(node, candidates, matched, classified);\n return;\n\n case \"KeyBlock\":\n classify_expression(\n node.expression,\n \"plain\",\n candidates,\n matched,\n classified,\n );\n walk_ast(node.fragment, candidates, matched, classified);\n return;\n\n case \"RegularElement\":\n case \"Component\":\n case \"TitleElement\":\n case \"SlotElement\":\n case \"SvelteBody\":\n case \"SvelteBoundary\":\n case \"SvelteComponent\":\n case \"SvelteDocument\":\n case \"SvelteElement\":\n case \"SvelteFragment\":\n case \"SvelteHead\":\n case \"SvelteSelf\":\n case \"SvelteWindow\":\n visit_element_attributes(node, candidates, matched, classified);\n walk_ast(node.fragment, candidates, matched, classified);\n return;\n\n default:\n return;\n }\n}\n\nfunction classify_debug_tag(\n _node: Extract<AST.Fragment[\"nodes\"][number], { type: \"DebugTag\" }>,\n _candidates: Map<string, MarkupCandidate>,\n _matched: Set<string>,\n _classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n return;\n}\n\nfunction classify_declaration_tag(\n node: Extract<\n AST.Fragment[\"nodes\"][number],\n { type: \"ConstTag\" | \"DeclarationTag\" }\n >,\n candidates: Map<string, MarkupCandidate>,\n matched: Set<string>,\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n for (const decl of node.declaration.declarations) {\n if (!decl.init) {\n continue;\n }\n\n classify_expression(decl.init, \"plain\", candidates, matched, classified);\n }\n}\n\ninterface ElementLikeNode {\n attributes: Array<{\n type: string;\n name?: string;\n value?: unknown;\n expression?: unknown;\n }>;\n fragment: AST.Fragment;\n}\n\nfunction visit_element_attributes(\n node: ElementLikeNode,\n candidates: Map<string, MarkupCandidate>,\n matched: Set<string>,\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n for (const attr of node.attributes) {\n if (\n attr.type === \"Attribute\" &&\n attr.name &&\n is_event_attribute_name(attr.name)\n ) {\n visit_attribute_value(\n attr.value as\n | true\n | AST.ExpressionTag\n | Array<AST.Text | AST.ExpressionTag>,\n \"event\",\n candidates,\n matched,\n classified,\n );\n continue;\n }\n\n if (attr.type === \"OnDirective\" && attr.expression) {\n classify_expression(\n attr.expression as ExpressionLike,\n \"event\",\n candidates,\n matched,\n classified,\n );\n continue;\n }\n }\n}\n\nfunction is_event_attribute_name(name: string): boolean {\n return name.startsWith(\"on:\") || /^on[a-z]/.test(name);\n}\n\nfunction visit_attribute_value(\n value: true | AST.ExpressionTag | Array<AST.Text | AST.ExpressionTag>,\n kind: TagKind,\n candidates: Map<string, MarkupCandidate>,\n matched: Set<string>,\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n if (value === true) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const part of value) {\n if (part.type === \"ExpressionTag\") {\n classify_expression(\n part.expression,\n kind,\n candidates,\n matched,\n classified,\n );\n }\n }\n return;\n }\n\n classify_expression(\n value.expression,\n kind,\n candidates,\n matched,\n classified,\n );\n}\n\ntype ExpressionLike = {\n type: string;\n name?: string;\n callee?: { type: string; name?: string };\n};\n\nfunction classify_expression(\n expression: ExpressionLike | null | undefined,\n kind: TagKind,\n candidates: Map<string, MarkupCandidate>,\n matched: Set<string>,\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n): void {\n if (!expression) {\n return;\n }\n\n const found_candidates = find_candidates(expression, candidates);\n\n for (const candidate of found_candidates) {\n if (matched.has(candidate.placeholder)) {\n continue;\n }\n\n matched.add(candidate.placeholder);\n classified.push({\n candidate,\n kind: resolve_candidate_kind(candidate, kind),\n });\n }\n}\n\nfunction resolve_candidate_kind(\n candidate: MarkupCandidate,\n context_kind: TagKind,\n): TagKind {\n if (candidate.key === \"render_argument\") {\n return \"render_argument\";\n }\n\n return context_kind;\n}\n\nfunction find_candidates(\n expression: ExpressionLike,\n candidates: Map<string, MarkupCandidate>,\n): MarkupCandidate[] {\n const found: MarkupCandidate[] = [];\n const seen_nodes = new Set<unknown>();\n const seen_placeholders = new Set<string>();\n\n visit_expression_value(\n expression,\n candidates,\n seen_nodes,\n seen_placeholders,\n found,\n );\n\n return found;\n}\n\nfunction visit_expression_value(\n value: unknown,\n candidates: Map<string, MarkupCandidate>,\n seen_nodes: Set<unknown>,\n seen_placeholders: Set<string>,\n found: MarkupCandidate[],\n): void {\n if (Array.isArray(value)) {\n for (const item of value) {\n visit_expression_value(\n item,\n candidates,\n seen_nodes,\n seen_placeholders,\n found,\n );\n }\n\n return;\n }\n\n if (!is_record(value) || seen_nodes.has(value)) {\n return;\n }\n\n seen_nodes.add(value);\n\n if (value.type === \"Identifier\" && typeof value.name === \"string\") {\n const candidate = candidates.get(value.name);\n\n if (candidate && !seen_placeholders.has(candidate.placeholder)) {\n seen_placeholders.add(candidate.placeholder);\n found.push(candidate);\n }\n }\n\n for (const child of Object.values(value)) {\n visit_expression_value(\n child,\n candidates,\n seen_nodes,\n seen_placeholders,\n found,\n );\n }\n}\n\nfunction is_record(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n","import type { HelperDeclaration } from \"./types.ts\";\n\nimport ts from \"typescript\";\n\nconst EFFECT_PACKAGE_MODULE = \"effect\";\nconst EFFECT_DIRECT_MODULE = \"effect/Effect\";\nconst GENERATED_EFFECT_NAME = \"__SER___Effect\";\n\n/**\n * Describes local bindings that resolve to Effect APIs in markup expressions.\n *\n * @example\n * ```ts\n * const context = collect_effect_callback_bindings(source);\n * context.effect_object_names.has(\"E\");\n * ```\n *\n * @since 2.4.0\n */\nexport interface EffectCallbackRewriteContext {\n /** Local names imported as the Effect object, such as `Effect` or `E`. */\n effect_object_names: ReadonlySet<string>;\n /** Namespace names imported from `effect/Effect`, such as `E.flatMap`. */\n effect_module_names: ReadonlySet<string>;\n /** Package namespace names imported from `effect`, such as `Fx.Effect`. */\n effect_package_names: ReadonlySet<string>;\n /** Direct `effect/Effect` imports mapped from local name to exported name. */\n direct_members: ReadonlyMap<string, string>;\n /** Expression used for generated `gen`, `sync`, and upgraded direct calls. */\n wrapper_expression: string;\n /** Import inserted when generated code needs a fresh Effect binding. */\n wrapper_import: HelperDeclaration | undefined;\n}\n\ninterface EffectBindingState {\n effect_object_names: string[];\n effect_module_names: string[];\n effect_package_names: string[];\n direct_members: Map<string, string>;\n local_names: Set<string>;\n implicit_effect_import: boolean;\n}\n\n/**\n * Collects Effect import bindings that markup callback rewriting can trust.\n *\n * @example\n * ```ts\n * const bindings = collect_effect_callback_bindings(\n * `<script>import { Effect as E } from \"effect\";</script>`,\n * );\n * ```\n *\n * @since 2.4.0\n * @param content - Full Svelte component source before markup lowering.\n * @returns Binding metadata used to identify Effect callback combinators.\n */\nexport function collect_effect_callback_bindings(\n content: string,\n): EffectCallbackRewriteContext {\n const state = make_effect_binding_state();\n const scripts = collect_script_blocks(content);\n\n for (const script of scripts) {\n const source_file = ts.createSourceFile(\n \"component-script.ts\",\n script,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n collect_source_file_bindings(source_file, state);\n }\n\n ensure_implicit_effect_binding(state);\n\n const wrapper = choose_effect_wrapper(state);\n\n return {\n effect_object_names: new Set(state.effect_object_names),\n effect_module_names: new Set(state.effect_module_names),\n effect_package_names: new Set(state.effect_package_names),\n direct_members: new Map(state.direct_members),\n wrapper_expression: wrapper.expression,\n wrapper_import: wrapper.import_text\n ? { text: wrapper.import_text }\n : undefined,\n };\n}\n\nfunction make_effect_binding_state(): EffectBindingState {\n return {\n effect_object_names: [],\n effect_module_names: [],\n effect_package_names: [],\n direct_members: new Map(),\n local_names: new Set(),\n implicit_effect_import: false,\n };\n}\n\nfunction collect_script_blocks(content: string): string[] {\n const pattern = /<script\\b[^>]*>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n return [...content.matchAll(pattern)].map((match) => match[1] ?? \"\");\n}\n\nfunction collect_source_file_bindings(\n source_file: ts.SourceFile,\n state: EffectBindingState,\n): void {\n for (const statement of source_file.statements) {\n collect_statement_binding(statement, state);\n }\n}\n\nfunction collect_statement_binding(\n statement: ts.Statement,\n state: EffectBindingState,\n): void {\n if (ts.isImportDeclaration(statement)) {\n collect_import_binding(statement, state);\n return;\n }\n\n if (ts.isImportEqualsDeclaration(statement)) {\n state.local_names.add(statement.name.text);\n return;\n }\n\n if (ts.isVariableStatement(statement)) {\n for (const declaration of statement.declarationList.declarations) {\n collect_binding_name(declaration.name, state.local_names);\n }\n\n return;\n }\n\n if (\n ts.isFunctionDeclaration(statement) ||\n ts.isClassDeclaration(statement) ||\n ts.isInterfaceDeclaration(statement) ||\n ts.isTypeAliasDeclaration(statement) ||\n ts.isEnumDeclaration(statement) ||\n ts.isModuleDeclaration(statement)\n ) {\n if (statement.name) {\n state.local_names.add(statement.name.text);\n }\n }\n}\n\nfunction collect_import_binding(\n statement: ts.ImportDeclaration,\n state: EffectBindingState,\n): void {\n if (!ts.isStringLiteral(statement.moduleSpecifier)) {\n return;\n }\n\n const module_name = statement.moduleSpecifier.text;\n const clause = statement.importClause;\n\n if (!clause) {\n return;\n }\n\n if (clause.name) {\n state.local_names.add(clause.name.text);\n }\n\n const named_bindings = clause.namedBindings;\n\n if (!named_bindings) {\n return;\n }\n\n if (ts.isNamespaceImport(named_bindings)) {\n collect_namespace_import_binding(\n module_name,\n named_bindings.name.text,\n state,\n );\n return;\n }\n\n for (const element of named_bindings.elements) {\n collect_named_import_binding(module_name, element, state);\n }\n}\n\nfunction collect_namespace_import_binding(\n module_name: string,\n local_name: string,\n state: EffectBindingState,\n): void {\n state.local_names.add(local_name);\n\n if (module_name === EFFECT_DIRECT_MODULE) {\n add_ordered_name(state.effect_module_names, local_name);\n return;\n }\n\n if (module_name === EFFECT_PACKAGE_MODULE) {\n add_ordered_name(state.effect_package_names, local_name);\n }\n}\n\nfunction collect_named_import_binding(\n module_name: string,\n element: ts.ImportSpecifier,\n state: EffectBindingState,\n): void {\n const imported_name = element.propertyName?.text ?? element.name.text;\n const local_name = element.name.text;\n\n state.local_names.add(local_name);\n\n if (module_name === EFFECT_PACKAGE_MODULE && imported_name === \"Effect\") {\n add_ordered_name(state.effect_object_names, local_name);\n return;\n }\n\n if (module_name === EFFECT_DIRECT_MODULE) {\n state.direct_members.set(local_name, imported_name);\n }\n}\n\nfunction collect_binding_name(\n name: ts.BindingName,\n local_names: Set<string>,\n): void {\n if (ts.isIdentifier(name)) {\n local_names.add(name.text);\n return;\n }\n\n for (const element of name.elements) {\n if (ts.isOmittedExpression(element)) {\n continue;\n }\n\n collect_binding_name(element.name, local_names);\n }\n}\n\nfunction ensure_implicit_effect_binding(state: EffectBindingState): void {\n if (has_effect_binding(state) || state.local_names.has(\"Effect\")) {\n return;\n }\n\n add_ordered_name(state.effect_object_names, \"Effect\");\n state.implicit_effect_import = true;\n}\n\nfunction has_effect_binding(state: EffectBindingState): boolean {\n return state.effect_object_names.length > 0 ||\n state.effect_module_names.length > 0 ||\n state.effect_package_names.length > 0 ||\n state.direct_members.size > 0;\n}\n\nfunction choose_effect_wrapper(\n state: EffectBindingState,\n): { expression: string; import_text?: string } {\n const effect_object = state.effect_object_names[0];\n\n if (effect_object) {\n return {\n expression: effect_object,\n import_text: state.implicit_effect_import\n ? `import { Effect } from \"effect\";`\n : undefined,\n };\n }\n\n const effect_module = state.effect_module_names[0];\n\n if (effect_module) {\n return { expression: effect_module };\n }\n\n const effect_package = state.effect_package_names[0];\n\n if (effect_package) {\n return { expression: `${effect_package}.Effect` };\n }\n\n const generated_name = make_generated_effect_name(state.local_names);\n\n return {\n expression: generated_name,\n import_text: `import { Effect as ${generated_name} } from \"effect\";`,\n };\n}\n\nfunction make_generated_effect_name(local_names: ReadonlySet<string>): string {\n if (!local_names.has(GENERATED_EFFECT_NAME)) {\n return GENERATED_EFFECT_NAME;\n }\n\n let index = 1;\n\n while (local_names.has(`${GENERATED_EFFECT_NAME}_${index}`)) {\n index += 1;\n }\n\n return `${GENERATED_EFFECT_NAME}_${index}`;\n}\n\nfunction add_ordered_name(names: string[], name: string): void {\n if (names.includes(name)) {\n return;\n }\n\n names.push(name);\n}\n","/**\n * Formats a runtime-owned error message with a stable screaming-case code.\n *\n * @example\n * ```ts\n * throw new Error(make_error_message(\"DISPATCHER_DISPOSED\", \"Dispatcher has been disposed\"));\n * ```\n *\n * @since 2.0.0\n * @param code - Stable screaming-case identifier for the error category.\n * @param message - Human-readable error message without the leading code.\n * @returns The complete error message prefixed with the stable code.\n */\nexport function make_error_message(code: string, message: string): string {\n return `[${code}]: ${message}`;\n}\n\n/**\n * Base error class for all preprocessor errors emitted during script and\n * markup transformation. Carries the source filename so error messages can\n * reference the affected file.\n *\n * @since 2.0.0\n */\nexport class PreprocessError extends Error {\n /**\n * The source filename that triggered this error.\n *\n * @since 2.0.0\n */\n readonly filename: string;\n\n constructor(message: string, filename: string) {\n super(message);\n this.name = \"PreprocessError\";\n this.filename = filename;\n }\n}\n\n/**\n * Thrown when a statement mixes JavaScript `await` with Effect `yield*` work\n * that must be lowered into an `Effect.gen` program.\n *\n * @since 2.0.0\n */\nexport class AwaitInEffectWorkError extends PreprocessError {\n /**\n * The full text of the problematic statement containing mixed async work.\n *\n * @since 2.0.0\n */\n readonly statement_text: string;\n\n constructor(filename: string, statement_text: string) {\n super(\n [\n make_error_message(\n \"AWAIT_IN_EFFECT_WORK\",\n `${filename}: await cannot be mixed with yield* in Effect work.`,\n ),\n `Top-level await is supported as ordinary Svelte async rendering, but statements lowered into Effect.gen must use yield* for async Effect work.`,\n \"\",\n `Problematic statement:`,\n statement_text,\n ].join(\"\\n\"),\n filename,\n );\n this.name = \"AwaitInEffectWorkError\";\n this.statement_text = statement_text;\n }\n}\n\n/**\n * Thrown when async Effect work appears inside a Svelte rune position that\n * must stay synchronous.\n *\n * @since 2.0.0\n */\nexport class AsyncEffectInSyncRuneError extends PreprocessError {\n /**\n * The name of the rune that contained async Effect work.\n *\n * @since 2.0.0\n */\n readonly rune_name: string;\n\n /**\n * The full text of the expression that triggered the error.\n *\n * @since 2.0.0\n */\n readonly expression_text: string;\n\n constructor(rune_name: string, expression_text: string, filename: string) {\n super(\n [\n make_error_message(\n \"ASYNC_EFFECT_IN_SYNC_RUNE\",\n `${filename}: yield* cannot be used inside ${rune_name}().`,\n ),\n `${rune_name}() must stay synchronous. Do not put async Effect work inside this rune.`,\n \"\",\n `Problematic expression:`,\n expression_text,\n ].join(\"\\n\"),\n filename,\n );\n this.name = \"AsyncEffectInSyncRuneError\";\n this.rune_name = rune_name;\n this.expression_text = expression_text;\n }\n}\n/**\n * Thrown when async Effect work appears inside a non-generator callback nested\n * in a markup event handler.\n *\n * @example\n * ```ts\n * throw new AsyncEffectInEventCallbackError(\n * \"Component.svelte\",\n * \"Effect.try(() => yield* save())\",\n * );\n * ```\n *\n * @since 2.0.0\n */\nexport class AsyncEffectInEventCallbackError extends PreprocessError {\n /**\n * The full text of the problematic event handler body.\n *\n * @since 2.0.0\n */\n readonly expression_text: string;\n\n constructor(filename: string, expression_text: string) {\n super(\n [\n make_error_message(\n \"ASYNC_EFFECT_IN_EVENT_CALLBACK\",\n `${filename}: yield* cannot be used inside a nested non-generator callback in a markup event handler.`,\n ),\n `Move the yield* to the event handler body. Effect.try and Effect.sync callbacks are plain synchronous JavaScript; do not call Effect-returning functions inside them.`,\n \"\",\n `Run the remote Effect directly:`,\n ` onclick={yield* UpvotePost(id)}`,\n \"\",\n `Recover from remote failures by composing the Effect value:`,\n ` onclick={yield* UpvotePost(id).pipe(Effect.catch(() => Effect.void))}`,\n \"\",\n `Problematic expression:`,\n expression_text,\n ].join(\"\\n\"),\n filename,\n );\n this.name = \"AsyncEffectInEventCallbackError\";\n this.expression_text = expression_text;\n }\n}\n\n/**\n * Thrown when an event handler callback contains the old raw `yield*`\n * shorthand. Effectful event handlers must put `yield*` directly in the event\n * attribute so the callback boundary is generated by the markup runtime.\n *\n * @example\n * ```ts\n * throw new YieldStarInEventCallbackError(\n * \"Component.svelte\",\n * \"() => yield* save()\",\n * );\n * ```\n *\n * @since 2.0.0\n * @param filename - Svelte component filename used to identify where the\n * invalid event handler callback was found.\n * @param expression_text - Original event handler callback text that contained\n * `yield*` and should be rewritten as a direct event Effect expression.\n */\nexport class YieldStarInEventCallbackError extends PreprocessError {\n /**\n * The full text of the problematic event handler callback.\n *\n * @since 2.0.0\n */\n readonly expression_text: string;\n\n constructor(filename: string, expression_text: string) {\n super(\n [\n make_error_message(\n \"ASYNC_EFFECT_IN_EVENT_HANDLER_CALLBACK\",\n `${filename}: yield* in markup event handlers must be written directly as the event attribute value.`,\n ),\n `SER generates the event callback for effectful event handlers; do not put yield* inside a JavaScript callback.`,\n \"\",\n `Use this form:`,\n ` onclick={yield* UpvotePost(id)}`,\n \"\",\n `Instead of this form:`,\n ` onclick={() => yield* UpvotePost(id)}`,\n \"\",\n `Problematic expression:`,\n expression_text,\n ].join(\"\\n\"),\n filename,\n );\n this.name = \"YieldStarInEventCallbackError\";\n this.expression_text = expression_text;\n }\n}\n\n/**\n * Thrown when async Effect work appears in a markup position SER cannot lower\n * safely.\n *\n * @example\n * ```ts\n * throw new UnsupportedMarkupEffectPositionError(\n * \"Component.svelte\",\n * \"value={yield* load()}\",\n * );\n * ```\n *\n * @since 2.4.2\n */\nexport class UnsupportedMarkupEffectPositionError extends PreprocessError {\n /**\n * The unsupported markup expression text.\n *\n * @since 2.4.2\n */\n readonly expression_text: string;\n\n constructor(filename: string, expression_text: string) {\n super(\n [\n make_error_message(\n \"UNSUPPORTED_MARKUP_EFFECT_POSITION\",\n `${filename}: yield* cannot be used in this markup position.`,\n ),\n `Move the Effect work into a supported expression tag, block expression, render expression, declaration tag, or event handler.`,\n \"\",\n `Problematic expression:`,\n expression_text,\n ].join(\"\\n\"),\n filename,\n );\n this.name = \"UnsupportedMarkupEffectPositionError\";\n this.expression_text = expression_text;\n }\n}\n","import ts from \"typescript\";\n\n/**\n * Strips an event handler arrow function down to its executable body.\n *\n * @since 2.0.0\n * @param expr - Event handler expression text from the original markup.\n * @returns Handler parameters, body text, and body offsets inside `expr`.\n */\nexport function strip_arrow_function(\n expr: string,\n): { params: string; body: string; body_start: number; body_end: number } {\n const arrow_idx = expr.indexOf(\"=>\");\n\n if (arrow_idx === -1) {\n return { params: \"()\", body: expr, body_start: 0, body_end: expr.length };\n }\n\n const params = expr.slice(0, arrow_idx).trim();\n const raw_body = expr.slice(arrow_idx + 2);\n const leading_ws = raw_body.length - raw_body.trimStart().length;\n let body_start = arrow_idx + 2 + leading_ws;\n let body_end = expr.length - (raw_body.length - raw_body.trimEnd().length);\n let body = expr.slice(body_start, body_end);\n\n if (body.startsWith(\"{\") && body.endsWith(\"}\")) {\n body_start += 1;\n body_end -= 1;\n body = body.slice(1, -1);\n }\n\n const body_leading_ws = body.length - body.trimStart().length;\n const body_trailing_ws = body.length - body.trimEnd().length;\n\n body_start += body_leading_ws;\n body_end -= body_trailing_ws;\n body = body.trim();\n\n if (body.endsWith(\";\")) {\n body = body.slice(0, -1);\n body_end -= 1;\n }\n\n return { params, body, body_start, body_end };\n}\n\n/**\n * Returns whether an expression is a callback function.\n *\n * @since 2.0.0\n * @param expr - Expression text from a markup attribute or expression tag.\n * @returns Whether the expression parses as an arrow or function expression.\n */\nexport function is_callback_function_expression(expr: string): boolean {\n const wrapped = `const __SER___callback = ${expr};`;\n const sf = ts.createSourceFile(\n \"callback.ts\",\n wrapped,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n const stmt = sf.statements[0];\n\n if (!ts.isVariableStatement(stmt)) {\n return false;\n }\n\n const initializer = stmt.declarationList.declarations[0]?.initializer;\n\n return initializer !== undefined &&\n (ts.isArrowFunction(initializer) ||\n ts.isFunctionExpression(initializer));\n}\n\n/**\n * Classifies `yield*` placement inside an event handler body.\n *\n * @example\n * ```ts\n * analyze_event_body_yield_star(\"yield* save()\");\n * ```\n *\n * @since 2.0.0\n * @param body - Event handler body text after the outer arrow has been\n * stripped.\n * @returns Whether the body has top-level yield* expressions and whether any\n * yield* appears inside a nested non-generator callback.\n */\nexport function analyze_event_body_yield_star(body: string): {\n has_top_level_yield_star: boolean;\n has_nested_invalid_yield_star: boolean;\n} {\n const wrapped = `function* __SER___event() { ${body}; }`;\n const sf = ts.createSourceFile(\n \"event.ts\",\n wrapped,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n const stmt = sf.statements[0];\n\n if (!ts.isFunctionDeclaration(stmt) || !stmt.body) {\n return {\n has_top_level_yield_star: false,\n has_nested_invalid_yield_star: /\\byield\\s*\\*/.test(body),\n };\n }\n\n const result = {\n has_top_level_yield_star: false,\n has_nested_invalid_yield_star: false,\n };\n\n visit_event_body(stmt.body, \"top_level\", result);\n\n return result;\n}\n\n/**\n * Collects free identifiers that must be captured as reactive dependencies.\n *\n * @since 2.0.0\n * @param expr_text - Markup expression text to inspect.\n * @returns Identifier names referenced by the expression.\n */\nexport function collect_free_identifiers(expr_text: string): string[] {\n const wrapped = `function* __SER___w() { return (${expr_text}); }`;\n let sf: ts.SourceFile;\n\n try {\n sf = ts.createSourceFile(\n \"expr.ts\",\n wrapped,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n } catch {\n return [];\n }\n\n const fn = sf.statements[0];\n\n if (!ts.isFunctionDeclaration(fn) || !fn.body) {\n return [];\n }\n\n const ids: string[] = [];\n const locals = new Set<string>();\n const seen = new Set<string>();\n\n visit_ids(fn.body, locals, seen, ids);\n\n return ids;\n}\n\nfunction visit_ids(\n node: ts.Node,\n locals: Set<string>,\n seen: Set<string>,\n ids: string[],\n): void {\n if (\n ts.isArrowFunction(node) ||\n ts.isFunctionExpression(node) ||\n ts.isFunctionDeclaration(node)\n ) {\n const scoped = new Set(locals);\n\n if (ts.isFunctionDeclaration(node) && node.name) {\n scoped.add(node.name.text);\n }\n\n for (const parameter of node.parameters) {\n add_binding_names(parameter.name, scoped);\n }\n\n if (node.body) {\n visit_ids(node.body, scoped, seen, ids);\n }\n\n return;\n }\n\n if (ts.isVariableDeclaration(node)) {\n if (node.initializer) {\n visit_ids(node.initializer, locals, seen, ids);\n }\n\n add_binding_names(node.name, locals);\n\n return;\n }\n\n if (ts.isTypeReferenceNode(node)) {\n return;\n }\n\n if (ts.isIdentifier(node)) {\n if (\n node.text === \"yield\" ||\n node.text === \"undefined\" ||\n node.text === \"null\" ||\n node.text === \"true\" ||\n node.text === \"false\" ||\n node.text === \"this\"\n ) {\n return;\n }\n\n if (is_property_access_name(node)) {\n return;\n }\n\n if (!locals.has(node.text) && !seen.has(node.text)) {\n seen.add(node.text);\n ids.push(node.text);\n }\n return;\n }\n\n node.forEachChild((child) => visit_ids(child, locals, seen, ids));\n}\n\nfunction add_binding_names(name: ts.BindingName, locals: Set<string>): void {\n if (ts.isIdentifier(name)) {\n locals.add(name.text);\n return;\n }\n\n for (const element of name.elements) {\n if (ts.isOmittedExpression(element)) {\n continue;\n }\n\n add_binding_names(element.name, locals);\n }\n}\n\ntype EventYieldContext = \"top_level\" | \"nested_generator\" | \"nested_invalid\";\n\ninterface EventYieldAnalysis {\n has_top_level_yield_star: boolean;\n has_nested_invalid_yield_star: boolean;\n}\n\nfunction visit_event_body(\n node: ts.Node,\n context: EventYieldContext,\n result: EventYieldAnalysis,\n): void {\n if (is_yield_star_expression(node)) {\n if (context === \"top_level\") {\n result.has_top_level_yield_star = true;\n } else if (context === \"nested_invalid\") {\n result.has_nested_invalid_yield_star = true;\n }\n\n node.forEachChild((child) => visit_event_body(child, context, result));\n return;\n }\n\n if (is_nested_function_boundary(node)) {\n const next_context = is_generator_function_boundary(node)\n ? \"nested_generator\"\n : \"nested_invalid\";\n\n node.forEachChild((child) => visit_event_body(child, next_context, result));\n return;\n }\n\n node.forEachChild((child) => visit_event_body(child, context, result));\n}\n\nfunction is_nested_function_boundary(node: ts.Node): boolean {\n return (\n ts.isArrowFunction(node) ||\n ts.isFunctionExpression(node) ||\n ts.isFunctionDeclaration(node) ||\n ts.isMethodDeclaration(node) ||\n ts.isGetAccessorDeclaration(node) ||\n ts.isSetAccessorDeclaration(node)\n );\n}\n\nfunction is_generator_function_boundary(node: ts.Node): boolean {\n return (\n (ts.isFunctionExpression(node) || ts.isFunctionDeclaration(node) ||\n ts.isMethodDeclaration(node)) &&\n node.asteriskToken !== undefined\n );\n}\n\nfunction is_yield_star_expression(node: ts.Node): boolean {\n if (ts.isYieldExpression(node)) {\n return node.asteriskToken !== undefined;\n }\n\n return (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.AsteriskToken &&\n ts.isIdentifier(node.left) &&\n node.left.text === \"yield\"\n );\n}\n\nfunction is_property_access_name(node: ts.Identifier): boolean {\n const parent = node.parent;\n\n return (\n (ts.isPropertyAccessExpression(parent) && parent.name === node) ||\n (ts.isPropertyAssignment(parent) && parent.name === node) ||\n (ts.isBindingElement(parent) && parent.propertyName === node) ||\n ts.isImportSpecifier(parent) ||\n ts.isExportSpecifier(parent)\n );\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport type { EffectCallbackRewriteContext } from \"./effect-bindings.ts\";\nimport type { HelperDeclaration } from \"./types.ts\";\n\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\nconst MATCH_EFFECT_MEMBERS = new Map([\n [\"match\", \"matchEffect\"],\n [\"matchCause\", \"matchCauseEffect\"],\n]);\n\nconst EFFECTFUL_CALLBACK_MEMBERS = new Set([\n \"andThen\",\n \"catchAll\",\n \"catchAllCause\",\n \"catchCause\",\n \"catchTag\",\n \"flatMap\",\n \"forEach\",\n \"tap\",\n \"tapError\",\n \"tapErrorCause\",\n]);\n\nconst EFFECTFUL_HANDLER_MEMBERS = new Set([\n \"matchCauseEffect\",\n \"matchEffect\",\n \"tapBoth\",\n]);\n\ninterface RewriteContext {\n source_file: ts.SourceFile;\n source_text: string;\n magic: MagicString;\n offset: number;\n bindings: EffectCallbackRewriteContext;\n changed: boolean;\n uses_wrapper: boolean;\n}\n\ninterface EffectMember {\n name: string;\n name_start: number;\n name_end: number;\n direct: boolean;\n}\n\ntype EffectWrapperMember = \"gen\" | \"sync\";\n\n/**\n * Rewrites effectful callback shorthand inside event handler expressions.\n *\n * @example\n * ```ts\n * normalize_effect_callback_yields(\n * `yield* action.pipe(Effect.flatMap((value) => yield* next(value)))`,\n * collect_effect_callback_bindings(source),\n * );\n * ```\n *\n * @since 2.0.0\n * @param expr_text - Markup expression text before it is wrapped in the\n * generated Effect runner.\n * @param bindings - Local Effect import bindings collected from the Svelte\n * component's script blocks.\n * @returns The expression with nested Effect callback `yield*` shorthand\n * lowered into explicit Effect callbacks, plus any import needed by generated\n * wrapper calls.\n */\nexport function normalize_effect_callback_yields(\n expr_text: string,\n bindings: EffectCallbackRewriteContext,\n): { expr_text: string; helpers: HelperDeclaration[] } {\n const prefix = \"const __SER___expression = \";\n const source_text = `${prefix}${expr_text};`;\n const source_file = ts.createSourceFile(\n \"event-expression.ts\",\n source_text,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n const statement = source_file.statements[0];\n const magic = new MagicString(expr_text);\n const context: RewriteContext = {\n source_file,\n source_text,\n magic,\n offset: prefix.length,\n bindings,\n changed: false,\n uses_wrapper: false,\n };\n\n if (!ts.isVariableStatement(statement)) {\n return { expr_text, helpers: [] };\n }\n\n const expression = statement.declarationList.declarations[0]?.initializer;\n\n if (!expression) {\n return { expr_text, helpers: [] };\n }\n\n visit_expression(expression, context);\n\n if (!context.changed) {\n return { expr_text, helpers: [] };\n }\n\n const helpers = context.uses_wrapper && bindings.wrapper_import\n ? [bindings.wrapper_import]\n : [];\n\n return {\n expr_text: magic.toString(),\n helpers,\n };\n}\n\nfunction visit_expression(node: ts.Node, context: RewriteContext): void {\n if (is_non_generator_callback_with_top_level_yield(node)) {\n return;\n }\n\n if (ts.isCallExpression(node)) {\n rewrite_match_call(node, context);\n rewrite_effectful_handler_call(node, context);\n rewrite_effectful_callback_arguments(node, context);\n }\n\n node.forEachChild((child) => {\n visit_expression(child, context);\n });\n}\n\nfunction rewrite_match_call(\n call: ts.CallExpression,\n context: RewriteContext,\n): void {\n const member = get_effect_member(call.expression, context);\n const upgraded_name = member && MATCH_EFFECT_MEMBERS.get(member.name);\n const options = get_last_object_argument(call);\n\n if (!member || !upgraded_name || !options) {\n return;\n }\n\n const handlers = get_handler_properties(options);\n const should_upgrade = handlers.some((handler) =>\n handler.callback &&\n is_non_generator_callback_with_top_level_yield(handler.callback)\n );\n\n if (!should_upgrade) {\n return;\n }\n\n rewrite_effect_member_name(member, upgraded_name, context);\n context.changed = true;\n\n for (const handler of handlers) {\n if (!handler.callback) {\n continue;\n }\n\n if (is_non_generator_callback_with_top_level_yield(handler.callback)) {\n rewrite_callback_to_effect_gen(handler.callback, context);\n } else {\n rewrite_callback_to_effect_sync(handler.callback, context);\n }\n }\n}\n\nfunction rewrite_effectful_handler_call(\n call: ts.CallExpression,\n context: RewriteContext,\n): void {\n const member = get_effect_member(call.expression, context);\n const options = get_last_object_argument(call);\n\n if (!member || !EFFECTFUL_HANDLER_MEMBERS.has(member.name) || !options) {\n return;\n }\n\n for (const handler of get_handler_properties(options)) {\n if (\n handler.callback &&\n is_non_generator_callback_with_top_level_yield(handler.callback)\n ) {\n rewrite_callback_to_effect_gen(handler.callback, context);\n }\n }\n}\n\nfunction rewrite_effectful_callback_arguments(\n call: ts.CallExpression,\n context: RewriteContext,\n): void {\n const member = get_effect_member(call.expression, context);\n\n if (!member || !EFFECTFUL_CALLBACK_MEMBERS.has(member.name)) {\n return;\n }\n\n for (const argument of call.arguments) {\n if (\n is_callback_expression(argument) &&\n is_non_generator_callback_with_top_level_yield(argument)\n ) {\n rewrite_callback_to_effect_gen(argument, context);\n }\n }\n}\n\nfunction rewrite_callback_to_effect_gen(\n callback: ts.ArrowFunction | ts.FunctionExpression,\n context: RewriteContext,\n): void {\n if (is_async_function(callback)) {\n return;\n }\n\n if (ts.isArrowFunction(callback)) {\n rewrite_arrow_callback(callback, \"gen\", context);\n return;\n }\n\n rewrite_function_body(callback, \"gen\", context);\n}\n\nfunction rewrite_callback_to_effect_sync(\n callback: ts.ArrowFunction | ts.FunctionExpression,\n context: RewriteContext,\n): void {\n if (is_async_function(callback)) {\n return;\n }\n\n if (ts.isArrowFunction(callback)) {\n rewrite_arrow_callback(callback, \"sync\", context);\n return;\n }\n\n rewrite_function_body(callback, \"sync\", context);\n}\n\nfunction rewrite_arrow_callback(\n callback: ts.ArrowFunction,\n wrapper: EffectWrapperMember,\n context: RewriteContext,\n): void {\n const start = to_expr_pos(callback.getStart(context.source_file), context);\n const end = to_expr_pos(callback.end, context);\n const params_text = context.source_text\n .slice(\n callback.getStart(context.source_file),\n callback.equalsGreaterThanToken.getStart(context.source_file),\n )\n .trim();\n const body_text = get_body_text(callback.body, context);\n const rewritten_body = make_effect_body(\n callback.body,\n body_text,\n wrapper,\n context,\n );\n const replacement = `${params_text} => ${rewritten_body}`;\n\n context.magic.overwrite(start, end, replacement);\n context.changed = true;\n}\n\nfunction rewrite_function_body(\n callback: ts.FunctionExpression,\n wrapper: EffectWrapperMember,\n context: RewriteContext,\n): void {\n const body_start = to_expr_pos(\n callback.body.getStart(context.source_file),\n context,\n );\n const body_end = to_expr_pos(callback.body.end, context);\n const body_text = get_body_text(callback.body, context);\n const rewritten_body = make_effect_body(\n callback.body,\n body_text,\n wrapper,\n context,\n );\n\n context.magic.overwrite(\n body_start,\n body_end,\n `{ return ${rewritten_body}; }`,\n );\n context.changed = true;\n}\n\nfunction make_effect_body(\n body: ts.ConciseBody,\n body_text: string,\n wrapper: EffectWrapperMember,\n context: RewriteContext,\n): string {\n const wrapper_access = make_effect_access(wrapper, context);\n\n if (wrapper === \"gen\") {\n if (ts.isBlock(body)) {\n return `${wrapper_access}(function* () ${body_text})`;\n }\n\n return `${wrapper_access}(function* () { return (${body_text}); })`;\n }\n\n if (ts.isBlock(body)) {\n return `${wrapper_access}(() => ${body_text})`;\n }\n\n return `${wrapper_access}(() => (${body_text}))`;\n}\n\nfunction get_body_text(body: ts.ConciseBody, context: RewriteContext): string {\n return context.source_text\n .slice(body.getStart(context.source_file), body.end)\n .trim();\n}\n\nfunction get_handler_properties(\n object_literal: ts.ObjectLiteralExpression,\n): Array<{\n callback: ts.ArrowFunction | ts.FunctionExpression | undefined;\n}> {\n return object_literal.properties.flatMap((property) => {\n if (!ts.isPropertyAssignment(property)) {\n return [];\n }\n\n const name = get_property_name(property.name);\n\n if (name !== \"onFailure\" && name !== \"onSuccess\") {\n return [];\n }\n\n const callback = is_callback_expression(property.initializer)\n ? property.initializer\n : undefined;\n\n return [{ callback }];\n });\n}\n\nfunction get_last_object_argument(\n call: ts.CallExpression,\n): ts.ObjectLiteralExpression | undefined {\n const last_argument = call.arguments[call.arguments.length - 1];\n\n if (!last_argument || !ts.isObjectLiteralExpression(last_argument)) {\n return undefined;\n }\n\n return last_argument;\n}\n\nfunction get_effect_member(\n expression: ts.Expression,\n context: RewriteContext,\n): EffectMember | undefined {\n if (ts.isIdentifier(expression)) {\n const direct_member = context.bindings.direct_members.get(expression.text);\n\n if (!direct_member) {\n return undefined;\n }\n\n return {\n name: direct_member,\n name_start: to_expr_pos(\n expression.getStart(context.source_file),\n context,\n ),\n name_end: to_expr_pos(expression.end, context),\n direct: true,\n };\n }\n\n if (!ts.isPropertyAccessExpression(expression)) {\n return undefined;\n }\n\n if (!is_effect_namespace_expression(expression.expression, context)) {\n return undefined;\n }\n\n return {\n name: expression.name.text,\n name_start: to_expr_pos(\n expression.name.getStart(context.source_file),\n context,\n ),\n name_end: to_expr_pos(expression.name.end, context),\n direct: false,\n };\n}\n\nfunction rewrite_effect_member_name(\n member: EffectMember,\n upgraded_name: string,\n context: RewriteContext,\n): void {\n if (member.direct) {\n context.magic.overwrite(\n member.name_start,\n member.name_end,\n make_effect_access(upgraded_name, context),\n );\n\n return;\n }\n\n context.magic.overwrite(member.name_start, member.name_end, upgraded_name);\n}\n\nfunction make_effect_access(\n member_name: string,\n context: RewriteContext,\n): string {\n context.uses_wrapper = true;\n\n return `${context.bindings.wrapper_expression}.${member_name}`;\n}\n\nfunction is_effect_namespace_expression(\n expression: ts.Expression,\n context: RewriteContext,\n): boolean {\n if (ts.isIdentifier(expression)) {\n return context.bindings.effect_object_names.has(expression.text) ||\n context.bindings.effect_module_names.has(expression.text);\n }\n\n if (!ts.isPropertyAccessExpression(expression)) {\n return false;\n }\n\n if (expression.name.text !== \"Effect\") {\n return false;\n }\n\n if (!ts.isIdentifier(expression.expression)) {\n return false;\n }\n\n return context.bindings.effect_package_names.has(expression.expression.text);\n}\n\nfunction get_property_name(name: ts.PropertyName): string | undefined {\n if (ts.isIdentifier(name) || ts.isStringLiteral(name)) {\n return name.text;\n }\n\n return undefined;\n}\n\nfunction is_callback_expression(\n node: ts.Node,\n): node is ts.ArrowFunction | ts.FunctionExpression {\n return ts.isArrowFunction(node) || ts.isFunctionExpression(node);\n}\n\nfunction is_non_generator_callback_with_top_level_yield(\n node: ts.Node,\n): node is ts.ArrowFunction | ts.FunctionExpression {\n if (!is_callback_expression(node)) {\n return false;\n }\n\n if (ts.isFunctionExpression(node) && node.asteriskToken) {\n return false;\n }\n\n return contains_top_level_yield_star(node.body);\n}\n\nfunction is_async_function(\n node: ts.ArrowFunction | ts.FunctionExpression,\n): boolean {\n return node.modifiers?.some(\n (modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword,\n ) ?? false;\n}\n\nfunction to_expr_pos(pos: number, context: RewriteContext): number {\n return pos - context.offset;\n}\n","import {\n AsyncEffectInEventCallbackError,\n YieldStarInEventCallbackError,\n} from \"$/error.ts\";\nimport type { EffectCallbackRewriteContext } from \"./effect-bindings.ts\";\nimport {\n analyze_event_body_yield_star,\n collect_free_identifiers,\n is_callback_function_expression,\n} from \"./expressions.ts\";\nimport { normalize_effect_callback_yields } from \"./effect-callbacks.ts\";\nimport type {\n HelperDeclaration,\n MarkupCandidate,\n MarkupHelperBindings,\n MarkupNameAllocator,\n PendingRelocation,\n Replacement,\n TagKind,\n} from \"./types.ts\";\n\n/**\n * Emits source edits for classified markup Effect expressions.\n *\n * @since 2.0.0\n * @param classified - Candidates paired with their Svelte markup context.\n * @param effect_context - Effect import bindings available to markup\n * expression rewrites.\n * @returns Replacements ready to apply to the original component source.\n */\nexport function emit_replacements(\n classified: Array<{ candidate: MarkupCandidate; kind: TagKind }>,\n effect_context: EffectCallbackRewriteContext,\n helper_bindings: MarkupHelperBindings,\n name_allocator: MarkupNameAllocator,\n): Replacement[] {\n return classified.map(({ candidate, kind }) =>\n emit_replacement(\n candidate,\n kind,\n effect_context,\n helper_bindings,\n name_allocator,\n )\n );\n}\n\nfunction emit_replacement(\n candidate: MarkupCandidate,\n kind: TagKind,\n effect_context: EffectCallbackRewriteContext,\n helper_bindings: MarkupHelperBindings,\n name_allocator: MarkupNameAllocator,\n): Replacement {\n const normalized = normalize_effect_callback_yields(\n candidate.expr_text,\n effect_context,\n );\n const normalized_candidate = {\n ...candidate,\n expr_text: normalized.expr_text,\n };\n const id = make_cache_id(candidate);\n const id_text = JSON.stringify(id);\n const helper_name = make_helper_name(candidate, name_allocator);\n\n let replacement_text: string;\n let helpers: HelperDeclaration[];\n let relocation: PendingRelocation | undefined;\n\n if (kind === \"await\") {\n const effect = make_effect_helper(normalized_candidate, helper_name);\n\n replacement_text = emit_promise_expression(\n id_text,\n effect,\n helper_bindings,\n );\n helpers = [...normalized.helpers, effect.helper];\n } else if (kind === \"render\") {\n const effect = make_effect_helper(normalized_candidate, helper_name);\n\n replacement_text = emit_render_expression(\n id_text,\n effect,\n candidate,\n helper_bindings,\n );\n helpers = [...normalized.helpers, effect.helper];\n } else if (kind === \"render_argument\") {\n const effect = make_effect_helper(normalized_candidate, helper_name);\n\n replacement_text = emit_each_expression(id_text, effect, helper_bindings);\n helpers = [...normalized.helpers, effect.helper];\n } else if (kind === \"each\") {\n const effect = make_effect_helper(normalized_candidate, helper_name);\n\n replacement_text = emit_each_expression(id_text, effect, helper_bindings);\n helpers = [...normalized.helpers, effect.helper];\n } else if (kind === \"event\") {\n const event = make_event_handler(normalized_candidate, helper_bindings);\n\n replacement_text = event.text;\n helpers = normalized.helpers;\n relocation = make_relocation(candidate, replacement_text, {\n originalStart: 0,\n originalEnd: candidate.expr_text.length,\n generatedText: event.expr_text,\n });\n } else {\n const effect = make_effect_helper(normalized_candidate, helper_name);\n\n replacement_text = emit_each_expression(id_text, effect, helper_bindings);\n helpers = [...normalized.helpers, effect.helper];\n }\n\n return {\n start: candidate.start,\n end: candidate.end,\n text: replacement_text,\n helpers,\n relocation,\n };\n}\n\nfunction make_event_handler(\n candidate: MarkupCandidate,\n helper_bindings: MarkupHelperBindings,\n): { text: string; expr_text: string } {\n const expr_text = candidate.expr_text;\n\n if (is_callback_function_expression(expr_text)) {\n throw new YieldStarInEventCallbackError(\n candidate.filename,\n expr_text,\n );\n }\n\n const analysis = analyze_event_body_yield_star(expr_text);\n\n if (analysis.has_nested_invalid_yield_star) {\n throw new AsyncEffectInEventCallbackError(\n candidate.filename,\n expr_text,\n );\n }\n\n return {\n expr_text,\n text:\n `(event) => { ${helper_bindings.run}(function* () { ${expr_text}; }); }`,\n };\n}\n\nfunction emit_promise_expression(\n id_text: string,\n effect: EffectHelper,\n helper_bindings: MarkupHelperBindings,\n): string {\n return `${helper_bindings.promise}(${id_text}, ${effect.deps_text}, () => ${effect.call})`;\n}\n\nfunction emit_render_expression(\n id_text: string,\n effect: EffectHelper,\n candidate: MarkupCandidate,\n helper_bindings: MarkupHelperBindings,\n): string {\n const expression = emit_promise_expression(id_text, effect, helper_bindings);\n\n if (/^\\s*yield\\s*\\*/.test(candidate.expr_text)) {\n return `(await ${expression})()`;\n }\n\n return `await ${expression}`;\n}\n\nfunction emit_each_expression(\n id_text: string,\n effect: EffectHelper,\n helper_bindings: MarkupHelperBindings,\n): string {\n return `await ${emit_promise_expression(id_text, effect, helper_bindings)}`;\n}\n\ninterface EffectHelper {\n helper: HelperDeclaration;\n call: string;\n deps_text: string;\n}\n\nfunction make_effect_helper(\n candidate: MarkupCandidate,\n helper_name: string,\n): EffectHelper {\n const deps = collect_free_identifiers(candidate.expr_text);\n const args_text = deps.join(\", \");\n const deps_text = deps.length === 0 ? \"[]\" : `[${args_text}]`;\n const call = `${helper_name}()`;\n const text =\n `function* ${helper_name}() { return (${candidate.expr_text}); }`;\n const generated_start = text.indexOf(candidate.expr_text);\n\n return {\n call,\n deps_text,\n helper: {\n text,\n relocation: {\n originalStart: candidate.start,\n originalEnd: candidate.end,\n generatedStartInReplacement: generated_start,\n generatedEndInReplacement: generated_start +\n candidate.expr_text.length,\n },\n },\n };\n}\n\nfunction make_cache_id(candidate: MarkupCandidate): string {\n const normalized_filename = candidate.filename.replace(/[?#].*$/, \"\");\n\n return `${normalized_filename}:${candidate.start}:${candidate.end}`;\n}\n\nfunction make_helper_name(\n candidate: MarkupCandidate,\n name_allocator: MarkupNameAllocator,\n): string {\n return name_allocator.reserve(\n `__SER___markup_effect_${candidate.start}_${candidate.end}`,\n );\n}\n\nfunction make_relocation(\n candidate: MarkupCandidate,\n replacement_text: string,\n inner: {\n originalStart: number;\n originalEnd: number;\n generatedText: string;\n },\n): PendingRelocation | undefined {\n const generated_start = replacement_text.indexOf(inner.generatedText);\n\n if (generated_start === -1) {\n return undefined;\n }\n\n return {\n originalStart: candidate.start + inner.originalStart,\n originalEnd: candidate.start + inner.originalEnd,\n generatedStartInReplacement: generated_start,\n generatedEndInReplacement: generated_start + inner.generatedText.length,\n };\n}\n","import ts from \"typescript\";\n\n/**\n * Checks whether a node is a `yield*` binary expression.\n *\n * @since 2.0.0\n * @param node - TypeScript AST node to check.\n * @returns Whether the node represents `yield * operand`.\n */\nexport function is_yield_star_expression(node: ts.Node): boolean {\n return (\n ts.isBinaryExpression(node) &&\n node.operatorToken.kind === ts.SyntaxKind.AsteriskToken &&\n ts.isIdentifier(node.left) &&\n node.left.text === \"yield\"\n );\n}\n\n/**\n * Checks whether a node owns its own yield semantics.\n *\n * @since 2.0.0\n * @param node - TypeScript AST node to check.\n * @returns Whether traversal should stop at this function boundary.\n */\nexport function is_function_boundary_node(node: ts.Node): boolean {\n return (\n ts.isArrowFunction(node) ||\n ts.isFunctionDeclaration(node) ||\n ts.isFunctionExpression(node) ||\n ts.isMethodDeclaration(node) ||\n ts.isGetAccessorDeclaration(node) ||\n ts.isSetAccessorDeclaration(node)\n );\n}\n\n/**\n * Returns `true` if the node tree contains a top-level `await`.\n *\n * @since 2.0.0\n * @param node - Root node to search.\n * @returns Whether a top-level await expression was found.\n */\nexport function contains_top_level_await(node: ts.Node): boolean {\n if (ts.isAwaitExpression(node)) {\n return true;\n }\n\n return node.getChildren().some(\n (child) =>\n !is_function_boundary_node(child) && contains_top_level_await(child),\n );\n}\n\n/**\n * Collects top-level `yield*` nodes under an expression.\n *\n * @since 2.0.0\n * @param node - Root node to search.\n * @param on_found - Callback invoked for each matching yield node.\n * @returns Nothing.\n */\nexport function collect_yield_star_nodes(\n node: ts.Node,\n on_found: (node: ts.Node) => void,\n): void {\n if (is_function_boundary_node(node)) {\n return;\n }\n\n if (is_yield_star_expression(node)) {\n on_found(node);\n return;\n }\n\n node.forEachChild((child) => {\n collect_yield_star_nodes(child, on_found);\n });\n}\n\n/**\n * Finds the first top-level `yield*` expression below a node.\n *\n * @since 2.0.0\n * @param node - Root node to search.\n * @param on_found - Callback invoked with the first matching node.\n * @returns Nothing.\n */\nexport function find_yield_star_node(\n node: ts.Node,\n on_found: (node: ts.Node) => void,\n): void {\n if (is_function_boundary_node(node)) {\n return;\n }\n\n if (is_yield_star_expression(node)) {\n on_found(node);\n return;\n }\n\n node.forEachChild((child) => {\n find_yield_star_node(child, on_found);\n });\n}\n\n/**\n * Extracts identifier names from a TypeScript binding name.\n *\n * @since 2.0.0\n * @param name - Binding name node to flatten.\n * @returns Identifier names from identifiers and destructuring patterns.\n */\nexport function extract_binding_names(name: ts.BindingName): string[] {\n if (ts.isIdentifier(name)) {\n return [name.text];\n }\n\n const result: string[] = [];\n\n for (const element of name.elements) {\n if (ts.isOmittedExpression(element)) {\n continue;\n }\n\n result.push(...extract_binding_names(element.name));\n }\n\n return result;\n}\n","import { collect_yield_star_nodes } from \"$/preprocess/ast.ts\";\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\nimport {\n analyze_event_body_yield_star,\n strip_arrow_function,\n} from \"./expressions.ts\";\nimport { HELPERS } from \"./constants.ts\";\nimport type { MarkupCandidate, TagKind } from \"./types.ts\";\n\ninterface SanitizeResult {\n code: string;\n candidates: MarkupCandidate[];\n}\n\ninterface DeclarationYieldExpression {\n start: number;\n end: number;\n expr_text: string;\n}\n\nexport function sanitize_markup(\n content: string,\n filename: string,\n): SanitizeResult {\n const candidates: MarkupCandidate[] = [];\n const magic = new MagicString(content);\n let helper_index = 0;\n let cursor = 0;\n\n while (cursor < content.length) {\n const open = content.indexOf(\"{\", cursor);\n if (open === -1) break;\n\n /** Skip braces inside <script> and <style> blocks. */\n if (\n is_inside_excluded_block(content, open) ||\n is_inside_html_comment(content, open)\n ) {\n cursor = open + 1;\n continue;\n }\n\n /** Find the matching closing brace. */\n const close = find_closing_brace(content, open + 1);\n if (close === -1) {\n cursor = open + 1;\n continue;\n }\n\n const inner = content.slice(open + 1, close);\n\n const trimmed = inner.trimStart();\n const leading_ws = inner.length - trimmed.length;\n\n const tag_info = get_tag_info(trimmed);\n\n const declaration_yields = collect_declaration_yield_expressions(\n content,\n open,\n leading_ws,\n trimmed,\n );\n\n if (declaration_yields.length > 0) {\n for (const declaration_yield of declaration_yields) {\n const placeholder = `__SER___markup_placeholder_${helper_index}`;\n helper_index += 1;\n\n candidates.push({\n placeholder,\n start: declaration_yield.start,\n end: declaration_yield.end,\n expr_text: declaration_yield.expr_text,\n filename,\n key: \"plain\",\n });\n\n magic.overwrite(\n declaration_yield.start,\n declaration_yield.end,\n placeholder,\n );\n }\n\n cursor = close + 1;\n continue;\n }\n\n let expr_body = trimmed.slice(tag_info.prefix_length);\n\n /** For @const, only use the RHS after `=` as the expression body. */\n const equal_idx = tag_info.kind === \"plain\" && trimmed.startsWith(\"@const \")\n ? expr_body.indexOf(\"=\")\n : -1;\n\n /** Check if this is a callback handler containing yield*. */\n const is_event_callback = is_event_callback_expression(inner);\n\n /** Determine if this brace contains yield* that needs lowering. */\n const event_yield = is_event_callback\n ? analyze_event_yield(inner)\n : undefined;\n const has_yield = event_yield?.has_top_level_yield_star ??\n contains_yield_star_in_text(expr_body);\n\n if (!has_yield) {\n cursor = close + 1;\n continue;\n }\n\n /** The expression starts after the tag prefix. For @const, after the `=`. */\n let extra_prefix = 0;\n\n if (equal_idx !== -1) {\n const after_eq_raw = expr_body.slice(equal_idx + 1);\n expr_body = after_eq_raw.trimStart();\n extra_prefix = equal_idx + 1 + (after_eq_raw.length - expr_body.length);\n }\n\n const expr_start = open + 1 + leading_ws + tag_info.prefix_length +\n extra_prefix;\n\n /** For each/await, the expression ends before ` as ` or ` then `/` catch `. */\n let expr_end = close;\n\n const key = tag_info.kind;\n\n if (key === \"each\") {\n const as_idx = expr_body.lastIndexOf(\" as \");\n if (as_idx !== -1) expr_end = expr_start + as_idx;\n }\n\n if (key === \"await\") {\n const then_idx = expr_body.indexOf(\" then \");\n const catch_idx = expr_body.indexOf(\" catch \");\n const boundary = Math.min(\n then_idx === -1 ? Infinity : then_idx,\n catch_idx === -1 ? Infinity : catch_idx,\n );\n if (boundary !== Infinity) expr_end = expr_start + boundary;\n }\n\n const expr_text = content.slice(expr_start, expr_end).trim();\n\n if (expr_text.length === 0) {\n cursor = close + 1;\n continue;\n }\n\n if (key === \"render\" && !/^\\s*yield\\s*\\*/.test(expr_text)) {\n const render_arg_yields = collect_expression_yield_expressions(\n content,\n expr_start,\n expr_text,\n );\n\n if (render_arg_yields.length > 0) {\n for (const render_arg_yield of render_arg_yields) {\n const placeholder = `__SER___markup_placeholder_${helper_index}`;\n helper_index += 1;\n\n candidates.push({\n placeholder,\n start: render_arg_yield.start,\n end: render_arg_yield.end,\n expr_text: render_arg_yield.expr_text,\n filename,\n key: \"render_argument\",\n });\n\n magic.overwrite(\n render_arg_yield.start,\n render_arg_yield.end,\n placeholder,\n );\n }\n\n cursor = close + 1;\n continue;\n }\n }\n\n /** Create a placeholder and replace the expression (preserving tag prefixes). */\n const placeholder = `__SER___markup_placeholder_${helper_index}`;\n helper_index += 1;\n\n candidates.push({\n placeholder,\n start: expr_start,\n end: expr_end,\n expr_text,\n filename,\n key,\n });\n\n magic.overwrite(\n expr_start,\n expr_end,\n key === \"render\" ? `${placeholder}()` : placeholder,\n );\n\n cursor = close + 1;\n }\n\n return { code: magic.toString(), candidates };\n}\n\nfunction collect_expression_yield_expressions(\n content: string,\n expr_start: number,\n expr_text: string,\n): DeclarationYieldExpression[] {\n const source_file = ts.createSourceFile(\n \"markup-expression.ts\",\n `const __SER___expr = ${expr_text};`,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n const stmt = source_file.statements[0];\n\n if (!stmt || !ts.isVariableStatement(stmt)) {\n return [];\n }\n\n const initializer = stmt.declarationList.declarations[0]?.initializer;\n\n if (!initializer || !contains_top_level_yield_star(initializer)) {\n return [];\n }\n\n const prefix_length = source_file.text.indexOf(expr_text);\n const expressions: DeclarationYieldExpression[] = [];\n\n collect_yield_star_nodes(initializer, (yield_node) => {\n const start = expr_start + yield_node.getStart(source_file) -\n prefix_length;\n const end = expr_start + yield_node.end - prefix_length;\n const yielded_text = content.slice(start, end).trim();\n\n expressions.push({\n start,\n end,\n expr_text: yielded_text,\n });\n });\n\n return expressions;\n}\n\nfunction is_inside_excluded_block(content: string, pos: number): boolean {\n const script = find_tag_end(content, \"script\", pos);\n const style = find_tag_end(content, \"style\", pos);\n\n return (\n (script !== undefined && pos < script.end && pos > script.start) ||\n (style !== undefined && pos < style.end && pos > style.start)\n );\n}\n\nfunction is_inside_html_comment(content: string, pos: number): boolean {\n const open = content.lastIndexOf(\"<!--\", pos);\n const close = content.lastIndexOf(\"-->\", pos);\n\n return open !== -1 && open > close;\n}\n\nfunction find_tag_end(\n content: string,\n tag: string,\n after_pos: number,\n): { start: number; end: number } | undefined {\n const pattern = new RegExp(\n `<${tag}\\\\b[^>]*>([\\\\s\\\\S]*?)<\\\\/${tag}\\\\s*>`,\n \"gi\",\n );\n\n for (const match of content.matchAll(pattern)) {\n if (match.index === undefined) continue;\n const end_pos = match.index + match[0].length;\n if (match.index <= after_pos && after_pos < end_pos) {\n return { start: match.index, end: end_pos };\n }\n }\n\n return undefined;\n}\n\n/** Brace matching helpers for extracting complete markup expressions. */\n\nfunction find_closing_brace(content: string, start: number): number {\n let depth = 0;\n\n for (let i = start; i < content.length; i += 1) {\n const ch = content[i];\n\n if (ch === \"{\" && content[i - 1] !== \"$\") {\n depth += 1;\n } else if (ch === \"}\") {\n if (depth === 0) return i;\n depth -= 1;\n } else if (ch === \"'\" || ch === '\"' || ch === \"`\") {\n i = skip_string(content, i, ch);\n if (i === -1) return -1;\n } else if (ch === \"/\" && content[i + 1] === \"/\") {\n i = skip_line_comment(content, i);\n } else if (ch === \"/\" && content[i + 1] === \"*\") {\n i = skip_block_comment(content, i);\n if (i === -1) return -1;\n }\n }\n\n return -1;\n}\n\nfunction skip_string(content: string, start: number, quote: string): number {\n for (let i = start + 1; i < content.length; i += 1) {\n if (content[i] === \"\\\\\") {\n i += 1;\n continue;\n }\n if (content[i] === quote) return i;\n }\n return -1;\n}\n\nfunction skip_line_comment(content: string, start: number): number {\n for (let i = start + 2; i < content.length; i += 1) {\n if (content[i] === \"\\n\") return i;\n }\n return content.length;\n}\n\nfunction skip_block_comment(content: string, start: number): number {\n for (let i = start + 2; i < content.length; i += 1) {\n if (content[i] === \"*\" && content[i + 1] === \"/\") return i + 1;\n }\n return -1;\n}\n\ninterface TagInfo {\n kind: TagKind;\n prefix_length: number;\n}\n\nfunction get_tag_info(trimmed: string): TagInfo {\n if (trimmed.startsWith(\"#each \")) {\n return { kind: \"each\", prefix_length: \"#each \".length };\n }\n if (trimmed.startsWith(\"#await \")) {\n return { kind: \"await\", prefix_length: \"#await \".length };\n }\n if (trimmed.startsWith(\"@render \")) {\n return { kind: \"render\", prefix_length: \"@render \".length };\n }\n\n /** Strip prefix-only tags — the expression starts after the tag keyword. */\n if (trimmed.startsWith(\"#if \")) {\n return { kind: \"plain\", prefix_length: \"#if \".length };\n }\n if (trimmed.startsWith(\":else if \")) {\n return { kind: \"plain\", prefix_length: \":else if \".length };\n }\n if (trimmed.startsWith(\"#key \")) {\n return { kind: \"plain\", prefix_length: \"#key \".length };\n }\n if (trimmed.startsWith(\"@const \")) {\n return { kind: \"plain\", prefix_length: \"@const \".length };\n }\n if (trimmed.startsWith(\"@html \")) {\n return { kind: \"plain\", prefix_length: \"@html \".length };\n }\n if (trimmed.startsWith(\"@debug \")) {\n return { kind: \"plain\", prefix_length: \"@debug \".length };\n }\n\n return { kind: \"plain\", prefix_length: 0 };\n}\n\nfunction collect_declaration_yield_expressions(\n content: string,\n open: number,\n leading_ws: number,\n trimmed: string,\n): DeclarationYieldExpression[] {\n if (!is_declaration_tag_text(trimmed)) {\n return [];\n }\n\n const source_file = ts.createSourceFile(\n \"declaration-tag.ts\",\n `${trimmed};`,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n const stmt = source_file.statements[0];\n\n if (!stmt || !ts.isVariableStatement(stmt)) {\n return [];\n }\n\n const tag_start = open + 1 + leading_ws;\n\n return stmt.declarationList.declarations.flatMap((decl) => {\n const initializer = decl.initializer;\n\n if (!initializer || !contains_top_level_yield_star(initializer)) {\n return [];\n }\n\n const expressions: DeclarationYieldExpression[] = [];\n\n collect_yield_star_nodes(initializer, (yield_node) => {\n const start = tag_start + yield_node.getStart(source_file);\n const end = tag_start + yield_node.end;\n const expr_text = content.slice(start, end).trim();\n\n expressions.push({\n start,\n end,\n expr_text,\n });\n });\n\n return expressions;\n });\n}\n\nfunction is_declaration_tag_text(trimmed: string): boolean {\n return /^(?:const|let)\\s/.test(trimmed);\n}\n\nfunction is_event_callback_expression(inner: string): boolean {\n const trimmed = inner.trimStart();\n\n return /^(?:async\\s+)?(?:\\([^)]*\\)|[A-Za-z_$][\\w$]*)\\s*=>/.test(trimmed) ||\n /^(?:async\\s+)?function\\b/.test(trimmed);\n}\n\nfunction analyze_event_yield(\n inner: string,\n): {\n has_top_level_yield_star: boolean;\n} {\n const event = strip_arrow_function(inner);\n const analysis = analyze_event_body_yield_star(event.body);\n const generated_run = new RegExp(`${HELPERS.run}(?:_\\\\d+)?\\\\(function\\\\*`);\n\n if (generated_run.test(event.body)) {\n return {\n has_top_level_yield_star: false,\n };\n }\n\n return {\n has_top_level_yield_star: analysis.has_top_level_yield_star ||\n analysis.has_nested_invalid_yield_star ||\n /\\byield\\s*\\*/.test(event.body),\n };\n}\n\nfunction contains_yield_star_in_text(text: string): boolean {\n if (!/\\byield\\s*\\*/.test(text)) return false;\n\n try {\n const sf = ts.createSourceFile(\n \"expr.ts\",\n `const x = ${text};`,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n const stmt = sf.statements[0];\n if (!ts.isVariableStatement(stmt)) return false;\n const decl = stmt.declarationList.declarations[0];\n if (!decl?.initializer) return false;\n return contains_top_level_yield_star(decl.initializer);\n } catch {\n return true;\n }\n}\n\n/** Free identifier collection helpers for generated closures. */\n","import { type AST, parse } from \"svelte/compiler\";\n\nimport MagicString from \"magic-string\";\n\nimport {\n blank_script_blocks,\n create_relocations,\n create_source_map,\n inject_helpers,\n make_markup_helper_bindings,\n} from \"./apply.ts\";\nimport { classify_candidates } from \"./classify.ts\";\nimport { collect_effect_callback_bindings } from \"./effect-bindings.ts\";\nimport { emit_replacements } from \"./emit.ts\";\nimport { sanitize_markup } from \"./scan.ts\";\nimport { UnsupportedMarkupEffectPositionError } from \"$/error.ts\";\nimport type { MarkupTransformResult } from \"./types.ts\";\n\nexport type { MarkupRelocation, MarkupTransformResult } from \"./types.ts\";\n\n/**\n * Transforms Svelte markup containing `{yield* expr}` brace expressions\n * into calls to the markup runtime helpers (`value`, `promise`, `run`).\n *\n * Strategy: first find all brace expressions containing `yield*` via\n * character scanning, replace them with placeholder identifiers, then\n * parse the sanitized markup with Svelte's AST to determine the correct\n * context for each placeholder (plain expression, #each, #await, event\n * handler, etc.).\n *\n * @since 2.0.0\n * @param content - The raw `.svelte` file content.\n * @param filename - The source filename, used in error messages.\n * @returns The transformed markup and a flag indicating whether yield* was\n * found.\n */\nexport function transform_markup_effect(\n content: string,\n filename: string,\n): MarkupTransformResult {\n if (!/\\byield\\s*\\*/.test(content)) {\n return { code: content, has_yield: false };\n }\n\n /** Find all brace expressions containing yield* and replace with placeholders. */\n const work = sanitize_markup(content, filename);\n const effect_context = collect_effect_callback_bindings(content);\n const helper_context = make_markup_helper_bindings(content);\n\n if (work.candidates.length === 0) {\n return { code: content, has_yield: false };\n }\n\n /** Parse the sanitized markup with Svelte's AST. Strip <script> blocks\n * first so TypeScript syntax (import type, etc.) doesn't break the parser. */\n const clean = blank_script_blocks(work.code);\n const ast = parse(clean, { filename, modern: true }) as AST.Root;\n\n /** Match placeholders to their AST context and build replacements. */\n const classified = classify_candidates(\n ast,\n work.candidates,\n );\n const matched = new Set(\n classified.map(({ candidate }) => candidate.placeholder),\n );\n const unmatched = work.candidates.find((candidate) =>\n !matched.has(candidate.placeholder)\n );\n\n if (unmatched) {\n throw new UnsupportedMarkupEffectPositionError(\n filename,\n unmatched.expr_text,\n );\n }\n\n const replacements = emit_replacements(\n classified,\n effect_context,\n helper_context.bindings,\n helper_context.name_allocator,\n );\n const helpers = replacements.flatMap((replacement) =>\n replacement.helpers ?? []\n );\n\n const magic = new MagicString(content);\n\n replacements.sort((a, b) => b.start - a.start);\n\n for (const r of replacements) {\n magic.overwrite(r.start, r.end, r.text);\n }\n\n const helper_insertion = inject_helpers(\n magic,\n content,\n helpers,\n helper_context.bindings,\n );\n const relocations = create_relocations(replacements, helper_insertion);\n\n return {\n code: magic.toString(),\n has_yield: true,\n map: create_source_map(magic, filename),\n relocations,\n };\n}\n"],"mappings":"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"}
|