svelte-effect-runtime 4.0.0 → 4.1.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/client-DbwVAMWm.js +530 -0
- package/.dist/chunks/client-DbwVAMWm.js.map +1 -0
- package/.dist/chunks/compiler-Dpyu4Owd.js +412 -0
- package/.dist/chunks/compiler-Dpyu4Owd.js.map +1 -0
- package/.dist/chunks/descriptors-q909VWyR.js +216 -0
- package/.dist/chunks/descriptors-q909VWyR.js.map +1 -0
- package/.dist/chunks/diagnostics-DLwwrBWb.js +359 -0
- package/.dist/chunks/diagnostics-DLwwrBWb.js.map +1 -0
- package/.dist/chunks/dispatcher-CTWINW5I.js +534 -0
- package/.dist/chunks/dispatcher-CTWINW5I.js.map +1 -0
- package/.dist/chunks/dispatcher-pZPzarul.js +23 -0
- package/.dist/chunks/dispatcher-pZPzarul.js.map +1 -0
- package/.dist/chunks/{errors-IJjsUwrE.js → errors-qhcbUH6o.js} +56 -44
- package/.dist/chunks/errors-qhcbUH6o.js.map +1 -0
- package/.dist/chunks/live-BW7xZKjb.js +146 -0
- package/.dist/chunks/live-BW7xZKjb.js.map +1 -0
- package/.dist/chunks/live-CHK0RrZu.js +10 -0
- package/.dist/chunks/live-CHK0RrZu.js.map +1 -0
- package/.dist/chunks/{remote-client-CVI4t66c.js → remote-client-mkQAfP1G.js} +29 -23
- package/.dist/chunks/remote-client-mkQAfP1G.js.map +1 -0
- package/.dist/chunks/{runtime-GBQz32DZ.js → runtime-CPosEhGl.js} +3 -27
- package/.dist/chunks/runtime-CPosEhGl.js.map +1 -0
- package/.dist/chunks/{server-D1LcDnZE.js → server-yQrNoiCR.js} +15 -84
- package/.dist/chunks/server-yQrNoiCR.js.map +1 -0
- package/.dist/chunks/source-scan-cSawCvsg.js +1059 -0
- package/.dist/chunks/source-scan-cSawCvsg.js.map +1 -0
- package/.dist/chunks/{transform-jNUr65K9.js → transform-D7TTlPpK.js} +245 -371
- package/.dist/chunks/transform-D7TTlPpK.js.map +1 -0
- package/.dist/compiler/markup-identifiers.d.ts +2 -0
- package/.dist/compiler/remote-client.d.ts +1 -19
- package/.dist/compiler/source-scan.d.ts +11 -108
- package/.dist/compiler/sveltekit-remote-bridge.d.ts +3 -0
- package/.dist/compiler.d.ts +6 -0
- package/.dist/compiler.js +1 -1
- package/.dist/detect.d.ts +0 -31
- package/.dist/detect.js +0 -39
- package/.dist/detect.js.map +1 -1
- package/.dist/diagnostics.d.ts +0 -16
- package/.dist/dispatcher/deps.d.ts +3 -14
- package/.dist/dispatcher/fibers.d.ts +5 -46
- package/.dist/dispatcher/index.d.ts +42 -135
- package/.dist/dispatcher/scope.d.ts +36 -0
- package/.dist/dispatcher/types.d.ts +0 -151
- package/.dist/dispatcher.d.ts +2 -1
- package/.dist/dispatcher.js +2 -2
- package/.dist/errors.d.ts +44 -42
- package/.dist/generated/dispatcher.d.ts +6 -51
- package/.dist/generators.d.ts +2 -12
- package/.dist/internal/descriptors.d.ts +0 -16
- package/.dist/internal/generators.js +14 -9
- package/.dist/internal/generators.js.map +1 -1
- package/.dist/internal/live.d.ts +9 -0
- package/.dist/internal/remote-client.js +2 -2
- package/.dist/internal/remote-server.js +2 -2
- package/.dist/internal/schema.d.ts +0 -54
- package/.dist/live.d.ts +9 -26
- package/.dist/markup/event-attributes.d.ts +0 -32
- package/.dist/markup/promise.d.ts +1 -23
- package/.dist/markup/promise.js +2 -18
- package/.dist/markup/promise.js.map +1 -1
- package/.dist/markup/run.d.ts +1 -10
- package/.dist/markup/run.js +2 -11
- package/.dist/markup/run.js.map +1 -1
- package/.dist/markup/transform/apply.d.ts +5 -4
- package/.dist/markup/transform/classify.d.ts +2 -11
- package/.dist/markup/transform/constants.d.ts +2 -1
- package/.dist/markup/transform/effect-bindings.d.ts +2 -26
- package/.dist/markup/transform/effect-callbacks.d.ts +0 -20
- package/.dist/markup/transform/emit.d.ts +2 -11
- package/.dist/markup/transform/expressions.d.ts +0 -35
- package/.dist/markup/transform/scan.d.ts +3 -22
- package/.dist/markup/transform/types.d.ts +15 -127
- package/.dist/markup/transform.js +1 -1
- package/.dist/markup/value.d.ts +1 -18
- package/.dist/markup/value.js +2 -19
- package/.dist/markup/value.js.map +1 -1
- package/.dist/mod.d.ts +3 -8
- package/.dist/mod.js +5 -5
- package/.dist/mod.js.map +1 -1
- package/.dist/remote/cause-codec.d.ts +3 -37
- package/.dist/remote/client/command.d.ts +3 -17
- package/.dist/remote/client/form-data.d.ts +0 -7
- package/.dist/remote/client/form-enhance.d.ts +0 -7
- package/.dist/remote/client/form-transport.d.ts +14 -20
- package/.dist/remote/client/form.d.ts +4 -24
- package/.dist/remote/client/index.d.ts +2 -1
- package/.dist/remote/client/prerender.d.ts +6 -0
- package/.dist/remote/client/query-result.d.ts +2 -14
- package/.dist/remote/client/query.d.ts +8 -48
- package/.dist/remote/client/responses.d.ts +3 -27
- package/.dist/remote/client/types.d.ts +16 -110
- package/.dist/remote/client/utils.d.ts +0 -8
- package/.dist/remote/client.d.ts +2 -2
- package/.dist/remote/client.js +2 -2
- package/.dist/remote/effect.d.ts +6 -0
- package/.dist/remote/failures.d.ts +4 -0
- package/.dist/remote/query-update.d.ts +2 -0
- package/.dist/remote/resource.d.ts +25 -0
- package/.dist/remote/server.d.ts +5 -50
- package/.dist/remote/server.js +2 -2
- package/.dist/remote/shared.d.ts +6 -145
- package/.dist/remote/shared.js +6 -127
- package/.dist/remote/shared.js.map +1 -1
- package/.dist/runtime/transform.js +26 -31
- package/.dist/runtime/transform.js.map +1 -1
- package/.dist/script-transform/ast.d.ts +0 -46
- package/.dist/script-transform/imports.d.ts +3 -39
- package/.dist/script-transform/index.d.ts +2 -0
- package/.dist/script-transform/lower.d.ts +0 -9
- package/.dist/script-transform/runes.d.ts +0 -10
- package/.dist/script-transform/runtime-block.d.ts +0 -17
- package/.dist/script-transform/source.d.ts +0 -24
- package/.dist/script-transform/types.d.ts +9 -126
- package/.dist/server/effects.d.ts +4 -53
- package/.dist/server/factories.d.ts +7 -7
- package/.dist/server/index.d.ts +1 -1
- package/.dist/server/invalid.d.ts +0 -7
- package/.dist/server/live-snapshot.d.ts +5 -0
- package/.dist/server/remote-handler-context.d.ts +5 -0
- package/.dist/server/runtime.d.ts +6 -24
- package/.dist/server/schema.d.ts +0 -14
- package/.dist/server/transport.d.ts +2 -0
- package/.dist/server/types.d.ts +49 -26
- package/.dist/server/wrappers.d.ts +3 -40
- package/.dist/server.d.ts +1 -1
- package/.dist/server.js +200 -215
- package/.dist/server.js.map +1 -1
- package/.dist/yieldable.d.ts +1 -35
- package/package.json +2 -2
- package/.dist/chunks/client-DcZUV4rR.js +0 -653
- package/.dist/chunks/client-DcZUV4rR.js.map +0 -1
- package/.dist/chunks/compiler-BBPNyXmQ.js +0 -460
- package/.dist/chunks/compiler-BBPNyXmQ.js.map +0 -1
- package/.dist/chunks/dispatcher-DOx8iC6r.js +0 -505
- package/.dist/chunks/dispatcher-DOx8iC6r.js.map +0 -1
- package/.dist/chunks/dispatcher-H-Ia0Os4.js +0 -47
- package/.dist/chunks/dispatcher-H-Ia0Os4.js.map +0 -1
- package/.dist/chunks/errors-IJjsUwrE.js.map +0 -1
- package/.dist/chunks/live-BXAKre_4.js +0 -104
- package/.dist/chunks/live-BXAKre_4.js.map +0 -1
- package/.dist/chunks/remote-client-CVI4t66c.js.map +0 -1
- package/.dist/chunks/runtime-GBQz32DZ.js.map +0 -1
- package/.dist/chunks/schema-D9pct6Y5.js +0 -89
- package/.dist/chunks/schema-D9pct6Y5.js.map +0 -1
- package/.dist/chunks/server-D1LcDnZE.js.map +0 -1
- package/.dist/chunks/source-scan-C4PsggID.js +0 -341
- package/.dist/chunks/source-scan-C4PsggID.js.map +0 -1
- package/.dist/chunks/transform-jNUr65K9.js.map +0 -1
- package/.dist/remote/client/effect.d.ts +0 -29
- package/.dist/remote/client/failures.d.ts +0 -42
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/script-transform/runtime-block.ts","../../../modules/svelte-effect-runtime/src/script-transform/lower.ts","../../../modules/svelte-effect-runtime/src/script-transform/index.ts","../../../modules/svelte-effect-runtime/src/runtime/transform.ts"],"sourcesContent":["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\tconst bindings: RuntimeImportBindings = {\n\t\tcancel: \"__SER___cancel\",\n\t\tdispatcher: \"get_dispatcher\",\n\t\tdispatcher_value: \"__SER___dispatcher\",\n\t\teffect: \"Effect\",\n\t\tprogram: \"__SER___program\",\n\t\tuntrack: \"untrack\",\n\t\tyield_success: \"YieldSuccess\",\n\t\tyieldable: \"ToEffect\",\n\t};\n\n\treturn 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\tblocks: EffectBlock[],\n\tbindings: RuntimeImportBindings,\n): string {\n\treturn blocks.map((block) => make_runtime_effect_block(block, bindings)).join(\"\\n\");\n}\n\nfunction make_runtime_effect_block(block: EffectBlock, bindings: RuntimeImportBindings): string {\n\tconst dep_reads = block.deps.map((dep) => ` ${dep};`);\n\n\tconst body = block.statements.map((statement) => ` ${statement}`).join(\"\\n\");\n\n\treturn [\n\t\t\"\",\n\t\t\"$effect(() => {\",\n\t\t...dep_reads,\n\t\t` const ${bindings.dispatcher_value} = ${bindings.dispatcher}();`,\n\t\t` const ${bindings.program} = ${bindings.effect}.gen(function* () {`,\n\t\tbody,\n\t\t\" });\",\n\t\t` const ${bindings.cancel} = ${bindings.untrack}(() => ${bindings.dispatcher_value}.fork(${bindings.program}));`,\n\t\t` import.meta.hot?.dispose(${bindings.cancel});`,\n\t\t` return ${bindings.cancel};`,\n\t\t\"});\",\n\t\t\"\",\n\t].join(\"\\n\");\n}\n","import { collect_free_identifiers } from \"$/markup/transform/expressions.ts\";\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\nimport { collect_yield_star_nodes, find_yield_star_node, is_yield_star_expression } from \"./ast.ts\";\nimport { slice, slice_start } from \"./source.ts\";\nimport type {\n\tEffectBlock,\n\tLoweredExpression,\n\tLoweredStatement,\n\tScriptLoweringContext,\n\tTempBinding,\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\tstmt: ts.Statement,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): LoweredStatement {\n\tif (ts.isExpressionStatement(stmt)) {\n\t\treturn lower_expression_statement(stmt, content, context);\n\t}\n\n\tif (ts.isVariableStatement(stmt)) {\n\t\treturn lower_variable_statement(stmt, content, context);\n\t}\n\n\tconst text = slice(content, stmt);\n\tconst wrapped_text = wrap_yield_stars_in_node(stmt, content, context);\n\n\treturn {\n\t\ttemps: [],\n\t\trewritten_text: \"\",\n\t\teffect_blocks: [make_effect_block([wrapped_text], collect_deps(text))],\n\t\trange: { start: stmt.getFullStart(), end: stmt.end },\n\t};\n}\n\nfunction lower_variable_statement(\n\tstmt: ts.VariableStatement,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): LoweredStatement {\n\tconst helper_declarations: string[] = [];\n\tconst rewritten_decls: string[] = [];\n\n\tconst decl_list = stmt.declarationList;\n\tconst kind = (decl_list.flags & ts.NodeFlags.Let) !== 0 ? \"let\" : \"const\";\n\tlet uses_dispatcher_promise = false;\n\n\tfor (const decl of decl_list.declarations) {\n\t\tif (!contains_top_level_yield_star(decl)) {\n\t\t\trewritten_decls.push(slice(content, decl).trim());\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst lowered = lower_node_yields_to_await(\n\t\t\tdecl,\n\t\t\tcontent,\n\t\t\tmake_binding_hint(decl.name),\n\t\t\tcontext,\n\t\t);\n\n\t\thelper_declarations.push(...lowered.helper_declarations);\n\t\trewritten_decls.push(lowered.rewritten_text);\n\t\tuses_dispatcher_promise ||= lowered.uses_dispatcher_promise;\n\t}\n\n\tconst rewritten_text = `${kind} ${rewritten_decls.join(\", \")};`;\n\n\treturn {\n\t\ttemps: [],\n\t\ttype_helpers: helper_declarations,\n\t\trewritten_text,\n\t\teffect_blocks: [],\n\t\tuses_dispatcher_promise,\n\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t};\n}\n\nfunction lower_expression_statement(\n\tstmt: ts.ExpressionStatement,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): LoweredStatement {\n\tconst expr = stmt.expression;\n\n\tif (!contains_top_level_yield_star(expr)) {\n\t\treturn {\n\t\t\ttemps: [],\n\t\t\trewritten_text: slice(content, stmt).trim(),\n\t\t\teffect_blocks: [],\n\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tif (is_yield_star_expression(expr)) {\n\t\tconst text = slice(content, expr).trim();\n\t\tconst yield_text = wrap_yield_text(text, context);\n\n\t\treturn {\n\t\t\ttemps: [],\n\t\t\trewritten_text: \"\",\n\t\t\teffect_blocks: [make_effect_block([yield_text + \";\"], collect_deps(text))],\n\t\t\trange: { start: stmt.getFullStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tif (ts.isBinaryExpression(expr) && is_assignment_operator(expr)) {\n\t\tconst target = slice(content, expr.left).trim();\n\t\tconst target_names = collect_assignment_target_names(expr.left);\n\n\t\tif (\n\t\t\texpr.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n\t\t\tis_yield_star_expression(expr.right)\n\t\t) {\n\t\t\tconst yield_text = extract_yield_star_full_text(expr.right, content);\n\t\t\tconst wrapped_yield_text = wrap_yield_text(yield_text, context);\n\n\t\t\treturn {\n\t\t\t\ttemps: [],\n\t\t\t\trewritten_text: \"\",\n\t\t\t\teffect_blocks: [\n\t\t\t\t\tmake_effect_block(\n\t\t\t\t\t\t[`${target} = ${wrapped_yield_text};`],\n\t\t\t\t\t\tcollect_deps(yield_text, target_names),\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t\t};\n\t\t}\n\n\t\tconst lowered = lower_expression_yields(\n\t\t\texpr.right,\n\t\t\tcontent,\n\t\t\tmake_temp_hint(target),\n\t\t\tcontext,\n\t\t);\n\t\tconst temp_names = lowered.temps.map((temp) => temp.name);\n\t\tconst statement = `${target} ${slice(\n\t\t\tcontent,\n\t\t\texpr.operatorToken,\n\t\t).trim()} ${lowered.rewritten_expr};`;\n\n\t\treturn {\n\t\t\ttemps: lowered.temps,\n\t\t\ttype_helpers: lowered.type_helpers,\n\t\t\trewritten_text: \"\",\n\t\t\teffect_blocks: [\n\t\t\t\tmake_effect_block(\n\t\t\t\t\t[...lowered.effect_blocks.flatMap((block) => block.statements), statement],\n\t\t\t\t\t[\n\t\t\t\t\t\t...lowered.effect_blocks.flatMap((block) => block.deps),\n\t\t\t\t\t\t...collect_deps(lowered.rewritten_expr, [...target_names, ...temp_names]),\n\t\t\t\t\t],\n\t\t\t\t),\n\t\t\t],\n\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tconst lowered = lower_expression_yields(expr, content, \"call\", context);\n\n\tif (is_top_level_rune_call(expr)) {\n\t\treturn {\n\t\t\ttemps: lowered.temps,\n\t\t\ttype_helpers: lowered.type_helpers,\n\t\t\trewritten_text: lowered.rewritten_expr + \";\",\n\t\t\teffect_blocks: lowered.effect_blocks,\n\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tconst temp_names = lowered.temps.map((temp) => temp.name);\n\n\treturn {\n\t\ttemps: lowered.temps,\n\t\ttype_helpers: lowered.type_helpers,\n\t\trewritten_text: \"\",\n\t\teffect_blocks: [\n\t\t\tmake_effect_block(\n\t\t\t\t[\n\t\t\t\t\t...lowered.effect_blocks.flatMap((block) => block.statements),\n\t\t\t\t\tlowered.rewritten_expr + \";\",\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t...lowered.effect_blocks.flatMap((block) => block.deps),\n\t\t\t\t\t...collect_deps(lowered.rewritten_expr, temp_names),\n\t\t\t\t],\n\t\t\t),\n\t\t],\n\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t};\n}\n\nfunction lower_expression_yields(\n\texpr: ts.Expression,\n\tcontent: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): LoweredExpression {\n\tconst replacements: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\ttext: string;\n\t}> = [];\n\n\tconst temps: TempBinding[] = [];\n\tconst type_helpers: string[] = [];\n\tconst statements: string[] = [];\n\tconst deps: string[] = [];\n\n\tcollect_yield_star_nodes(expr, (node) => {\n\t\tconst temp_name = context.next_temp_name(hint);\n\t\tconst yield_text = slice_start(content, node).trim();\n\t\tconst type_helper = make_yield_type_helper(yield_text, hint, context);\n\n\t\tif (type_helper) {\n\t\t\ttype_helpers.push(type_helper.declaration);\n\t\t\ttemps.push({ name: temp_name, type: type_helper.type });\n\t\t} else {\n\t\t\ttemps.push({ name: temp_name });\n\t\t}\n\n\t\tstatements.push(`${temp_name} = ${wrap_yield_text(yield_text, context)};`);\n\t\tdeps.push(...collect_deps(yield_text));\n\t\treplacements.push({\n\t\t\tstart: node.getStart(),\n\t\t\tend: node.end,\n\t\t\ttext: temp_name,\n\t\t});\n\t});\n\n\tif (replacements.length === 0) {\n\t\treturn {\n\t\t\ttemps,\n\t\t\ttype_helpers,\n\t\t\trewritten_expr: slice(content, expr).trim(),\n\t\t\teffect_blocks: [],\n\t\t};\n\t}\n\n\treplacements.sort((a, b) => b.start - a.start);\n\n\tlet text = slice(content, expr);\n\n\tconst offset_in_expr = expr.getFullStart();\n\n\tfor (const replacement of replacements) {\n\t\ttext =\n\t\t\ttext.slice(0, replacement.start - offset_in_expr) +\n\t\t\treplacement.text +\n\t\t\ttext.slice(replacement.end - offset_in_expr);\n\t}\n\n\treturn {\n\t\ttemps,\n\t\ttype_helpers,\n\t\trewritten_expr: text.trim(),\n\t\teffect_blocks: [make_effect_block(statements, deps)],\n\t};\n}\n\nfunction lower_node_yields_to_await(\n\tnode: ts.Node,\n\tcontent: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): {\n\thelper_declarations: string[];\n\trewritten_text: string;\n\tuses_dispatcher_promise: boolean;\n} {\n\tconst helper_declarations: string[] = [];\n\tconst replacements: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\ttext: string;\n\t}> = [];\n\n\tcollect_yield_star_nodes(node, (yield_node) => {\n\t\tconst awaited = make_awaited_yield_expression(yield_node, content, hint, context);\n\n\t\thelper_declarations.push(awaited.declaration);\n\t\treplacements.push({\n\t\t\tstart: yield_node.getStart(),\n\t\t\tend: yield_node.end,\n\t\t\ttext: awaited.expression,\n\t\t});\n\t});\n\n\treplacements.sort((a, b) => b.start - a.start);\n\n\tlet text = slice_start(content, node);\n\tconst offset_in_node = node.getStart();\n\n\tfor (const replacement of replacements) {\n\t\ttext =\n\t\t\ttext.slice(0, replacement.start - offset_in_node) +\n\t\t\treplacement.text +\n\t\t\ttext.slice(replacement.end - offset_in_node);\n\t}\n\n\treturn {\n\t\thelper_declarations,\n\t\trewritten_text: text.trim(),\n\t\tuses_dispatcher_promise: replacements.length > 0,\n\t};\n}\n\nfunction make_awaited_yield_expression(\n\tnode: ts.Node,\n\tcontent: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): { declaration: string; expression: string } {\n\tconst yield_text = slice_start(content, node).trim();\n\tconst helper_name = context.next_helper_name(`effect_${hint}`);\n\tconst helper_id = make_script_effect_id(node, context);\n\tconst deps = collect_deps(yield_text);\n\tconst deps_text = `[${deps.join(\", \")}]`;\n\tconst wrapped_yield_text = wrap_yield_text(yield_text, context);\n\n\treturn {\n\t\tdeclaration: `function* ${helper_name}() { return (${wrapped_yield_text}); }`,\n\t\texpression: [\n\t\t\t`await ${context.dispatcher_name}().promise({`,\n\t\t\t`id: ${JSON.stringify(helper_id)}, `,\n\t\t\t`deps: ${deps_text}, `,\n\t\t\t`factory: () => ${helper_name}()`,\n\t\t\t`})`,\n\t\t].join(\"\"),\n\t};\n}\n\nfunction make_yield_type_helper(\n\tyield_text: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): { declaration: string; type: string } | undefined {\n\tif (!context.emit_types) {\n\t\treturn undefined;\n\t}\n\n\tconst helper_name = context.next_type_helper_name(hint);\n\tconst effect_text = strip_yield_star(yield_text);\n\n\treturn {\n\t\tdeclaration: `function ${helper_name}() { return (${effect_text}); }`,\n\t\ttype: `${context.yield_success_name}<ReturnType<typeof ${helper_name}>> | undefined`,\n\t};\n}\n\nfunction strip_yield_star(yield_text: string): string {\n\treturn yield_text.replace(/^yield\\s*\\*\\s*/, \"\");\n}\n\nfunction wrap_yield_text(yield_text: string, context: ScriptLoweringContext): string {\n\treturn `yield* ${context.yieldable_name}(${strip_yield_star(yield_text)})`;\n}\n\nfunction wrap_yield_stars_in_node(\n\tnode: ts.Node,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): string {\n\tconst replacements: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\ttext: string;\n\t}> = [];\n\n\tcollect_yield_star_nodes(node, (yield_node) => {\n\t\tconst yield_text = slice_start(content, yield_node).trim();\n\n\t\treplacements.push({\n\t\t\tstart: yield_node.getStart(),\n\t\t\tend: yield_node.end,\n\t\t\ttext: wrap_yield_text(yield_text, context),\n\t\t});\n\t});\n\n\treplacements.sort((a, b) => b.start - a.start);\n\n\tconst offset = node.getFullStart();\n\tlet text = slice(content, node);\n\n\tfor (const replacement of replacements) {\n\t\ttext =\n\t\t\ttext.slice(0, replacement.start - offset) +\n\t\t\treplacement.text +\n\t\t\ttext.slice(replacement.end - offset);\n\t}\n\n\treturn text.trim();\n}\n\nfunction make_script_effect_id(expr: ts.Node, context: ScriptLoweringContext): string {\n\treturn `${context.filename}:${expr.getStart()}:${expr.end}`;\n}\n\nfunction is_assignment_operator(expr: ts.BinaryExpression): boolean {\n\treturn (\n\t\texpr.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&\n\t\texpr.operatorToken.kind <= ts.SyntaxKind.LastAssignment\n\t);\n}\n\nfunction is_top_level_rune_call(expr: ts.Expression): boolean {\n\tif (!ts.isCallExpression(expr)) {\n\t\treturn false;\n\t}\n\n\tconst callee = expr.expression;\n\n\tif (ts.isIdentifier(callee)) {\n\t\treturn callee.text.startsWith(\"$\");\n\t}\n\n\treturn (\n\t\tts.isPropertyAccessExpression(callee) &&\n\t\tts.isIdentifier(callee.expression) &&\n\t\tcallee.expression.text.startsWith(\"$\")\n\t);\n}\n\nfunction make_temp_hint(target: string): string {\n\tconst match = target.match(/[A-Za-z_$][\\w$]*$/);\n\n\treturn match?.[0] ?? \"assignment\";\n}\n\nfunction make_binding_hint(name: ts.BindingName): string {\n\tif (ts.isIdentifier(name)) {\n\t\treturn name.text;\n\t}\n\n\treturn \"destructure\";\n}\n\nfunction extract_yield_star_full_text(expr: ts.Expression, content: string): string {\n\tlet found: string | undefined;\n\n\tfind_yield_star_node(expr, (node) => {\n\t\tfound = slice_start(content, node).trim();\n\t});\n\n\treturn found ?? \"undefined\";\n}\n\nfunction make_effect_block(statements: string[], deps: string[]): EffectBlock {\n\treturn {\n\t\tstatements,\n\t\tdeps: [...new Set(deps)],\n\t};\n}\n\nfunction collect_deps(expr_text: string, excluded_names: readonly string[] = []): string[] {\n\tconst excluded = new Set(excluded_names);\n\n\treturn collect_free_identifiers(expr_text).filter(\n\t\t(identifier) => !identifier.startsWith(\"__SER___\") && !excluded.has(identifier),\n\t);\n}\n\nfunction collect_assignment_target_names(node: ts.Node): string[] {\n\tif (ts.isIdentifier(node)) {\n\t\treturn [node.text];\n\t}\n\n\tif (ts.isParenthesizedExpression(node)) {\n\t\treturn collect_assignment_target_names(node.expression);\n\t}\n\n\tif (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {\n\t\treturn collect_assignment_target_names(node.expression);\n\t}\n\n\tif (ts.isObjectLiteralExpression(node)) {\n\t\treturn node.properties.flatMap((property) => {\n\t\t\tif (ts.isShorthandPropertyAssignment(property)) {\n\t\t\t\treturn [property.name.text];\n\t\t\t}\n\n\t\t\tif (ts.isPropertyAssignment(property)) {\n\t\t\t\treturn collect_assignment_target_names(property.initializer);\n\t\t\t}\n\n\t\t\tif (ts.isSpreadAssignment(property)) {\n\t\t\t\treturn collect_assignment_target_names(property.expression);\n\t\t\t}\n\n\t\t\treturn [];\n\t\t});\n\t}\n\n\tif (ts.isArrayLiteralExpression(node)) {\n\t\treturn node.elements.flatMap((element) =>\n\t\t\tts.isSpreadElement(element)\n\t\t\t\t? collect_assignment_target_names(element.expression)\n\t\t\t\t: collect_assignment_target_names(element),\n\t\t);\n\t}\n\n\treturn [];\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport {\n\tcollect_top_level_binding_names,\n\thas_local_import_binding,\n\tmake_imports,\n} from \"./imports.ts\";\nimport { create_source_map, slice } from \"./source.ts\";\nimport { AwaitInEffectWorkError, PreprocessError } from \"$/errors.ts\";\nimport { make_runtime_block_with_bindings } from \"./runtime-block.ts\";\nimport { collect_yield_star_nodes, contains_top_level_await } from \"./ast.ts\";\nimport { lower_statement } from \"./lower.ts\";\nimport { validate_rune_yield_usage } from \"./runes.ts\";\nimport type {\n\tBlockRef,\n\tEffectBlock,\n\tRelocation,\n\tRuntimeImportBindings,\n\tScriptLoweringContext,\n\tScriptTransformResult,\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\temit_types?: boolean;\n}\n\n/**\n * Transforms a `<script effect>` body by lowering top-level `yield*`\n * expressions into Svelte-compatible async rendering declarations or into\n * dependency-tracked `$effect` blocks for effectful statements.\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\tcontent: string,\n\tfilename: string,\n\toptions: ScriptTransformOptions = {},\n): ScriptTransformResult {\n\tlet temp_counter = 0;\n\n\tconst source_file = ts.createSourceFile(\n\t\tfilename,\n\t\tcontent,\n\t\tts.ScriptTarget.Latest,\n\t\ttrue,\n\t\tts.ScriptKind.TS,\n\t);\n\n\tconst magic = new MagicString(content);\n\tconst effect_blocks: EffectBlock[] = [];\n\tconst block_refs: BlockRef[] = [];\n\tconst top_level_binding_names = collect_top_level_binding_names(source_file);\n\tconst top_level_binding_names_set = new Set(top_level_binding_names);\n\tconst name_allocator = make_name_allocator(top_level_binding_names);\n\tconst emit_types = options.emit_types ?? true;\n\n\tlet has_effect = false;\n\tlet uses_dispatcher_promise = false;\n\tlet uses_yield_success_types = false;\n\n\t/** Phase 1: detect imports already provided by the user. */\n\tconst has_effect_import = has_local_import_binding(source_file, \"effect\", \"Effect\");\n\n\tconst has_dispatcher_import = has_local_import_binding(\n\t\tsource_file,\n\t\t\"svelte-effect-runtime/internal/generators\",\n\t\t\"get_dispatcher\",\n\t);\n\n\tconst has_untrack_import = has_local_import_binding(source_file, \"svelte\", \"untrack\");\n\n\tconst reserve_runtime_import = (name: string) =>\n\t\ttop_level_binding_names_set.has(name)\n\t\t\t? name_allocator.reserve(make_generated_name(name, \"\"))\n\t\t\t: name_allocator.reserve(name);\n\n\tconst runtime_bindings: RuntimeImportBindings = {\n\t\tcancel: name_allocator.reserve(\"__SER___cancel\"),\n\t\tdispatcher: has_dispatcher_import\n\t\t\t? \"get_dispatcher\"\n\t\t\t: reserve_runtime_import(\"get_dispatcher\"),\n\t\tdispatcher_value: name_allocator.reserve(\"__SER___dispatcher\"),\n\t\teffect: has_effect_import ? \"Effect\" : reserve_runtime_import(\"Effect\"),\n\t\tprogram: name_allocator.reserve(\"__SER___program\"),\n\t\tuntrack: has_untrack_import ? \"untrack\" : reserve_runtime_import(\"untrack\"),\n\t\tyield_success: reserve_runtime_import(\"YieldSuccess\"),\n\t\tyieldable: reserve_runtime_import(\"ToEffect\"),\n\t};\n\n\tconst context: ScriptLoweringContext = {\n\t\tfilename,\n\t\tdispatcher_name: runtime_bindings.dispatcher,\n\t\teffect_name: runtime_bindings.effect,\n\t\temit_types,\n\t\tyield_success_name: runtime_bindings.yield_success,\n\t\tyieldable_name: runtime_bindings.yieldable,\n\t\tnext_helper_name(hint?: string) {\n\t\t\treturn name_allocator.reserve(make_generated_name(hint ?? \"helper\", \"\"));\n\t\t},\n\t\tnext_temp_name(hint?: string) {\n\t\t\tconst suffix = temp_counter === 0 ? \"\" : `_${temp_counter}`;\n\t\t\tconst name = make_generated_name(hint ?? String(temp_counter), suffix);\n\n\t\t\ttemp_counter += 1;\n\n\t\t\treturn name_allocator.reserve(name);\n\t\t},\n\t\tnext_type_helper_name(hint?: string) {\n\t\t\treturn name_allocator.reserve(make_generated_name(`type_${hint ?? \"effect\"}`, \"\"));\n\t\t},\n\t};\n\n\t/** Phase 2: lower every top-level statement that contains `yield*`. */\n\tfor (const stmt of source_file.statements) {\n\t\tvalidate_rune_yield_usage(stmt, content, filename);\n\t\tvalidate_script_yield_boundaries(stmt, content, filename);\n\n\t\tconst has_top_level_yield_star = contains_top_level_yield_star(stmt);\n\n\t\tif (!has_top_level_yield_star) {\n\t\t\tcontinue;\n\t\t}\n\n\t\thas_effect = true;\n\t\tconst lowered = lower_statement(stmt, content, context);\n\n\t\tif (lowered.effect_blocks.length > 0 && contains_top_level_await(stmt)) {\n\t\t\tconst text = slice(content, stmt);\n\t\t\tthrow new AwaitInEffectWorkError(filename, text);\n\t\t}\n\n\t\tmagic.overwrite(lowered.range.start, lowered.range.end, lowered.rewritten_text);\n\n\t\tif (lowered.temps.length > 0 || lowered.type_helpers?.length) {\n\t\t\tconst temp_declarations = lowered.temps.map((temp) =>\n\t\t\t\ttemp.type\n\t\t\t\t\t? `let ${temp.name} = $state<${temp.type}>(undefined);`\n\t\t\t\t\t: `let ${temp.name} = $state(undefined);`,\n\t\t\t);\n\n\t\t\tconst prefix = [...(lowered.type_helpers ?? []), ...temp_declarations].join(\"\\n\");\n\n\t\t\tmagic.appendLeft(lowered.range.start, prefix + \"\\n\");\n\t\t}\n\n\t\teffect_blocks.push(...lowered.effect_blocks);\n\t\tuses_dispatcher_promise ||= lowered.uses_dispatcher_promise ?? false;\n\t\tuses_yield_success_types ||= lowered.temps.some(\n\t\t\t(temp) => temp.type?.includes(runtime_bindings.yield_success) ?? false,\n\t\t);\n\t}\n\n\tif (!has_effect) {\n\t\tblock_refs.push({ id: filename, kind: \"script\" });\n\n\t\treturn { code: content, blocks: block_refs };\n\t}\n\n\t/** Phase 3: inject runtime imports after the last user import. */\n\tconst imports = make_imports(\n\t\thas_effect_import,\n\t\thas_dispatcher_import,\n\t\thas_untrack_import,\n\t\truntime_bindings,\n\t\t{\n\t\t\tneeds_dispatcher: effect_blocks.length > 0 || uses_dispatcher_promise,\n\t\t\tneeds_effect: effect_blocks.length > 0,\n\t\t\tneeds_untrack: effect_blocks.length > 0,\n\t\t\tneeds_yield_success: uses_yield_success_types,\n\t\t\tneeds_yieldable: effect_blocks.length > 0 || uses_dispatcher_promise,\n\t\t},\n\t);\n\n\tconst last_import = [...source_file.statements].reverse().find(ts.isImportDeclaration);\n\n\tif (imports) {\n\t\tif (last_import) {\n\t\t\tmagic.appendRight(last_import.end, \"\\n\" + imports);\n\t\t} else {\n\t\t\tmagic.prepend(imports + \"\\n\");\n\t\t}\n\t}\n\n\t/** Phase 4: append the runtime program and lifecycle wiring. */\n\tif (effect_blocks.length > 0) {\n\t\tconst runtime_block = make_runtime_block_with_bindings(effect_blocks, runtime_bindings);\n\n\t\tmagic.append(\"\\n\" + runtime_block);\n\t}\n\n\tblock_refs.push({ id: filename, kind: \"script\" });\n\n\tconst code = magic.toString();\n\n\treturn {\n\t\tcode,\n\t\tblocks: block_refs,\n\t\tmap: create_source_map(magic, filename),\n\t\trelocations: create_script_relocations(\n\t\t\tcontent,\n\t\t\tcode,\n\t\t\tsource_file,\n\t\t\truntime_bindings.yieldable,\n\t\t),\n\t};\n}\n\nfunction create_script_relocations(\n\tcontent: string,\n\tcode: string,\n\tsource_file: ts.SourceFile,\n\tyieldable_name: string,\n): Relocation[] {\n\tconst candidates = source_file.statements.flatMap((stmt) => {\n\t\tconst relocations: RelocationCandidate[] = [];\n\n\t\tif (contains_top_level_yield_star(stmt) && ts.isVariableStatement(stmt)) {\n\t\t\tfor (const decl of stmt.declarationList.declarations) {\n\t\t\t\tcollect_binding_relocation_candidates(decl.name, relocations);\n\t\t\t}\n\t\t}\n\n\t\tcollect_yield_star_nodes(stmt, (node) => {\n\t\t\tconst expression = ts.isBinaryExpression(node) ? node.right : node;\n\t\t\tconst text = content.slice(expression.getStart(), expression.end).trim();\n\n\t\t\trelocations.push({\n\t\t\t\toriginalStart: expression.getStart(),\n\t\t\t\toriginalEnd: expression.end,\n\t\t\t\ttext,\n\t\t\t\tmatch: \"yield_operand\",\n\t\t\t\twrapper: `${yieldable_name}(${text})`,\n\t\t\t});\n\t\t});\n\n\t\treturn relocations;\n\t});\n\n\tconst used_ranges: Array<{ start: number; end: number }> = [];\n\tconst search_cursors = new Map<string, number>();\n\n\treturn candidates.flatMap((candidate) => {\n\t\tconst search_key = make_relocation_search_key(candidate);\n\t\tconst generated_start = find_available_generated_text(\n\t\t\tcode,\n\t\t\tcandidate,\n\t\t\tused_ranges,\n\t\t\tsearch_cursors.get(search_key) ?? 0,\n\t\t);\n\n\t\tif (generated_start < 0) {\n\t\t\tsearch_cursors.set(search_key, code.length);\n\n\t\t\treturn [];\n\t\t}\n\n\t\tconst generated_end = generated_start + candidate.text.length;\n\t\tused_ranges.push({ start: generated_start, end: generated_end });\n\t\tsearch_cursors.set(search_key, generated_end);\n\n\t\treturn [\n\t\t\t{\n\t\t\t\toriginalStart: candidate.originalStart,\n\t\t\t\toriginalEnd: candidate.originalEnd,\n\t\t\t\tgeneratedStart: generated_start,\n\t\t\t\tgeneratedEnd: generated_end,\n\t\t\t},\n\t\t];\n\t});\n}\n\ntype RelocationCandidate = {\n\toriginalStart: number;\n\toriginalEnd: number;\n\ttext: string;\n\tmatch: \"exact\" | \"identifier\" | \"yield_operand\";\n\twrapper?: string;\n};\n\nfunction make_relocation_search_key(candidate: RelocationCandidate): string {\n\treturn `${candidate.match}:${candidate.text}`;\n}\n\nfunction collect_binding_relocation_candidates(\n\tname: ts.BindingName,\n\tcandidates: RelocationCandidate[],\n): void {\n\tif (ts.isIdentifier(name)) {\n\t\tcandidates.push({\n\t\t\toriginalStart: name.getStart(),\n\t\t\toriginalEnd: name.end,\n\t\t\ttext: name.text,\n\t\t\tmatch: \"identifier\",\n\t\t});\n\n\t\treturn;\n\t}\n\n\tfor (const element of name.elements) {\n\t\tif (ts.isOmittedExpression(element)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tcollect_binding_relocation_candidates(element.name, candidates);\n\t}\n}\n\nfunction find_available_generated_text(\n\tcode: string,\n\tcandidate: RelocationCandidate,\n\tused_ranges: Array<{ start: number; end: number }>,\n\tsearch_start: number,\n): number {\n\twhile (search_start < code.length) {\n\t\tconst search_text =\n\t\t\tcandidate.match === \"yield_operand\" ? candidate.wrapper : candidate.text;\n\n\t\tif (!search_text) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst index = code.indexOf(search_text, search_start);\n\n\t\tif (index < 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst operand_offset =\n\t\t\tcandidate.match === \"yield_operand\" && candidate.wrapper\n\t\t\t\t? candidate.wrapper.indexOf(candidate.text)\n\t\t\t\t: 0;\n\t\tconst start = index + Math.max(operand_offset, 0);\n\t\tconst end = start + candidate.text.length;\n\t\tconst overlaps_used_range = used_ranges.some(\n\t\t\t(range) => start < range.end && end > range.start,\n\t\t);\n\t\tconst is_text_match =\n\t\t\tcandidate.match !== \"identifier\" || is_identifier_text_match(code, start, end);\n\n\t\tif (!overlaps_used_range && is_text_match) {\n\t\t\treturn start;\n\t\t}\n\n\t\tsearch_start = candidate.match === \"identifier\" ? index + 1 : index + search_text.length;\n\t}\n\n\treturn -1;\n}\n\nfunction is_identifier_text_match(code: string, start: number, end: number): boolean {\n\tconst before = start === 0 ? 0 : code.charCodeAt(start - 1);\n\tconst after = end >= code.length ? 0 : code.charCodeAt(end);\n\n\treturn !is_identifier_part(before) && !is_identifier_part(after);\n}\n\nfunction is_identifier_part(char_code: number): boolean {\n\treturn (\n\t\t(char_code >= 65 && char_code <= 90) ||\n\t\t(char_code >= 97 && char_code <= 122) ||\n\t\t(char_code >= 48 && char_code <= 57) ||\n\t\tchar_code === 36 ||\n\t\tchar_code === 95\n\t);\n}\n\nfunction validate_script_yield_boundaries(\n\tstmt: ts.Statement,\n\tcontent: string,\n\tfilename: string,\n): void {\n\tconst bad_member = find_class_member_with_yield_star(stmt);\n\n\tif (!bad_member) {\n\t\treturn;\n\t}\n\n\tthrow new PreprocessError(\n\t\t[\n\t\t\t`[ASYNC_EFFECT_IN_CLASS_MEMBER]: ${filename}: yield* cannot be used inside class members.`,\n\t\t\t`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\t\t\t\"\",\n\t\t\t\"Problematic member:\",\n\t\t\tslice(content, bad_member),\n\t\t].join(\"\\n\"),\n\t\tfilename,\n\t);\n}\n\nfunction find_class_member_with_yield_star(stmt: ts.Statement): ts.Node | undefined {\n\tlet found: ts.Node | undefined;\n\n\tfunction visit(node: ts.Node): void {\n\t\tif (found) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tts.isPropertyDeclaration(node) &&\n\t\t\tnode.initializer &&\n\t\t\tcontains_top_level_yield_star(node.initializer)\n\t\t) {\n\t\t\tfound = node;\n\t\t\treturn;\n\t\t}\n\n\t\tnode.forEachChild(visit);\n\t}\n\n\tvisit(stmt);\n\n\treturn found;\n}\n\nfunction make_name_allocator(initial_names: readonly string[]): {\n\treserve(name: string): string;\n} {\n\tconst used_names = new Set(initial_names);\n\n\treturn {\n\t\treserve(name: string): string {\n\t\t\tlet candidate = name;\n\t\t\tlet suffix = 1;\n\n\t\t\twhile (used_names.has(candidate)) {\n\t\t\t\tcandidate = `${name}_${suffix}`;\n\t\t\t\tsuffix += 1;\n\t\t\t}\n\n\t\t\tused_names.add(candidate);\n\n\t\t\treturn candidate;\n\t\t},\n\t};\n}\n\nfunction make_generated_name(hint: string, suffix: string): string {\n\tconst normalized_hint = hint.replace(/[^A-Za-z0-9_$]/g, \"_\");\n\tconst safe_hint = /^[A-Za-z_$]/.test(normalized_hint)\n\t\t? normalized_hint\n\t\t: `temp_${normalized_hint}`;\n\n\treturn `__SER___${safe_hint}${suffix}`;\n}\n","import { type MarkupTransformTarget, transform_markup_effect } from \"$/markup/transform.ts\";\nimport { scan_svelte_effect_source } from \"$/compiler/source-scan.ts\";\nimport { transform_script_effect } from \"$/script-transform/index.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\t/** Transformed Svelte source. */\n\tcode: string;\n}\n\n/**\n * Options accepted by the direct whole-file Svelte transform.\n *\n * @example\n * ```ts\n * const options: SvelteTransformOptions = { target: \"client\" };\n * ```\n *\n * @since 2.5.0\n */\nexport interface SvelteTransformOptions {\n\t/** Markup emission target passed through to the markup transform. */\n\ttarget?: MarkupTransformTarget;\n}\n\n/**\n * Lowers SER syntax in a complete Svelte component without using Svelte's\n * 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 * @param options - Optional target configuration for markup lowering.\n * @returns The transformed component source.\n */\nexport function transform_svelte_effect(\n\tcontent: string,\n\tfilename = \"unknown.svelte\",\n\toptions: SvelteTransformOptions = {},\n): SvelteTransformResult {\n\tconst scan = scan_svelte_effect_source(content, filename);\n\tconst script = scan.effect_script;\n\n\tlet combined = content;\n\n\tif (script) {\n\t\tconst effect_attribute = script.effect_attribute;\n\t\tconst effect_attribute_start = effect_attribute?.start ?? script.opening_tag_end;\n\t\tconst effect_attribute_end = effect_attribute?.end ?? script.opening_tag_end;\n\t\tconst result = transform_script_effect(script.text, filename, {\n\t\t\temit_types: script.is_typescript,\n\t\t});\n\n\t\tcombined =\n\t\t\tcontent.slice(0, effect_attribute_start) +\n\t\t\tcontent.slice(effect_attribute_end, script.opening_tag_end) +\n\t\t\tresult.code +\n\t\t\tcontent.slice(script.closing_tag_start);\n\t}\n\n\tconst result = transform_markup_effect(combined, filename, {\n\t\ttarget: options.target,\n\t});\n\n\treturn { code: result.code };\n}\n\nexport {\n\ttype MarkupTransformOptions,\n\ttype MarkupTransformResult,\n\ttype MarkupTransformTarget,\n\ttransform_markup_effect,\n} from \"$/markup/transform.ts\";\n\nexport {\n\ttype BlockRef,\n\ttype ScriptTransformResult,\n\ttransform_script_effect,\n} from \"$/script-transform/index.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;AAiCA,SAAgB,iCACf,QACA,UACS;CACT,OAAO,OAAO,KAAK,UAAU,0BAA0B,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI;AACnF;AAEA,SAAS,0BAA0B,OAAoB,UAAyC;CAC/F,MAAM,YAAY,MAAM,KAAK,KAAK,QAAQ,KAAK,IAAI,EAAE;CAErD,MAAM,OAAO,MAAM,WAAW,KAAK,cAAc,OAAO,WAAW,CAAC,CAAC,KAAK,IAAI;CAE9E,OAAO;EACN;EACA;EACA,GAAG;EACH,WAAW,SAAS,iBAAiB,KAAK,SAAS,WAAW;EAC9D,WAAW,SAAS,QAAQ,KAAK,SAAS,OAAO;EACjD;EACA;EACA,WAAW,SAAS,OAAO,KAAK,SAAS,QAAQ,SAAS,SAAS,iBAAiB,QAAQ,SAAS,QAAQ;EAC7G,8BAA8B,SAAS,OAAO;EAC9C,YAAY,SAAS,OAAO;EAC5B;EACA;CACD,CAAC,CAAC,KAAK,IAAI;AACZ;;;;;;;;;;;;ACpCA,SAAgB,gBACf,MACA,SACA,SACmB;CACnB,IAAI,GAAG,sBAAsB,IAAI,GAChC,OAAO,2BAA2B,MAAM,SAAS,OAAO;CAGzD,IAAI,GAAG,oBAAoB,IAAI,GAC9B,OAAO,yBAAyB,MAAM,SAAS,OAAO;CAGvD,MAAM,OAAO,MAAM,SAAS,IAAI;CAGhC,OAAO;EACN,OAAO,CAAC;EACR,gBAAgB;EAChB,eAAe,CAAC,kBAAkB,CALd,yBAAyB,MAAM,SAAS,OAKd,CAAC,GAAG,aAAa,IAAI,CAAC,CAAC;EACrE,OAAO;GAAE,OAAO,KAAK,aAAa;GAAG,KAAK,KAAK;EAAI;CACpD;AACD;AAEA,SAAS,yBACR,MACA,SACA,SACmB;CACnB,MAAM,sBAAgC,CAAC;CACvC,MAAM,kBAA4B,CAAC;CAEnC,MAAM,YAAY,KAAK;CACvB,MAAM,QAAQ,UAAU,QAAQ,GAAG,UAAU,SAAS,IAAI,QAAQ;CAClE,IAAI,0BAA0B;CAE9B,KAAK,MAAM,QAAQ,UAAU,cAAc;EAC1C,IAAI,CAAC,8BAA8B,IAAI,GAAG;GACzC,gBAAgB,KAAK,MAAM,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC;GAChD;EACD;EAEA,MAAM,UAAU,2BACf,MACA,SACA,kBAAkB,KAAK,IAAI,GAC3B,OACD;EAEA,oBAAoB,KAAK,GAAG,QAAQ,mBAAmB;EACvD,gBAAgB,KAAK,QAAQ,cAAc;EAC3C,4BAA4B,QAAQ;CACrC;CAIA,OAAO;EACN,OAAO,CAAC;EACR,cAAc;EACd,gBAAA,GALyB,KAAK,GAAG,gBAAgB,KAAK,IAAI,EAAE;EAM5D,eAAe,CAAC;EAChB;EACA,OAAO;GAAE,OAAO,KAAK,SAAS;GAAG,KAAK,KAAK;EAAI;CAChD;AACD;AAEA,SAAS,2BACR,MACA,SACA,SACmB;CACnB,MAAM,OAAO,KAAK;CAElB,IAAI,CAAC,8BAA8B,IAAI,GACtC,OAAO;EACN,OAAO,CAAC;EACR,gBAAgB,MAAM,SAAS,IAAI,CAAC,CAAC,KAAK;EAC1C,eAAe,CAAC;EAChB,OAAO;GAAE,OAAO,KAAK,SAAS;GAAG,KAAK,KAAK;EAAI;CAChD;CAGD,IAAI,yBAAyB,IAAI,GAAG;EACnC,MAAM,OAAO,MAAM,SAAS,IAAI,CAAC,CAAC,KAAK;EAGvC,OAAO;GACN,OAAO,CAAC;GACR,gBAAgB;GAChB,eAAe,CAAC,kBAAkB,CALhB,gBAAgB,MAAM,OAKI,IAAI,GAAG,GAAG,aAAa,IAAI,CAAC,CAAC;GACzE,OAAO;IAAE,OAAO,KAAK,aAAa;IAAG,KAAK,KAAK;GAAI;EACpD;CACD;CAEA,IAAI,GAAG,mBAAmB,IAAI,KAAK,uBAAuB,IAAI,GAAG;EAChE,MAAM,SAAS,MAAM,SAAS,KAAK,IAAI,CAAC,CAAC,KAAK;EAC9C,MAAM,eAAe,gCAAgC,KAAK,IAAI;EAE9D,IACC,KAAK,cAAc,SAAS,GAAG,WAAW,eAC1C,yBAAyB,KAAK,KAAK,GAClC;GACD,MAAM,aAAa,6BAA6B,KAAK,OAAO,OAAO;GAGnE,OAAO;IACN,OAAO,CAAC;IACR,gBAAgB;IAChB,eAAe,CACd,kBACC,CAAC,GAAG,OAAO,KAPa,gBAAgB,YAAY,OAOnB,EAAE,EAAE,GACrC,aAAa,YAAY,YAAY,CACtC,CACD;IACA,OAAO;KAAE,OAAO,KAAK,SAAS;KAAG,KAAK,KAAK;IAAI;GAChD;EACD;EAEA,MAAM,UAAU,wBACf,KAAK,OACL,SACA,eAAe,MAAM,GACrB,OACD;EACA,MAAM,aAAa,QAAQ,MAAM,KAAK,SAAS,KAAK,IAAI;EACxD,MAAM,YAAY,GAAG,OAAO,GAAG,MAC9B,SACA,KAAK,aACN,CAAC,CAAC,KAAK,EAAE,GAAG,QAAQ,eAAe;EAEnC,OAAO;GACN,OAAO,QAAQ;GACf,cAAc,QAAQ;GACtB,gBAAgB;GAChB,eAAe,CACd,kBACC,CAAC,GAAG,QAAQ,cAAc,SAAS,UAAU,MAAM,UAAU,GAAG,SAAS,GACzE,CACC,GAAG,QAAQ,cAAc,SAAS,UAAU,MAAM,IAAI,GACtD,GAAG,aAAa,QAAQ,gBAAgB,CAAC,GAAG,cAAc,GAAG,UAAU,CAAC,CACzE,CACD,CACD;GACA,OAAO;IAAE,OAAO,KAAK,SAAS;IAAG,KAAK,KAAK;GAAI;EAChD;CACD;CAEA,MAAM,UAAU,wBAAwB,MAAM,SAAS,QAAQ,OAAO;CAEtE,IAAI,uBAAuB,IAAI,GAC9B,OAAO;EACN,OAAO,QAAQ;EACf,cAAc,QAAQ;EACtB,gBAAgB,QAAQ,iBAAiB;EACzC,eAAe,QAAQ;EACvB,OAAO;GAAE,OAAO,KAAK,SAAS;GAAG,KAAK,KAAK;EAAI;CAChD;CAGD,MAAM,aAAa,QAAQ,MAAM,KAAK,SAAS,KAAK,IAAI;CAExD,OAAO;EACN,OAAO,QAAQ;EACf,cAAc,QAAQ;EACtB,gBAAgB;EAChB,eAAe,CACd,kBACC,CACC,GAAG,QAAQ,cAAc,SAAS,UAAU,MAAM,UAAU,GAC5D,QAAQ,iBAAiB,GAC1B,GACA,CACC,GAAG,QAAQ,cAAc,SAAS,UAAU,MAAM,IAAI,GACtD,GAAG,aAAa,QAAQ,gBAAgB,UAAU,CACnD,CACD,CACD;EACA,OAAO;GAAE,OAAO,KAAK,SAAS;GAAG,KAAK,KAAK;EAAI;CAChD;AACD;AAEA,SAAS,wBACR,MACA,SACA,MACA,SACoB;CACpB,MAAM,eAID,CAAC;CAEN,MAAM,QAAuB,CAAC;CAC9B,MAAM,eAAyB,CAAC;CAChC,MAAM,aAAuB,CAAC;CAC9B,MAAM,OAAiB,CAAC;CAExB,yBAAyB,OAAO,SAAS;EACxC,MAAM,YAAY,QAAQ,eAAe,IAAI;EAC7C,MAAM,aAAa,YAAY,SAAS,IAAI,CAAC,CAAC,KAAK;EACnD,MAAM,cAAc,uBAAuB,YAAY,MAAM,OAAO;EAEpE,IAAI,aAAa;GAChB,aAAa,KAAK,YAAY,WAAW;GACzC,MAAM,KAAK;IAAE,MAAM;IAAW,MAAM,YAAY;GAAK,CAAC;EACvD,OACC,MAAM,KAAK,EAAE,MAAM,UAAU,CAAC;EAG/B,WAAW,KAAK,GAAG,UAAU,KAAK,gBAAgB,YAAY,OAAO,EAAE,EAAE;EACzE,KAAK,KAAK,GAAG,aAAa,UAAU,CAAC;EACrC,aAAa,KAAK;GACjB,OAAO,KAAK,SAAS;GACrB,KAAK,KAAK;GACV,MAAM;EACP,CAAC;CACF,CAAC;CAED,IAAI,aAAa,WAAW,GAC3B,OAAO;EACN;EACA;EACA,gBAAgB,MAAM,SAAS,IAAI,CAAC,CAAC,KAAK;EAC1C,eAAe,CAAC;CACjB;CAGD,aAAa,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;CAE7C,IAAI,OAAO,MAAM,SAAS,IAAI;CAE9B,MAAM,iBAAiB,KAAK,aAAa;CAEzC,KAAK,MAAM,eAAe,cACzB,OACC,KAAK,MAAM,GAAG,YAAY,QAAQ,cAAc,IAChD,YAAY,OACZ,KAAK,MAAM,YAAY,MAAM,cAAc;CAG7C,OAAO;EACN;EACA;EACA,gBAAgB,KAAK,KAAK;EAC1B,eAAe,CAAC,kBAAkB,YAAY,IAAI,CAAC;CACpD;AACD;AAEA,SAAS,2BACR,MACA,SACA,MACA,SAKC;CACD,MAAM,sBAAgC,CAAC;CACvC,MAAM,eAID,CAAC;CAEN,yBAAyB,OAAO,eAAe;EAC9C,MAAM,UAAU,8BAA8B,YAAY,SAAS,MAAM,OAAO;EAEhF,oBAAoB,KAAK,QAAQ,WAAW;EAC5C,aAAa,KAAK;GACjB,OAAO,WAAW,SAAS;GAC3B,KAAK,WAAW;GAChB,MAAM,QAAQ;EACf,CAAC;CACF,CAAC;CAED,aAAa,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;CAE7C,IAAI,OAAO,YAAY,SAAS,IAAI;CACpC,MAAM,iBAAiB,KAAK,SAAS;CAErC,KAAK,MAAM,eAAe,cACzB,OACC,KAAK,MAAM,GAAG,YAAY,QAAQ,cAAc,IAChD,YAAY,OACZ,KAAK,MAAM,YAAY,MAAM,cAAc;CAG7C,OAAO;EACN;EACA,gBAAgB,KAAK,KAAK;EAC1B,yBAAyB,aAAa,SAAS;CAChD;AACD;AAEA,SAAS,8BACR,MACA,SACA,MACA,SAC8C;CAC9C,MAAM,aAAa,YAAY,SAAS,IAAI,CAAC,CAAC,KAAK;CACnD,MAAM,cAAc,QAAQ,iBAAiB,UAAU,MAAM;CAC7D,MAAM,YAAY,sBAAsB,MAAM,OAAO;CAErD,MAAM,YAAY,IADL,aAAa,UACD,CAAC,CAAC,KAAK,IAAI,EAAE;CAGtC,OAAO;EACN,aAAa,aAAa,YAAY,eAHZ,gBAAgB,YAAY,OAGgB,EAAE;EACxE,YAAY;GACX,SAAS,QAAQ,gBAAgB;GACjC,OAAO,KAAK,UAAU,SAAS,EAAE;GACjC,SAAS,UAAU;GACnB,kBAAkB,YAAY;GAC9B;EACD,CAAC,CAAC,KAAK,EAAE;CACV;AACD;AAEA,SAAS,uBACR,YACA,MACA,SACoD;CACpD,IAAI,CAAC,QAAQ,YACZ;CAGD,MAAM,cAAc,QAAQ,sBAAsB,IAAI;CAGtD,OAAO;EACN,aAAa,YAAY,YAAY,eAHlB,iBAAiB,UAG0B,EAAE;EAChE,MAAM,GAAG,QAAQ,mBAAmB,qBAAqB,YAAY;CACtE;AACD;AAEA,SAAS,iBAAiB,YAA4B;CACrD,OAAO,WAAW,QAAQ,kBAAkB,EAAE;AAC/C;AAEA,SAAS,gBAAgB,YAAoB,SAAwC;CACpF,OAAO,UAAU,QAAQ,eAAe,GAAG,iBAAiB,UAAU,EAAE;AACzE;AAEA,SAAS,yBACR,MACA,SACA,SACS;CACT,MAAM,eAID,CAAC;CAEN,yBAAyB,OAAO,eAAe;EAC9C,MAAM,aAAa,YAAY,SAAS,UAAU,CAAC,CAAC,KAAK;EAEzD,aAAa,KAAK;GACjB,OAAO,WAAW,SAAS;GAC3B,KAAK,WAAW;GAChB,MAAM,gBAAgB,YAAY,OAAO;EAC1C,CAAC;CACF,CAAC;CAED,aAAa,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;CAE7C,MAAM,SAAS,KAAK,aAAa;CACjC,IAAI,OAAO,MAAM,SAAS,IAAI;CAE9B,KAAK,MAAM,eAAe,cACzB,OACC,KAAK,MAAM,GAAG,YAAY,QAAQ,MAAM,IACxC,YAAY,OACZ,KAAK,MAAM,YAAY,MAAM,MAAM;CAGrC,OAAO,KAAK,KAAK;AAClB;AAEA,SAAS,sBAAsB,MAAe,SAAwC;CACrF,OAAO,GAAG,QAAQ,SAAS,GAAG,KAAK,SAAS,EAAE,GAAG,KAAK;AACvD;AAEA,SAAS,uBAAuB,MAAoC;CACnE,OACC,KAAK,cAAc,QAAQ,GAAG,WAAW,mBACzC,KAAK,cAAc,QAAQ,GAAG,WAAW;AAE3C;AAEA,SAAS,uBAAuB,MAA8B;CAC7D,IAAI,CAAC,GAAG,iBAAiB,IAAI,GAC5B,OAAO;CAGR,MAAM,SAAS,KAAK;CAEpB,IAAI,GAAG,aAAa,MAAM,GACzB,OAAO,OAAO,KAAK,WAAW,GAAG;CAGlC,OACC,GAAG,2BAA2B,MAAM,KACpC,GAAG,aAAa,OAAO,UAAU,KACjC,OAAO,WAAW,KAAK,WAAW,GAAG;AAEvC;AAEA,SAAS,eAAe,QAAwB;CAG/C,OAFc,OAAO,MAAM,mBAEhB,CAAC,GAAG,MAAM;AACtB;AAEA,SAAS,kBAAkB,MAA8B;CACxD,IAAI,GAAG,aAAa,IAAI,GACvB,OAAO,KAAK;CAGb,OAAO;AACR;AAEA,SAAS,6BAA6B,MAAqB,SAAyB;CACnF,IAAI;CAEJ,qBAAqB,OAAO,SAAS;EACpC,QAAQ,YAAY,SAAS,IAAI,CAAC,CAAC,KAAK;CACzC,CAAC;CAED,OAAO,SAAS;AACjB;AAEA,SAAS,kBAAkB,YAAsB,MAA6B;CAC7E,OAAO;EACN;EACA,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC;CACxB;AACD;AAEA,SAAS,aAAa,WAAmB,iBAAoC,CAAC,GAAa;CAC1F,MAAM,WAAW,IAAI,IAAI,cAAc;CAEvC,OAAO,yBAAyB,SAAS,CAAC,CAAC,QACzC,eAAe,CAAC,WAAW,WAAW,UAAU,KAAK,CAAC,SAAS,IAAI,UAAU,CAC/E;AACD;AAEA,SAAS,gCAAgC,MAAyB;CACjE,IAAI,GAAG,aAAa,IAAI,GACvB,OAAO,CAAC,KAAK,IAAI;CAGlB,IAAI,GAAG,0BAA0B,IAAI,GACpC,OAAO,gCAAgC,KAAK,UAAU;CAGvD,IAAI,GAAG,2BAA2B,IAAI,KAAK,GAAG,0BAA0B,IAAI,GAC3E,OAAO,gCAAgC,KAAK,UAAU;CAGvD,IAAI,GAAG,0BAA0B,IAAI,GACpC,OAAO,KAAK,WAAW,SAAS,aAAa;EAC5C,IAAI,GAAG,8BAA8B,QAAQ,GAC5C,OAAO,CAAC,SAAS,KAAK,IAAI;EAG3B,IAAI,GAAG,qBAAqB,QAAQ,GACnC,OAAO,gCAAgC,SAAS,WAAW;EAG5D,IAAI,GAAG,mBAAmB,QAAQ,GACjC,OAAO,gCAAgC,SAAS,UAAU;EAG3D,OAAO,CAAC;CACT,CAAC;CAGF,IAAI,GAAG,yBAAyB,IAAI,GACnC,OAAO,KAAK,SAAS,SAAS,YAC7B,GAAG,gBAAgB,OAAO,IACvB,gCAAgC,QAAQ,UAAU,IAClD,gCAAgC,OAAO,CAC3C;CAGD,OAAO,CAAC;AACT;;;;;;;;;;;;;;;;;;;;;;ACjdA,SAAgB,wBACf,SACA,UACA,UAAkC,CAAC,GACX;CACxB,IAAI,eAAe;CAEnB,MAAM,cAAc,GAAG,iBACtB,UACA,SACA,GAAG,aAAa,QAChB,MACA,GAAG,WAAW,EACf;CAEA,MAAM,QAAQ,IAAI,YAAY,OAAO;CACrC,MAAM,gBAA+B,CAAC;CACtC,MAAM,aAAyB,CAAC;CAChC,MAAM,0BAA0B,gCAAgC,WAAW;CAC3E,MAAM,8BAA8B,IAAI,IAAI,uBAAuB;CACnE,MAAM,iBAAiB,oBAAoB,uBAAuB;CAClE,MAAM,aAAa,QAAQ,cAAc;CAEzC,IAAI,aAAa;CACjB,IAAI,0BAA0B;CAC9B,IAAI,2BAA2B;;CAG/B,MAAM,oBAAoB,yBAAyB,aAAa,UAAU,QAAQ;CAElF,MAAM,wBAAwB,yBAC7B,aACA,6CACA,gBACD;CAEA,MAAM,qBAAqB,yBAAyB,aAAa,UAAU,SAAS;CAEpF,MAAM,0BAA0B,SAC/B,4BAA4B,IAAI,IAAI,IACjC,eAAe,QAAQ,oBAAoB,MAAM,EAAE,CAAC,IACpD,eAAe,QAAQ,IAAI;CAE/B,MAAM,mBAA0C;EAC/C,QAAQ,eAAe,QAAQ,gBAAgB;EAC/C,YAAY,wBACT,mBACA,uBAAuB,gBAAgB;EAC1C,kBAAkB,eAAe,QAAQ,oBAAoB;EAC7D,QAAQ,oBAAoB,WAAW,uBAAuB,QAAQ;EACtE,SAAS,eAAe,QAAQ,iBAAiB;EACjD,SAAS,qBAAqB,YAAY,uBAAuB,SAAS;EAC1E,eAAe,uBAAuB,cAAc;EACpD,WAAW,uBAAuB,UAAU;CAC7C;CAEA,MAAM,UAAiC;EACtC;EACA,iBAAiB,iBAAiB;EAClC,aAAa,iBAAiB;EAC9B;EACA,oBAAoB,iBAAiB;EACrC,gBAAgB,iBAAiB;EACjC,iBAAiB,MAAe;GAC/B,OAAO,eAAe,QAAQ,oBAAoB,QAAQ,UAAU,EAAE,CAAC;EACxE;EACA,eAAe,MAAe;GAC7B,MAAM,SAAS,iBAAiB,IAAI,KAAK,IAAI;GAC7C,MAAM,OAAO,oBAAoB,QAAQ,OAAO,YAAY,GAAG,MAAM;GAErE,gBAAgB;GAEhB,OAAO,eAAe,QAAQ,IAAI;EACnC;EACA,sBAAsB,MAAe;GACpC,OAAO,eAAe,QAAQ,oBAAoB,QAAQ,QAAQ,YAAY,EAAE,CAAC;EAClF;CACD;;CAGA,KAAK,MAAM,QAAQ,YAAY,YAAY;EAC1C,0BAA0B,MAAM,SAAS,QAAQ;EACjD,iCAAiC,MAAM,SAAS,QAAQ;EAIxD,IAAI,CAF6B,8BAA8B,IAEnC,GAC3B;EAGD,aAAa;EACb,MAAM,UAAU,gBAAgB,MAAM,SAAS,OAAO;EAEtD,IAAI,QAAQ,cAAc,SAAS,KAAK,yBAAyB,IAAI,GAEpE,MAAM,IAAI,uBAAuB,UADpB,MAAM,SAAS,IACkB,CAAC;EAGhD,MAAM,UAAU,QAAQ,MAAM,OAAO,QAAQ,MAAM,KAAK,QAAQ,cAAc;EAE9E,IAAI,QAAQ,MAAM,SAAS,KAAK,QAAQ,cAAc,QAAQ;GAC7D,MAAM,oBAAoB,QAAQ,MAAM,KAAK,SAC5C,KAAK,OACF,OAAO,KAAK,KAAK,YAAY,KAAK,KAAK,iBACvC,OAAO,KAAK,KAAK,sBACrB;GAEA,MAAM,SAAS,CAAC,GAAI,QAAQ,gBAAgB,CAAC,GAAI,GAAG,iBAAiB,CAAC,CAAC,KAAK,IAAI;GAEhF,MAAM,WAAW,QAAQ,MAAM,OAAO,SAAS,IAAI;EACpD;EAEA,cAAc,KAAK,GAAG,QAAQ,aAAa;EAC3C,4BAA4B,QAAQ,2BAA2B;EAC/D,6BAA6B,QAAQ,MAAM,MACzC,SAAS,KAAK,MAAM,SAAS,iBAAiB,aAAa,KAAK,KAClE;CACD;CAEA,IAAI,CAAC,YAAY;EAChB,WAAW,KAAK;GAAE,IAAI;GAAU,MAAM;EAAS,CAAC;EAEhD,OAAO;GAAE,MAAM;GAAS,QAAQ;EAAW;CAC5C;;CAGA,MAAM,UAAU,aACf,mBACA,uBACA,oBACA,kBACA;EACC,kBAAkB,cAAc,SAAS,KAAK;EAC9C,cAAc,cAAc,SAAS;EACrC,eAAe,cAAc,SAAS;EACtC,qBAAqB;EACrB,iBAAiB,cAAc,SAAS,KAAK;CAC9C,CACD;CAEA,MAAM,cAAc,CAAC,GAAG,YAAY,UAAU,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,GAAG,mBAAmB;CAErF,IAAI,SACH,IAAI,aACH,MAAM,YAAY,YAAY,KAAK,OAAO,OAAO;MAEjD,MAAM,QAAQ,UAAU,IAAI;;CAK9B,IAAI,cAAc,SAAS,GAAG;EAC7B,MAAM,gBAAgB,iCAAiC,eAAe,gBAAgB;EAEtF,MAAM,OAAO,OAAO,aAAa;CAClC;CAEA,WAAW,KAAK;EAAE,IAAI;EAAU,MAAM;CAAS,CAAC;CAEhD,MAAM,OAAO,MAAM,SAAS;CAE5B,OAAO;EACN;EACA,QAAQ;EACR,KAAK,kBAAkB,OAAO,QAAQ;EACtC,aAAa,0BACZ,SACA,MACA,aACA,iBAAiB,SAClB;CACD;AACD;AAEA,SAAS,0BACR,SACA,MACA,aACA,gBACe;CACf,MAAM,aAAa,YAAY,WAAW,SAAS,SAAS;EAC3D,MAAM,cAAqC,CAAC;EAE5C,IAAI,8BAA8B,IAAI,KAAK,GAAG,oBAAoB,IAAI,GACrE,KAAK,MAAM,QAAQ,KAAK,gBAAgB,cACvC,sCAAsC,KAAK,MAAM,WAAW;EAI9D,yBAAyB,OAAO,SAAS;GACxC,MAAM,aAAa,GAAG,mBAAmB,IAAI,IAAI,KAAK,QAAQ;GAC9D,MAAM,OAAO,QAAQ,MAAM,WAAW,SAAS,GAAG,WAAW,GAAG,CAAC,CAAC,KAAK;GAEvE,YAAY,KAAK;IAChB,eAAe,WAAW,SAAS;IACnC,aAAa,WAAW;IACxB;IACA,OAAO;IACP,SAAS,GAAG,eAAe,GAAG,KAAK;GACpC,CAAC;EACF,CAAC;EAED,OAAO;CACR,CAAC;CAED,MAAM,cAAqD,CAAC;CAC5D,MAAM,iCAAiB,IAAI,IAAoB;CAE/C,OAAO,WAAW,SAAS,cAAc;EACxC,MAAM,aAAa,2BAA2B,SAAS;EACvD,MAAM,kBAAkB,8BACvB,MACA,WACA,aACA,eAAe,IAAI,UAAU,KAAK,CACnC;EAEA,IAAI,kBAAkB,GAAG;GACxB,eAAe,IAAI,YAAY,KAAK,MAAM;GAE1C,OAAO,CAAC;EACT;EAEA,MAAM,gBAAgB,kBAAkB,UAAU,KAAK;EACvD,YAAY,KAAK;GAAE,OAAO;GAAiB,KAAK;EAAc,CAAC;EAC/D,eAAe,IAAI,YAAY,aAAa;EAE5C,OAAO,CACN;GACC,eAAe,UAAU;GACzB,aAAa,UAAU;GACvB,gBAAgB;GAChB,cAAc;EACf,CACD;CACD,CAAC;AACF;AAUA,SAAS,2BAA2B,WAAwC;CAC3E,OAAO,GAAG,UAAU,MAAM,GAAG,UAAU;AACxC;AAEA,SAAS,sCACR,MACA,YACO;CACP,IAAI,GAAG,aAAa,IAAI,GAAG;EAC1B,WAAW,KAAK;GACf,eAAe,KAAK,SAAS;GAC7B,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,OAAO;EACR,CAAC;EAED;CACD;CAEA,KAAK,MAAM,WAAW,KAAK,UAAU;EACpC,IAAI,GAAG,oBAAoB,OAAO,GACjC;EAGD,sCAAsC,QAAQ,MAAM,UAAU;CAC/D;AACD;AAEA,SAAS,8BACR,MACA,WACA,aACA,cACS;CACT,OAAO,eAAe,KAAK,QAAQ;EAClC,MAAM,cACL,UAAU,UAAU,kBAAkB,UAAU,UAAU,UAAU;EAErE,IAAI,CAAC,aACJ,OAAO;EAGR,MAAM,QAAQ,KAAK,QAAQ,aAAa,YAAY;EAEpD,IAAI,QAAQ,GACX,OAAO;EAGR,MAAM,iBACL,UAAU,UAAU,mBAAmB,UAAU,UAC9C,UAAU,QAAQ,QAAQ,UAAU,IAAI,IACxC;EACJ,MAAM,QAAQ,QAAQ,KAAK,IAAI,gBAAgB,CAAC;EAChD,MAAM,MAAM,QAAQ,UAAU,KAAK;EACnC,MAAM,sBAAsB,YAAY,MACtC,UAAU,QAAQ,MAAM,OAAO,MAAM,MAAM,KAC7C;EACA,MAAM,gBACL,UAAU,UAAU,gBAAgB,yBAAyB,MAAM,OAAO,GAAG;EAE9E,IAAI,CAAC,uBAAuB,eAC3B,OAAO;EAGR,eAAe,UAAU,UAAU,eAAe,QAAQ,IAAI,QAAQ,YAAY;CACnF;CAEA,OAAO;AACR;AAEA,SAAS,yBAAyB,MAAc,OAAe,KAAsB;CACpF,MAAM,SAAS,UAAU,IAAI,IAAI,KAAK,WAAW,QAAQ,CAAC;CAC1D,MAAM,QAAQ,OAAO,KAAK,SAAS,IAAI,KAAK,WAAW,GAAG;CAE1D,OAAO,CAAC,mBAAmB,MAAM,KAAK,CAAC,mBAAmB,KAAK;AAChE;AAEA,SAAS,mBAAmB,WAA4B;CACvD,OACE,aAAa,MAAM,aAAa,MAChC,aAAa,MAAM,aAAa,OAChC,aAAa,MAAM,aAAa,MACjC,cAAc,MACd,cAAc;AAEhB;AAEA,SAAS,iCACR,MACA,SACA,UACO;CACP,MAAM,aAAa,kCAAkC,IAAI;CAEzD,IAAI,CAAC,YACJ;CAGD,MAAM,IAAI,gBACT;EACC,mCAAmC,SAAS;EAC5C;EACA;EACA;EACA,MAAM,SAAS,UAAU;CAC1B,CAAC,CAAC,KAAK,IAAI,GACX,QACD;AACD;AAEA,SAAS,kCAAkC,MAAyC;CACnF,IAAI;CAEJ,SAAS,MAAM,MAAqB;EACnC,IAAI,OACH;EAGD,IACC,GAAG,sBAAsB,IAAI,KAC7B,KAAK,eACL,8BAA8B,KAAK,WAAW,GAC7C;GACD,QAAQ;GACR;EACD;EAEA,KAAK,aAAa,KAAK;CACxB;CAEA,MAAM,IAAI;CAEV,OAAO;AACR;AAEA,SAAS,oBAAoB,eAE3B;CACD,MAAM,aAAa,IAAI,IAAI,aAAa;CAExC,OAAO,EACN,QAAQ,MAAsB;EAC7B,IAAI,YAAY;EAChB,IAAI,SAAS;EAEb,OAAO,WAAW,IAAI,SAAS,GAAG;GACjC,YAAY,GAAG,KAAK,GAAG;GACvB,UAAU;EACX;EAEA,WAAW,IAAI,SAAS;EAExB,OAAO;CACR,EACD;AACD;AAEA,SAAS,oBAAoB,MAAc,QAAwB;CAClE,MAAM,kBAAkB,KAAK,QAAQ,mBAAmB,GAAG;CAK3D,OAAO,WAJW,cAAc,KAAK,eAAe,IACjD,kBACA,QAAQ,oBAEmB;AAC/B;;;;;;;;;;;;;;;;;;;;;;;ACpZA,SAAgB,wBACf,SACA,WAAW,kBACX,UAAkC,CAAC,GACX;CAExB,MAAM,SADO,0BAA0B,SAAS,QAC9B,CAAC,CAAC;CAEpB,IAAI,WAAW;CAEf,IAAI,QAAQ;EACX,MAAM,mBAAmB,OAAO;EAChC,MAAM,yBAAyB,kBAAkB,SAAS,OAAO;EACjE,MAAM,uBAAuB,kBAAkB,OAAO,OAAO;EAC7D,MAAM,SAAS,wBAAwB,OAAO,MAAM,UAAU,EAC7D,YAAY,OAAO,cACpB,CAAC;EAED,WACC,QAAQ,MAAM,GAAG,sBAAsB,IACvC,QAAQ,MAAM,sBAAsB,OAAO,eAAe,IAC1D,OAAO,OACP,QAAQ,MAAM,OAAO,iBAAiB;CACxC;CAMA,OAAO,EAAE,MAJM,wBAAwB,UAAU,UAAU,EAC1D,QAAQ,QAAQ,OACjB,CAEoB,CAAC,CAAC,KAAK;AAC5B"}
|
|
1
|
+
{"version":3,"file":"transform.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/script-transform/runtime-block.ts","../../../modules/svelte-effect-runtime/src/script-transform/lower.ts","../../../modules/svelte-effect-runtime/src/script-transform/index.ts","../../../modules/svelte-effect-runtime/src/runtime/transform.ts"],"sourcesContent":["import type { EffectBlock, RuntimeImportBindings } from \"./types.ts\";\n\nexport function make_runtime_block_with_bindings(\n\tblocks: EffectBlock[],\n\tbindings: RuntimeImportBindings,\n): string {\n\treturn blocks.map((block) => make_runtime_effect_block(block, bindings)).join(\"\\n\");\n}\n\nfunction make_runtime_effect_block(block: EffectBlock, bindings: RuntimeImportBindings): string {\n\tconst dep_reads = block.deps.map((dep) => ` ${dep};`);\n\n\tconst body = block.statements.map((statement) => ` ${statement}`).join(\"\\n\");\n\n\treturn [\n\t\t\"\",\n\t\t\"$effect(() => {\",\n\t\t...dep_reads,\n\t\t` const ${bindings.dispatcher_value} = ${bindings.dispatcher}();`,\n\t\t` const ${bindings.program} = ${bindings.effect}.gen(function* () {`,\n\t\tbody,\n\t\t\" });\",\n\t\t` const ${bindings.cancel} = ${bindings.untrack}(() => ${bindings.dispatcher_value}.run_scoped(${bindings.scope}.scope, ${bindings.program}));`,\n\t\t` import.meta.hot?.dispose(${bindings.cancel});`,\n\t\t` return ${bindings.cancel};`,\n\t\t\"});\",\n\t\t\"\",\n\t].join(\"\\n\");\n}\n","import type {\n\tEffectBlock,\n\tLoweredExpression,\n\tLoweredStatement,\n\tScriptLoweringContext,\n\tTempBinding,\n} from \"./types.ts\";\nimport { collect_yield_star_nodes, find_yield_star_node, is_yield_star_expression } from \"./ast.ts\";\nimport { collect_free_identifiers } from \"$/markup/transform/expressions.ts\";\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\nimport { slice, slice_start } from \"./source.ts\";\n\nimport ts from \"typescript\";\n\nexport function lower_statement(\n\tstmt: ts.Statement,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): LoweredStatement {\n\tif (ts.isExpressionStatement(stmt)) {\n\t\treturn lower_expression_statement(stmt, content, context);\n\t}\n\n\tif (ts.isVariableStatement(stmt)) {\n\t\treturn lower_variable_statement(stmt, content, context);\n\t}\n\n\tconst text = slice(content, stmt);\n\tconst wrapped_text = wrap_yield_stars_in_node(stmt, content, context);\n\n\treturn {\n\t\ttemps: [],\n\t\trewritten_text: \"\",\n\t\teffect_blocks: [make_effect_block([wrapped_text], collect_deps(text))],\n\t\trange: { start: stmt.getFullStart(), end: stmt.end },\n\t};\n}\n\nfunction lower_variable_statement(\n\tstmt: ts.VariableStatement,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): LoweredStatement {\n\tconst helper_declarations: string[] = [];\n\tconst rewritten_decls: string[] = [];\n\n\tconst decl_list = stmt.declarationList;\n\tconst kind = (decl_list.flags & ts.NodeFlags.Let) !== 0 ? \"let\" : \"const\";\n\tlet uses_dispatcher_promise = false;\n\n\tfor (const decl of decl_list.declarations) {\n\t\tif (!contains_top_level_yield_star(decl)) {\n\t\t\trewritten_decls.push(slice(content, decl).trim());\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst lowered = lower_node_yields_to_await(\n\t\t\tdecl,\n\t\t\tcontent,\n\t\t\tmake_binding_hint(decl.name),\n\t\t\tcontext,\n\t\t);\n\n\t\thelper_declarations.push(...lowered.helper_declarations);\n\t\trewritten_decls.push(lowered.rewritten_text);\n\t\tuses_dispatcher_promise ||= lowered.uses_dispatcher_promise;\n\t}\n\n\tconst rewritten_text = `${kind} ${rewritten_decls.join(\", \")};`;\n\n\treturn {\n\t\ttemps: [],\n\t\ttype_helpers: helper_declarations,\n\t\trewritten_text,\n\t\teffect_blocks: [],\n\t\tuses_dispatcher_promise,\n\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t};\n}\n\nfunction lower_expression_statement(\n\tstmt: ts.ExpressionStatement,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): LoweredStatement {\n\tconst expr = stmt.expression;\n\n\tif (!contains_top_level_yield_star(expr)) {\n\t\treturn {\n\t\t\ttemps: [],\n\t\t\trewritten_text: slice(content, stmt).trim(),\n\t\t\teffect_blocks: [],\n\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tif (is_yield_star_expression(expr)) {\n\t\tconst text = slice(content, expr).trim();\n\t\tconst yield_text = wrap_yield_text(text, context);\n\n\t\treturn {\n\t\t\ttemps: [],\n\t\t\trewritten_text: \"\",\n\t\t\teffect_blocks: [make_effect_block([yield_text + \";\"], collect_deps(text))],\n\t\t\trange: { start: stmt.getFullStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tif (ts.isBinaryExpression(expr) && is_assignment_operator(expr)) {\n\t\tconst target = slice(content, expr.left).trim();\n\t\tconst target_names = collect_assignment_target_names(expr.left);\n\n\t\tif (\n\t\t\texpr.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n\t\t\tis_yield_star_expression(expr.right)\n\t\t) {\n\t\t\tconst yield_text = extract_yield_star_full_text(expr.right, content);\n\t\t\tconst wrapped_yield_text = wrap_yield_text(yield_text, context);\n\n\t\t\treturn {\n\t\t\t\ttemps: [],\n\t\t\t\trewritten_text: \"\",\n\t\t\t\teffect_blocks: [\n\t\t\t\t\tmake_effect_block(\n\t\t\t\t\t\t[`${target} = ${wrapped_yield_text};`],\n\t\t\t\t\t\tcollect_deps(yield_text, target_names),\n\t\t\t\t\t),\n\t\t\t\t],\n\t\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t\t};\n\t\t}\n\n\t\tconst lowered = lower_expression_yields(\n\t\t\texpr.right,\n\t\t\tcontent,\n\t\t\tmake_temp_hint(target),\n\t\t\tcontext,\n\t\t);\n\t\tconst temp_names = lowered.temps.map((temp) => temp.name);\n\t\tconst statement = `${target} ${slice(\n\t\t\tcontent,\n\t\t\texpr.operatorToken,\n\t\t).trim()} ${lowered.rewritten_expr};`;\n\n\t\treturn {\n\t\t\ttemps: lowered.temps,\n\t\t\ttype_helpers: lowered.type_helpers,\n\t\t\trewritten_text: \"\",\n\t\t\teffect_blocks: [\n\t\t\t\tmake_effect_block(\n\t\t\t\t\t[...lowered.effect_blocks.flatMap((block) => block.statements), statement],\n\t\t\t\t\t[\n\t\t\t\t\t\t...lowered.effect_blocks.flatMap((block) => block.deps),\n\t\t\t\t\t\t...collect_deps(lowered.rewritten_expr, [...target_names, ...temp_names]),\n\t\t\t\t\t],\n\t\t\t\t),\n\t\t\t],\n\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tconst lowered = lower_expression_yields(expr, content, \"call\", context);\n\n\tif (is_top_level_rune_call(expr)) {\n\t\treturn {\n\t\t\ttemps: lowered.temps,\n\t\t\ttype_helpers: lowered.type_helpers,\n\t\t\trewritten_text: lowered.rewritten_expr + \";\",\n\t\t\teffect_blocks: lowered.effect_blocks,\n\t\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t\t};\n\t}\n\n\tconst temp_names = lowered.temps.map((temp) => temp.name);\n\n\treturn {\n\t\ttemps: lowered.temps,\n\t\ttype_helpers: lowered.type_helpers,\n\t\trewritten_text: \"\",\n\t\teffect_blocks: [\n\t\t\tmake_effect_block(\n\t\t\t\t[\n\t\t\t\t\t...lowered.effect_blocks.flatMap((block) => block.statements),\n\t\t\t\t\tlowered.rewritten_expr + \";\",\n\t\t\t\t],\n\t\t\t\t[\n\t\t\t\t\t...lowered.effect_blocks.flatMap((block) => block.deps),\n\t\t\t\t\t...collect_deps(lowered.rewritten_expr, temp_names),\n\t\t\t\t],\n\t\t\t),\n\t\t],\n\t\trange: { start: stmt.getStart(), end: stmt.end },\n\t};\n}\n\nfunction lower_expression_yields(\n\texpr: ts.Expression,\n\tcontent: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): LoweredExpression {\n\tconst replacements: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\ttext: string;\n\t}> = [];\n\n\tconst temps: TempBinding[] = [];\n\tconst type_helpers: string[] = [];\n\tconst statements: string[] = [];\n\tconst deps: string[] = [];\n\n\tcollect_yield_star_nodes(expr, (node) => {\n\t\tconst temp_name = context.next_temp_name(hint);\n\t\tconst yield_text = slice_start(content, node).trim();\n\t\tconst type_helper = make_yield_type_helper(yield_text, hint, context);\n\n\t\tif (type_helper) {\n\t\t\ttype_helpers.push(type_helper.declaration);\n\t\t\ttemps.push({ name: temp_name, type: type_helper.type });\n\t\t} else {\n\t\t\ttemps.push({ name: temp_name });\n\t\t}\n\n\t\tstatements.push(`${temp_name} = ${wrap_yield_text(yield_text, context)};`);\n\t\tdeps.push(...collect_deps(yield_text));\n\t\treplacements.push({\n\t\t\tstart: node.getStart(),\n\t\t\tend: node.end,\n\t\t\ttext: temp_name,\n\t\t});\n\t});\n\n\tif (replacements.length === 0) {\n\t\treturn {\n\t\t\ttemps,\n\t\t\ttype_helpers,\n\t\t\trewritten_expr: slice(content, expr).trim(),\n\t\t\teffect_blocks: [],\n\t\t};\n\t}\n\n\treplacements.sort((a, b) => b.start - a.start);\n\n\tlet text = slice(content, expr);\n\n\tconst offset_in_expr = expr.getFullStart();\n\n\tfor (const replacement of replacements) {\n\t\ttext =\n\t\t\ttext.slice(0, replacement.start - offset_in_expr) +\n\t\t\treplacement.text +\n\t\t\ttext.slice(replacement.end - offset_in_expr);\n\t}\n\n\treturn {\n\t\ttemps,\n\t\ttype_helpers,\n\t\trewritten_expr: text.trim(),\n\t\teffect_blocks: [make_effect_block(statements, deps)],\n\t};\n}\n\nfunction lower_node_yields_to_await(\n\tnode: ts.Node,\n\tcontent: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): {\n\thelper_declarations: string[];\n\trewritten_text: string;\n\tuses_dispatcher_promise: boolean;\n} {\n\tconst helper_declarations: string[] = [];\n\tconst replacements: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\ttext: string;\n\t}> = [];\n\n\tcollect_yield_star_nodes(node, (yield_node) => {\n\t\tconst awaited = make_awaited_yield_expression(yield_node, content, hint, context);\n\n\t\thelper_declarations.push(awaited.declaration);\n\t\treplacements.push({\n\t\t\tstart: yield_node.getStart(),\n\t\t\tend: yield_node.end,\n\t\t\ttext: awaited.expression,\n\t\t});\n\t});\n\n\treplacements.sort((a, b) => b.start - a.start);\n\n\tlet text = slice_start(content, node);\n\tconst offset_in_node = node.getStart();\n\n\tfor (const replacement of replacements) {\n\t\ttext =\n\t\t\ttext.slice(0, replacement.start - offset_in_node) +\n\t\t\treplacement.text +\n\t\t\ttext.slice(replacement.end - offset_in_node);\n\t}\n\n\treturn {\n\t\thelper_declarations,\n\t\trewritten_text: text.trim(),\n\t\tuses_dispatcher_promise: replacements.length > 0,\n\t};\n}\n\nfunction make_awaited_yield_expression(\n\tnode: ts.Node,\n\tcontent: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): { declaration: string; expression: string } {\n\tconst yield_text = slice_start(content, node).trim();\n\tconst helper_name = context.next_helper_name(`effect_${hint}`);\n\tconst helper_id = make_script_effect_id(node, context);\n\tconst deps = collect_deps(yield_text);\n\tconst deps_text = `[${deps.join(\", \")}]`;\n\tconst wrapped_yield_text = wrap_yield_text(yield_text, context);\n\n\treturn {\n\t\tdeclaration: `function* ${helper_name}() { return (${wrapped_yield_text}); }`,\n\t\texpression: [\n\t\t\t`await ${context.dispatcher_name}().with_scope(${context.scope_name}.scope, () => ${context.dispatcher_name}().promise({`,\n\t\t\t`id: ${JSON.stringify(helper_id)}, `,\n\t\t\t`deps: ${deps_text}, `,\n\t\t\t`factory: () => ${helper_name}()`,\n\t\t\t`}))`,\n\t\t].join(\"\"),\n\t};\n}\n\nfunction make_yield_type_helper(\n\tyield_text: string,\n\thint: string,\n\tcontext: ScriptLoweringContext,\n): { declaration: string; type: string } | undefined {\n\tif (!context.emit_types) {\n\t\treturn undefined;\n\t}\n\n\tconst helper_name = context.next_type_helper_name(hint);\n\tconst effect_text = strip_yield_star(yield_text);\n\n\treturn {\n\t\tdeclaration: `function ${helper_name}() { return (${effect_text}); }`,\n\t\ttype: `${context.yield_success_name}<ReturnType<typeof ${helper_name}>> | undefined`,\n\t};\n}\n\nfunction strip_yield_star(yield_text: string): string {\n\treturn yield_text.replace(/^yield\\s*\\*\\s*/, \"\");\n}\n\nfunction wrap_yield_text(yield_text: string, context: ScriptLoweringContext): string {\n\treturn `yield* ${context.yieldable_name}(${strip_yield_star(yield_text)})`;\n}\n\nfunction wrap_yield_stars_in_node(\n\tnode: ts.Node,\n\tcontent: string,\n\tcontext: ScriptLoweringContext,\n): string {\n\tconst replacements: Array<{\n\t\tstart: number;\n\t\tend: number;\n\t\ttext: string;\n\t}> = [];\n\n\tcollect_yield_star_nodes(node, (yield_node) => {\n\t\tconst yield_text = slice_start(content, yield_node).trim();\n\n\t\treplacements.push({\n\t\t\tstart: yield_node.getStart(),\n\t\t\tend: yield_node.end,\n\t\t\ttext: wrap_yield_text(yield_text, context),\n\t\t});\n\t});\n\n\treplacements.sort((a, b) => b.start - a.start);\n\n\tconst offset = node.getFullStart();\n\tlet text = slice(content, node);\n\n\tfor (const replacement of replacements) {\n\t\ttext =\n\t\t\ttext.slice(0, replacement.start - offset) +\n\t\t\treplacement.text +\n\t\t\ttext.slice(replacement.end - offset);\n\t}\n\n\treturn text.trim();\n}\n\nfunction make_script_effect_id(expr: ts.Node, context: ScriptLoweringContext): string {\n\treturn `${context.filename}:${expr.getStart()}:${expr.end}`;\n}\n\nfunction is_assignment_operator(expr: ts.BinaryExpression): boolean {\n\treturn (\n\t\texpr.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&\n\t\texpr.operatorToken.kind <= ts.SyntaxKind.LastAssignment\n\t);\n}\n\nfunction is_top_level_rune_call(expr: ts.Expression): boolean {\n\tif (!ts.isCallExpression(expr)) {\n\t\treturn false;\n\t}\n\n\tconst callee = expr.expression;\n\n\tif (ts.isIdentifier(callee)) {\n\t\treturn callee.text.startsWith(\"$\");\n\t}\n\n\treturn (\n\t\tts.isPropertyAccessExpression(callee) &&\n\t\tts.isIdentifier(callee.expression) &&\n\t\tcallee.expression.text.startsWith(\"$\")\n\t);\n}\n\nfunction make_temp_hint(target: string): string {\n\tconst match = target.match(/[A-Za-z_$][\\w$]*$/);\n\n\treturn match?.[0] ?? \"assignment\";\n}\n\nfunction make_binding_hint(name: ts.BindingName): string {\n\tif (ts.isIdentifier(name)) {\n\t\treturn name.text;\n\t}\n\n\treturn \"destructure\";\n}\n\nfunction extract_yield_star_full_text(expr: ts.Expression, content: string): string {\n\tlet found: string | undefined;\n\n\tfind_yield_star_node(expr, (node) => {\n\t\tfound = slice_start(content, node).trim();\n\t});\n\n\treturn found ?? \"undefined\";\n}\n\nfunction make_effect_block(statements: string[], deps: string[]): EffectBlock {\n\treturn {\n\t\tstatements,\n\t\tdeps: [...new Set(deps)],\n\t};\n}\n\nfunction collect_deps(expr_text: string, excluded_names: readonly string[] = []): string[] {\n\tconst excluded = new Set(excluded_names);\n\n\treturn collect_free_identifiers(expr_text).filter(\n\t\t(identifier) => !identifier.startsWith(\"__SER___\") && !excluded.has(identifier),\n\t);\n}\n\nfunction collect_assignment_target_names(node: ts.Node): string[] {\n\tif (ts.isIdentifier(node)) {\n\t\treturn [node.text];\n\t}\n\n\tif (ts.isParenthesizedExpression(node)) {\n\t\treturn collect_assignment_target_names(node.expression);\n\t}\n\n\tif (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {\n\t\treturn collect_assignment_target_names(node.expression);\n\t}\n\n\tif (ts.isObjectLiteralExpression(node)) {\n\t\treturn node.properties.flatMap((property) => {\n\t\t\tif (ts.isShorthandPropertyAssignment(property)) {\n\t\t\t\treturn [property.name.text];\n\t\t\t}\n\n\t\t\tif (ts.isPropertyAssignment(property)) {\n\t\t\t\treturn collect_assignment_target_names(property.initializer);\n\t\t\t}\n\n\t\t\tif (ts.isSpreadAssignment(property)) {\n\t\t\t\treturn collect_assignment_target_names(property.expression);\n\t\t\t}\n\n\t\t\treturn [];\n\t\t});\n\t}\n\n\tif (ts.isArrayLiteralExpression(node)) {\n\t\treturn node.elements.flatMap((element) =>\n\t\t\tts.isSpreadElement(element)\n\t\t\t\t? collect_assignment_target_names(element.expression)\n\t\t\t\t: collect_assignment_target_names(element),\n\t\t);\n\t}\n\n\treturn [];\n}\n","import type {\n\tBlockRef,\n\tEffectBlock,\n\tRelocation,\n\tRuntimeImportBindings,\n\tScriptLoweringContext,\n\tScriptTransformResult,\n} from \"./types.ts\";\nimport {\n\tcollect_top_level_binding_names,\n\thas_local_import_binding,\n\tmake_imports,\n} from \"./imports.ts\";\nimport { collect_yield_star_nodes, contains_top_level_await } from \"./ast.ts\";\nimport { AwaitInEffectWorkError, PreprocessError } from \"$/errors.ts\";\nimport { make_runtime_block_with_bindings } from \"./runtime-block.ts\";\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\nimport { create_source_map, slice } from \"./source.ts\";\nimport { validate_rune_yield_usage } from \"./runes.ts\";\nimport { lower_statement } from \"./lower.ts\";\nimport type { MarkupTransformTarget } from \"$/markup/transform.ts\";\n\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\nexport type { BlockRef, ScriptTransformResult } from \"./types.ts\";\n\ninterface ScriptTransformOptions {\n\temit_types?: boolean;\n\ttarget?: MarkupTransformTarget;\n}\n\n/**\n * Transforms a `<script effect>` body by lowering top-level `yield*`\n * expressions into Svelte-compatible async rendering declarations or into\n * dependency-tracked `$effect` blocks for effectful statements.\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\tcontent: string,\n\tfilename: string,\n\toptions: ScriptTransformOptions = {},\n): ScriptTransformResult {\n\tlet temp_counter = 0;\n\tconst target = options.target ?? \"client\";\n\tconst is_server_target = target === \"server\";\n\n\tconst source_file = ts.createSourceFile(\n\t\tfilename,\n\t\tcontent,\n\t\tts.ScriptTarget.Latest,\n\t\ttrue,\n\t\tts.ScriptKind.TS,\n\t);\n\n\tconst magic = new MagicString(content);\n\tconst effect_blocks: EffectBlock[] = [];\n\tconst block_refs: BlockRef[] = [];\n\tconst top_level_binding_names = collect_top_level_binding_names(source_file);\n\tconst top_level_binding_names_set = new Set(top_level_binding_names);\n\tconst name_allocator = make_name_allocator(top_level_binding_names);\n\tconst emit_types = options.emit_types ?? true;\n\n\tlet has_effect = false;\n\tlet uses_dispatcher_promise = false;\n\tlet uses_yield_success_types = false;\n\n\t/** Phase 1: detect imports already provided by the user. */\n\tconst has_effect_import = has_local_import_binding(source_file, \"effect\", \"Effect\");\n\n\tconst has_dispatcher_import = has_local_import_binding(\n\t\tsource_file,\n\t\t\"svelte-effect-runtime/internal/generators\",\n\t\t\"get_dispatcher\",\n\t);\n\n\tconst has_untrack_import = has_local_import_binding(source_file, \"svelte\", \"untrack\");\n\tconst has_on_destroy_import = has_local_import_binding(source_file, \"svelte\", \"onDestroy\");\n\n\tconst reserve_runtime_import = (name: string) =>\n\t\ttop_level_binding_names_set.has(name)\n\t\t\t? name_allocator.reserve(make_generated_name(name, \"\"))\n\t\t\t: name_allocator.reserve(name);\n\n\tconst runtime_bindings: RuntimeImportBindings = {\n\t\tcancel: name_allocator.reserve(\"__SER___cancel\"),\n\t\tcomponent_scope_ref: reserve_runtime_import(\"ComponentScopeRef\"),\n\t\tdispatcher: has_dispatcher_import\n\t\t\t? \"get_dispatcher\"\n\t\t\t: reserve_runtime_import(\"get_dispatcher\"),\n\t\tdispatcher_value: name_allocator.reserve(\"__SER___dispatcher\"),\n\t\teffect: has_effect_import ? \"Effect\" : reserve_runtime_import(\"Effect\"),\n\t\ton_destroy: has_on_destroy_import ? \"onDestroy\" : reserve_runtime_import(\"onDestroy\"),\n\t\tprogram: name_allocator.reserve(\"__SER___program\"),\n\t\tscope: name_allocator.reserve(\"__SER___scope\"),\n\t\tuntrack: has_untrack_import ? \"untrack\" : reserve_runtime_import(\"untrack\"),\n\t\tyield_success: reserve_runtime_import(\"YieldSuccess\"),\n\t\tyieldable: reserve_runtime_import(\"ToEffect\"),\n\t};\n\n\tconst context: ScriptLoweringContext = {\n\t\tfilename,\n\t\tdispatcher_name: runtime_bindings.dispatcher,\n\t\tscope_name: runtime_bindings.scope,\n\t\teffect_name: runtime_bindings.effect,\n\t\temit_types,\n\t\tyield_success_name: runtime_bindings.yield_success,\n\t\tyieldable_name: runtime_bindings.yieldable,\n\t\tnext_helper_name(hint?: string) {\n\t\t\treturn name_allocator.reserve(make_generated_name(hint ?? \"helper\", \"\"));\n\t\t},\n\t\tnext_temp_name(hint?: string) {\n\t\t\tconst suffix = temp_counter === 0 ? \"\" : `_${temp_counter}`;\n\t\t\tconst name = make_generated_name(hint ?? String(temp_counter), suffix);\n\n\t\t\ttemp_counter += 1;\n\n\t\t\treturn name_allocator.reserve(name);\n\t\t},\n\t\tnext_type_helper_name(hint?: string) {\n\t\t\treturn name_allocator.reserve(make_generated_name(`type_${hint ?? \"effect\"}`, \"\"));\n\t\t},\n\t};\n\n\t/** Phase 2: lower every top-level statement that contains `yield*`. */\n\tfor (const stmt of source_file.statements) {\n\t\tvalidate_rune_yield_usage(stmt, content, filename);\n\t\tvalidate_script_yield_boundaries(stmt, content, filename);\n\n\t\tconst has_top_level_yield_star = contains_top_level_yield_star(stmt);\n\n\t\tif (!has_top_level_yield_star) {\n\t\t\tcontinue;\n\t\t}\n\n\t\thas_effect = true;\n\t\tconst lowered = lower_statement(stmt, content, context);\n\n\t\tif (lowered.effect_blocks.length > 0 && contains_top_level_await(stmt)) {\n\t\t\tconst text = slice(content, stmt);\n\t\t\tthrow new AwaitInEffectWorkError(filename, text);\n\t\t}\n\n\t\tmagic.overwrite(lowered.range.start, lowered.range.end, lowered.rewritten_text);\n\n\t\tif (lowered.temps.length > 0 || lowered.type_helpers?.length) {\n\t\t\tconst temp_declarations = lowered.temps.map((temp) =>\n\t\t\t\ttemp.type\n\t\t\t\t\t? `let ${temp.name} = $state<${temp.type}>(undefined);`\n\t\t\t\t\t: `let ${temp.name} = $state(undefined);`,\n\t\t\t);\n\n\t\t\tconst prefix = [...(lowered.type_helpers ?? []), ...temp_declarations].join(\"\\n\");\n\n\t\t\tmagic.appendLeft(lowered.range.start, prefix + \"\\n\");\n\t\t}\n\n\t\teffect_blocks.push(...lowered.effect_blocks);\n\t\tuses_dispatcher_promise ||= lowered.uses_dispatcher_promise ?? false;\n\t\tuses_yield_success_types ||= lowered.temps.some(\n\t\t\t(temp) => temp.type?.includes(runtime_bindings.yield_success) ?? false,\n\t\t);\n\t}\n\n\tif (!has_effect) {\n\t\tblock_refs.push({ id: filename, kind: \"script\" });\n\n\t\treturn { code: content, blocks: block_refs };\n\t}\n\n\t/** Phase 3: inject runtime imports after the last user import. */\n\tconst imports = make_imports(\n\t\thas_effect_import,\n\t\thas_dispatcher_import,\n\t\thas_untrack_import,\n\t\thas_on_destroy_import,\n\t\truntime_bindings,\n\t\t{\n\t\t\tneeds_dispatcher: effect_blocks.length > 0 || uses_dispatcher_promise,\n\t\t\tneeds_effect: effect_blocks.length > 0,\n\t\t\tneeds_untrack: effect_blocks.length > 0,\n\t\t\tneeds_on_destroy: !is_server_target,\n\t\t\tneeds_yield_success: uses_yield_success_types,\n\t\t\tneeds_yieldable: effect_blocks.length > 0 || uses_dispatcher_promise,\n\t\t\tneeds_scope_ref: true,\n\t\t},\n\t);\n\n\tconst last_import = [...source_file.statements].reverse().find(ts.isImportDeclaration);\n\n\t/**\n\t * The scope holder is created synchronously with the imports so it exists\n\t * before any top-level `await`, and disposal is registered through\n\t * `onDestroy` during component initialisation. Emitting both here keeps\n\t * them ahead of every lowered statement that references the scope.\n\t */\n\tconst scope_wiring = [\n\t\t`const ${runtime_bindings.scope} = new ${runtime_bindings.component_scope_ref}(${runtime_bindings.dispatcher});`,\n\t\t...(!is_server_target ? [`${runtime_bindings.on_destroy}(() => ${runtime_bindings.scope}.dispose());`] : []),\n\t].join(\"\\n\");\n\n\tconst injected = [imports, scope_wiring].filter(Boolean).join(\"\\n\");\n\n\tif (last_import) {\n\t\tmagic.appendRight(last_import.end, \"\\n\" + injected);\n\t} else {\n\t\tmagic.prepend(injected + \"\\n\");\n\t}\n\n\t/** Phase 4: append the runtime program blocks. */\n\n\tif (effect_blocks.length > 0) {\n\t\tconst runtime_block = make_runtime_block_with_bindings(effect_blocks, runtime_bindings);\n\n\t\tmagic.append(\"\\n\" + runtime_block);\n\t}\n\n\tblock_refs.push({ id: filename, kind: \"script\" });\n\n\tconst code = magic.toString();\n\n\treturn {\n\t\tcode,\n\t\tblocks: block_refs,\n\t\tmap: create_source_map(magic, filename),\n\t\trelocations: create_script_relocations(\n\t\t\tcontent,\n\t\t\tcode,\n\t\t\tsource_file,\n\t\t\truntime_bindings.yieldable,\n\t\t),\n\t};\n}\n\nfunction create_script_relocations(\n\tcontent: string,\n\tcode: string,\n\tsource_file: ts.SourceFile,\n\tyieldable_name: string,\n): Relocation[] {\n\tconst candidates = source_file.statements.flatMap((stmt) => {\n\t\tconst relocations: RelocationCandidate[] = [];\n\n\t\tif (contains_top_level_yield_star(stmt) && ts.isVariableStatement(stmt)) {\n\t\t\tfor (const decl of stmt.declarationList.declarations) {\n\t\t\t\tcollect_binding_relocation_candidates(decl.name, relocations);\n\t\t\t}\n\t\t}\n\n\t\tcollect_yield_star_nodes(stmt, (node) => {\n\t\t\tconst expression = ts.isBinaryExpression(node) ? node.right : node;\n\t\t\tconst text = content.slice(expression.getStart(), expression.end).trim();\n\n\t\t\trelocations.push({\n\t\t\t\toriginalStart: expression.getStart(),\n\t\t\t\toriginalEnd: expression.end,\n\t\t\t\ttext,\n\t\t\t\tmatch: \"yield_operand\",\n\t\t\t\twrapper: `${yieldable_name}(${text})`,\n\t\t\t});\n\t\t});\n\n\t\treturn relocations;\n\t});\n\n\tconst used_ranges: Array<{ start: number; end: number }> = [];\n\tconst search_cursors = new Map<string, number>();\n\n\treturn candidates.flatMap((candidate) => {\n\t\tconst search_key = make_relocation_search_key(candidate);\n\t\tconst generated_start = find_available_generated_text(\n\t\t\tcode,\n\t\t\tcandidate,\n\t\t\tused_ranges,\n\t\t\tsearch_cursors.get(search_key) ?? 0,\n\t\t);\n\n\t\tif (generated_start < 0) {\n\t\t\tsearch_cursors.set(search_key, code.length);\n\n\t\t\treturn [];\n\t\t}\n\n\t\tconst generated_end = generated_start + candidate.text.length;\n\t\tused_ranges.push({ start: generated_start, end: generated_end });\n\t\tsearch_cursors.set(search_key, generated_end);\n\n\t\treturn [\n\t\t\t{\n\t\t\t\toriginalStart: candidate.originalStart,\n\t\t\t\toriginalEnd: candidate.originalEnd,\n\t\t\t\tgeneratedStart: generated_start,\n\t\t\t\tgeneratedEnd: generated_end,\n\t\t\t},\n\t\t];\n\t});\n}\n\ntype RelocationCandidate = {\n\toriginalStart: number;\n\toriginalEnd: number;\n\ttext: string;\n\tmatch: \"exact\" | \"identifier\" | \"yield_operand\";\n\twrapper?: string;\n};\n\nfunction make_relocation_search_key(candidate: RelocationCandidate): string {\n\treturn `${candidate.match}:${candidate.text}`;\n}\n\nfunction collect_binding_relocation_candidates(\n\tname: ts.BindingName,\n\tcandidates: RelocationCandidate[],\n): void {\n\tif (ts.isIdentifier(name)) {\n\t\tcandidates.push({\n\t\t\toriginalStart: name.getStart(),\n\t\t\toriginalEnd: name.end,\n\t\t\ttext: name.text,\n\t\t\tmatch: \"identifier\",\n\t\t});\n\n\t\treturn;\n\t}\n\n\tfor (const element of name.elements) {\n\t\tif (ts.isOmittedExpression(element)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tcollect_binding_relocation_candidates(element.name, candidates);\n\t}\n}\n\nfunction find_available_generated_text(\n\tcode: string,\n\tcandidate: RelocationCandidate,\n\tused_ranges: Array<{ start: number; end: number }>,\n\tsearch_start: number,\n): number {\n\twhile (search_start < code.length) {\n\t\tconst search_text =\n\t\t\tcandidate.match === \"yield_operand\" ? candidate.wrapper : candidate.text;\n\n\t\tif (!search_text) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst index = code.indexOf(search_text, search_start);\n\n\t\tif (index < 0) {\n\t\t\treturn -1;\n\t\t}\n\n\t\tconst operand_offset =\n\t\t\tcandidate.match === \"yield_operand\" && candidate.wrapper\n\t\t\t\t? candidate.wrapper.indexOf(candidate.text)\n\t\t\t\t: 0;\n\t\tconst start = index + Math.max(operand_offset, 0);\n\t\tconst end = start + candidate.text.length;\n\t\tconst overlaps_used_range = used_ranges.some(\n\t\t\t(range) => start < range.end && end > range.start,\n\t\t);\n\t\tconst is_text_match =\n\t\t\tcandidate.match !== \"identifier\" || is_identifier_text_match(code, start, end);\n\n\t\tif (!overlaps_used_range && is_text_match) {\n\t\t\treturn start;\n\t\t}\n\n\t\tsearch_start = candidate.match === \"identifier\" ? index + 1 : index + search_text.length;\n\t}\n\n\treturn -1;\n}\n\nfunction is_identifier_text_match(code: string, start: number, end: number): boolean {\n\tconst before = start === 0 ? 0 : code.charCodeAt(start - 1);\n\tconst after = end >= code.length ? 0 : code.charCodeAt(end);\n\n\treturn !is_identifier_part(before) && !is_identifier_part(after);\n}\n\nfunction is_identifier_part(char_code: number): boolean {\n\treturn (\n\t\t(char_code >= 65 && char_code <= 90) ||\n\t\t(char_code >= 97 && char_code <= 122) ||\n\t\t(char_code >= 48 && char_code <= 57) ||\n\t\tchar_code === 36 ||\n\t\tchar_code === 95\n\t);\n}\n\nfunction validate_script_yield_boundaries(\n\tstmt: ts.Statement,\n\tcontent: string,\n\tfilename: string,\n): void {\n\tconst bad_member = find_class_member_with_yield_star(stmt);\n\n\tif (!bad_member) {\n\t\treturn;\n\t}\n\n\tthrow new PreprocessError(\n\t\t[\n\t\t\t`[ASYNC_EFFECT_IN_CLASS_MEMBER]: ${filename}: yield* cannot be used inside class members.`,\n\t\t\t`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\t\t\t\"\",\n\t\t\t\"Problematic member:\",\n\t\t\tslice(content, bad_member),\n\t\t].join(\"\\n\"),\n\t\tfilename,\n\t);\n}\n\nfunction find_class_member_with_yield_star(stmt: ts.Statement): ts.Node | undefined {\n\tlet found: ts.Node | undefined;\n\n\tfunction visit(node: ts.Node): void {\n\t\tif (found) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\tts.isPropertyDeclaration(node) &&\n\t\t\tnode.initializer &&\n\t\t\tcontains_top_level_yield_star(node.initializer)\n\t\t) {\n\t\t\tfound = node;\n\t\t\treturn;\n\t\t}\n\n\t\tnode.forEachChild(visit);\n\t}\n\n\tvisit(stmt);\n\n\treturn found;\n}\n\nfunction make_name_allocator(initial_names: readonly string[]): {\n\treserve(name: string): string;\n} {\n\tconst used_names = new Set(initial_names);\n\n\treturn {\n\t\treserve(name: string): string {\n\t\t\tlet candidate = name;\n\t\t\tlet suffix = 1;\n\n\t\t\twhile (used_names.has(candidate)) {\n\t\t\t\tcandidate = `${name}_${suffix}`;\n\t\t\t\tsuffix += 1;\n\t\t\t}\n\n\t\t\tused_names.add(candidate);\n\n\t\t\treturn candidate;\n\t\t},\n\t};\n}\n\nfunction make_generated_name(hint: string, suffix: string): string {\n\tconst normalized_hint = hint.replace(/[^A-Za-z0-9_$]/g, \"_\");\n\tconst safe_hint = /^[A-Za-z_$]/.test(normalized_hint)\n\t\t? normalized_hint\n\t\t: `temp_${normalized_hint}`;\n\n\treturn `__SER___${safe_hint}${suffix}`;\n}\n","import { type MarkupTransformTarget, transform_markup_effect } from \"$/markup/transform.ts\";\nimport { scan_svelte_effect_source } from \"$/compiler/source-scan.ts\";\nimport { transform_script_effect } from \"$/script-transform/index.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\t/** Transformed Svelte source. */\n\tcode: string;\n}\n\n/**\n * Options accepted by the direct whole-file Svelte transform.\n *\n * @example\n * ```ts\n * const options: SvelteTransformOptions = { target: \"client\" };\n * ```\n *\n * @since 2.5.0\n */\nexport interface SvelteTransformOptions {\n\t/** Markup emission target passed through to the markup transform. */\n\ttarget?: MarkupTransformTarget;\n}\n\n/**\n * Lowers SER syntax in a complete Svelte component without using Svelte's\n * 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 * @param options - Optional target configuration for markup lowering.\n * @returns The transformed component source.\n */\nexport function transform_svelte_effect(\n\tcontent: string,\n\tfilename = \"unknown.svelte\",\n\toptions: SvelteTransformOptions = {},\n): SvelteTransformResult {\n\tconst scan = scan_svelte_effect_source(content, filename);\n\tconst script = scan.effect_script;\n\n\tlet combined = content;\n\n\tif (script) {\n\t\tconst effect_attribute = script.effect_attribute;\n\t\tconst effect_attribute_start = effect_attribute?.start ?? script.opening_tag_end;\n\t\tconst effect_attribute_end = effect_attribute?.end ?? script.opening_tag_end;\n\t\tconst result = transform_script_effect(script.text, filename, {\n\t\t\temit_types: script.is_typescript,\n\t\t\ttarget: options.target ?? \"client\",\n\t\t});\n\n\t\tcombined =\n\t\t\tcontent.slice(0, effect_attribute_start) +\n\t\t\tcontent.slice(effect_attribute_end, script.opening_tag_end) +\n\t\t\tresult.code +\n\t\t\tcontent.slice(script.closing_tag_start);\n\t}\n\n\tconst markup_options = options.target === undefined ? {} : { target: options.target };\n\tconst result = transform_markup_effect(combined, filename, markup_options);\n\n\treturn { code: result.code };\n}\n\nexport {\n\ttype MarkupTransformOptions,\n\ttype MarkupTransformResult,\n\ttype MarkupTransformTarget,\n\ttransform_markup_effect,\n} from \"$/markup/transform.ts\";\n\nexport {\n\ttype BlockRef,\n\ttype ScriptTransformResult,\n\ttransform_script_effect,\n} from \"$/script-transform/index.ts\";\n"],"mappings":"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"}
|
|
@@ -1,51 +1,5 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
|
-
/**
|
|
3
|
-
* Checks whether a node is a `yield*` binary expression.
|
|
4
|
-
*
|
|
5
|
-
* @since 2.0.0
|
|
6
|
-
* @param node - TypeScript AST node to check.
|
|
7
|
-
* @returns Whether the node represents `yield * operand`.
|
|
8
|
-
*/
|
|
9
2
|
export declare function is_yield_star_expression(node: ts.Node): boolean;
|
|
10
|
-
/**
|
|
11
|
-
* Checks whether a node owns its own yield semantics.
|
|
12
|
-
*
|
|
13
|
-
* @since 2.0.0
|
|
14
|
-
* @param node - TypeScript AST node to check.
|
|
15
|
-
* @returns Whether traversal should stop at this function boundary.
|
|
16
|
-
*/
|
|
17
|
-
export declare function is_function_boundary_node(node: ts.Node): boolean;
|
|
18
|
-
/**
|
|
19
|
-
* Returns `true` if the node tree contains a top-level `await`.
|
|
20
|
-
*
|
|
21
|
-
* @since 2.0.0
|
|
22
|
-
* @param node - Root node to search.
|
|
23
|
-
* @returns Whether a top-level await expression was found.
|
|
24
|
-
*/
|
|
25
3
|
export declare function contains_top_level_await(node: ts.Node): boolean;
|
|
26
|
-
/**
|
|
27
|
-
* Collects top-level `yield*` nodes under an expression.
|
|
28
|
-
*
|
|
29
|
-
* @since 2.0.0
|
|
30
|
-
* @param node - Root node to search.
|
|
31
|
-
* @param on_found - Callback invoked for each matching yield node.
|
|
32
|
-
* @returns Nothing.
|
|
33
|
-
*/
|
|
34
4
|
export declare function collect_yield_star_nodes(node: ts.Node, on_found: (node: ts.Node) => void): void;
|
|
35
|
-
/**
|
|
36
|
-
* Finds the first top-level `yield*` expression below a node.
|
|
37
|
-
*
|
|
38
|
-
* @since 2.0.0
|
|
39
|
-
* @param node - Root node to search.
|
|
40
|
-
* @param on_found - Callback invoked with the first matching node.
|
|
41
|
-
* @returns Nothing.
|
|
42
|
-
*/
|
|
43
5
|
export declare function find_yield_star_node(node: ts.Node, on_found: (node: ts.Node) => void): void;
|
|
44
|
-
/**
|
|
45
|
-
* Extracts identifier names from a TypeScript binding name.
|
|
46
|
-
*
|
|
47
|
-
* @since 2.0.0
|
|
48
|
-
* @param name - Binding name node to flatten.
|
|
49
|
-
* @returns Identifier names from identifiers and destructuring patterns.
|
|
50
|
-
*/
|
|
51
|
-
export declare function extract_binding_names(name: ts.BindingName): string[];
|
|
@@ -4,48 +4,12 @@ interface RuntimeImportOptions {
|
|
|
4
4
|
needs_dispatcher?: boolean;
|
|
5
5
|
needs_effect?: boolean;
|
|
6
6
|
needs_untrack?: boolean;
|
|
7
|
+
needs_on_destroy?: boolean;
|
|
7
8
|
needs_yield_success?: boolean;
|
|
8
9
|
needs_yieldable?: boolean;
|
|
10
|
+
needs_scope_ref?: boolean;
|
|
9
11
|
}
|
|
10
|
-
|
|
11
|
-
* Builds the import statements injected by the script transform.
|
|
12
|
-
*
|
|
13
|
-
* @since 2.0.0
|
|
14
|
-
* @param has_effect_import - Whether the user already imports `Effect`.
|
|
15
|
-
* @param has_dispatcher_import - Whether the user already imports
|
|
16
|
-
* `get_dispatcher`.
|
|
17
|
-
* @param has_untrack_import - Whether the user already imports `untrack`.
|
|
18
|
-
* @param bindings - Local names reserved for generated runtime helpers.
|
|
19
|
-
* @param options - Runtime helper imports required by this transformed script.
|
|
20
|
-
* @returns Newline-separated import statements to inject.
|
|
21
|
-
*/
|
|
22
|
-
export declare function make_imports(has_effect_import: boolean, has_dispatcher_import: boolean, has_untrack_import: boolean, bindings?: RuntimeImportBindings, options?: RuntimeImportOptions): string;
|
|
23
|
-
/**
|
|
24
|
-
* Checks whether a source file imports a local binding from a module.
|
|
25
|
-
*
|
|
26
|
-
* @since 2.0.0
|
|
27
|
-
* @param source_file - Parsed TypeScript source file to inspect.
|
|
28
|
-
* @param module_name - Module specifier to match.
|
|
29
|
-
* @param local_name - Local binding name to look for.
|
|
30
|
-
* @returns Whether that binding is already locally available.
|
|
31
|
-
*/
|
|
12
|
+
export declare function make_imports(has_effect_import: boolean, has_dispatcher_import: boolean, has_untrack_import: boolean, has_on_destroy_import: boolean, bindings?: RuntimeImportBindings, options?: RuntimeImportOptions): string;
|
|
32
13
|
export declare function has_local_import_binding(source_file: ts.SourceFile, module_name: string, local_name: string): boolean;
|
|
33
|
-
/**
|
|
34
|
-
* Checks whether a source file already has any top-level binding with a local
|
|
35
|
-
* name.
|
|
36
|
-
*
|
|
37
|
-
* @since 2.4.2
|
|
38
|
-
* @param source_file - Parsed TypeScript source file to inspect.
|
|
39
|
-
* @param local_name - Local binding name to look for.
|
|
40
|
-
* @returns Whether that local name is already declared in the file.
|
|
41
|
-
*/
|
|
42
|
-
export declare function has_top_level_binding(source_file: ts.SourceFile, local_name: string): boolean;
|
|
43
|
-
/**
|
|
44
|
-
* Collects every local binding declared at module top level.
|
|
45
|
-
*
|
|
46
|
-
* @since 2.4.2
|
|
47
|
-
* @param source_file - Parsed TypeScript source file to inspect.
|
|
48
|
-
* @returns Top-level names declared by imports, declarations, and variables.
|
|
49
|
-
*/
|
|
50
14
|
export declare function collect_top_level_binding_names(source_file: ts.SourceFile): string[];
|
|
51
15
|
export {};
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { ScriptTransformResult } from "./types.js";
|
|
2
|
+
import type { MarkupTransformTarget } from "../markup/transform.js";
|
|
2
3
|
export type { BlockRef, ScriptTransformResult } from "./types.js";
|
|
3
4
|
interface ScriptTransformOptions {
|
|
4
5
|
emit_types?: boolean;
|
|
6
|
+
target?: MarkupTransformTarget;
|
|
5
7
|
}
|
|
6
8
|
/**
|
|
7
9
|
* Transforms a `<script effect>` body by lowering top-level `yield*`
|
|
@@ -1,12 +1,3 @@
|
|
|
1
1
|
import type { LoweredStatement, ScriptLoweringContext } from "./types.js";
|
|
2
2
|
import ts from "typescript";
|
|
3
|
-
/**
|
|
4
|
-
* Delegates a statement to the correct lowerer based on syntax kind.
|
|
5
|
-
*
|
|
6
|
-
* @since 2.0.0
|
|
7
|
-
* @param stmt - Statement to lower.
|
|
8
|
-
* @param content - Original source text.
|
|
9
|
-
* @param context - Lowering services for this transform pass.
|
|
10
|
-
* @returns Lowered statement descriptor.
|
|
11
|
-
*/
|
|
12
3
|
export declare function lower_statement(stmt: ts.Statement, content: string, context: ScriptLoweringContext): LoweredStatement;
|
|
@@ -1,12 +1,2 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
|
-
/**
|
|
3
|
-
* Validates that `yield*` only appears in rune positions the script-effect
|
|
4
|
-
* transform can lower without changing the rune's normal Svelte contract.
|
|
5
|
-
*
|
|
6
|
-
* @since 2.0.0
|
|
7
|
-
* @param node - AST node to scan.
|
|
8
|
-
* @param content - Original script source used for diagnostics.
|
|
9
|
-
* @param filename - Source filename used for diagnostics.
|
|
10
|
-
* @returns Nothing.
|
|
11
|
-
*/
|
|
12
2
|
export declare function validate_rune_yield_usage(node: ts.Node, content: string, filename: string): void;
|
|
@@ -1,19 +1,2 @@
|
|
|
1
1
|
import type { EffectBlock, RuntimeImportBindings } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Builds the runtime blocks appended to lowered script effect code.
|
|
4
|
-
*
|
|
5
|
-
* @since 2.0.0
|
|
6
|
-
* @param blocks - Effect bodies and dependency reads to emit.
|
|
7
|
-
* @returns Full `$effect` blocks that fork generated `Effect.gen` programs.
|
|
8
|
-
*/
|
|
9
|
-
export declare function make_runtime_block(blocks: EffectBlock[]): string;
|
|
10
|
-
/**
|
|
11
|
-
* Builds the runtime blocks appended to lowered script effect code with
|
|
12
|
-
* explicit runtime import bindings.
|
|
13
|
-
*
|
|
14
|
-
* @since 2.4.2
|
|
15
|
-
* @param blocks - Effect bodies and dependency reads to emit.
|
|
16
|
-
* @param bindings - Runtime binding names available in the generated code.
|
|
17
|
-
* @returns Full `$effect` blocks that fork generated `Effect.gen` programs.
|
|
18
|
-
*/
|
|
19
2
|
export declare function make_runtime_block_with_bindings(blocks: EffectBlock[], bindings: RuntimeImportBindings): string;
|
|
@@ -1,29 +1,5 @@
|
|
|
1
1
|
import type MagicString from "magic-string";
|
|
2
2
|
import type ts from "typescript";
|
|
3
|
-
/**
|
|
4
|
-
* Creates a source map from transformed script back to the original block.
|
|
5
|
-
*
|
|
6
|
-
* @since 2.0.0
|
|
7
|
-
* @param magic - MagicString instance holding the transformed source.
|
|
8
|
-
* @param filename - Source filename used for the source map entry.
|
|
9
|
-
* @returns A plain source map object.
|
|
10
|
-
*/
|
|
11
3
|
export declare function create_source_map(magic: MagicString, filename: string): Record<string, unknown>;
|
|
12
|
-
/**
|
|
13
|
-
* Slices a substring matching a node's full source range.
|
|
14
|
-
*
|
|
15
|
-
* @since 2.0.0
|
|
16
|
-
* @param content - Original source text.
|
|
17
|
-
* @param node - AST node whose full range should be extracted.
|
|
18
|
-
* @returns Source text including leading trivia.
|
|
19
|
-
*/
|
|
20
4
|
export declare function slice(content: string, node: ts.Node): string;
|
|
21
|
-
/**
|
|
22
|
-
* Slices a substring matching a node's source range without leading trivia.
|
|
23
|
-
*
|
|
24
|
-
* @since 2.0.0
|
|
25
|
-
* @param content - Original source text.
|
|
26
|
-
* @param node - AST node whose non-trivia range should be extracted.
|
|
27
|
-
* @returns Source text excluding leading trivia.
|
|
28
|
-
*/
|
|
29
5
|
export declare function slice_start(content: string, node: ts.Node): string;
|
|
@@ -41,60 +41,16 @@ export interface ScriptTransformResult {
|
|
|
41
41
|
/** Offset ranges that preserve hoverable moved source spans. */
|
|
42
42
|
relocations?: Relocation[];
|
|
43
43
|
}
|
|
44
|
-
/**
|
|
45
|
-
* Offset mapping between original script code and generated helper code.
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* ```ts
|
|
49
|
-
* const relocation: Relocation = {
|
|
50
|
-
* originalStart: 10,
|
|
51
|
-
* originalEnd: 28,
|
|
52
|
-
* generatedStart: 64,
|
|
53
|
-
* generatedEnd: 82,
|
|
54
|
-
* };
|
|
55
|
-
* ```
|
|
56
|
-
*
|
|
57
|
-
* @since 3.2.3
|
|
58
|
-
*/
|
|
59
44
|
export interface Relocation {
|
|
60
45
|
originalStart: number;
|
|
61
46
|
originalEnd: number;
|
|
62
47
|
generatedStart: number;
|
|
63
48
|
generatedEnd: number;
|
|
64
49
|
}
|
|
65
|
-
/**
|
|
66
|
-
* Internal descriptor for a single `$state` temp variable that will be
|
|
67
|
-
* emitted at component scope before the rewritten statement.
|
|
68
|
-
*
|
|
69
|
-
* @example
|
|
70
|
-
* ```ts
|
|
71
|
-
* const temp: TempBinding = {
|
|
72
|
-
* name: "__SER___user",
|
|
73
|
-
* type: "Effect.Success<typeof user>",
|
|
74
|
-
* };
|
|
75
|
-
* ```
|
|
76
|
-
*
|
|
77
|
-
* @since 2.0.0
|
|
78
|
-
*/
|
|
79
50
|
export interface TempBinding {
|
|
80
51
|
name: string;
|
|
81
52
|
type?: string;
|
|
82
53
|
}
|
|
83
|
-
/**
|
|
84
|
-
* Describes how a single statement was lowered.
|
|
85
|
-
*
|
|
86
|
-
* @example
|
|
87
|
-
* ```ts
|
|
88
|
-
* const lowered: LoweredStatement = {
|
|
89
|
-
* temps: [],
|
|
90
|
-
* rewritten_text: "const user = __SER___dispatcher.value(...);",
|
|
91
|
-
* effect_blocks: [],
|
|
92
|
-
* range: { start: 0, end: 26 },
|
|
93
|
-
* };
|
|
94
|
-
* ```
|
|
95
|
-
*
|
|
96
|
-
* @since 2.0.0
|
|
97
|
-
*/
|
|
98
54
|
export interface LoweredStatement {
|
|
99
55
|
/** `$state` bindings to emit at component scope. */
|
|
100
56
|
temps: TempBinding[];
|
|
@@ -112,69 +68,25 @@ export interface LoweredStatement {
|
|
|
112
68
|
end: number;
|
|
113
69
|
};
|
|
114
70
|
}
|
|
115
|
-
/**
|
|
116
|
-
* Describes a generated script effect body and the identifiers it reads
|
|
117
|
-
* synchronously for Svelte dependency tracking.
|
|
118
|
-
*
|
|
119
|
-
* @example
|
|
120
|
-
* ```ts
|
|
121
|
-
* const block: EffectBlock = {
|
|
122
|
-
* statements: ["const user = yield* load_user(id);"],
|
|
123
|
-
* deps: ["id"],
|
|
124
|
-
* };
|
|
125
|
-
* ```
|
|
126
|
-
*
|
|
127
|
-
* @since 2.0.0
|
|
128
|
-
*/
|
|
129
71
|
export interface EffectBlock {
|
|
130
72
|
/** Statements to emit inside the generated `Effect.gen` body. */
|
|
131
73
|
statements: string[];
|
|
132
74
|
/** Identifier reads that should rerun this block when they change. */
|
|
133
75
|
deps: string[];
|
|
134
76
|
}
|
|
135
|
-
/**
|
|
136
|
-
* Describes how a single expression was lowered.
|
|
137
|
-
*
|
|
138
|
-
* @example
|
|
139
|
-
* ```ts
|
|
140
|
-
* const expression: LoweredExpression = {
|
|
141
|
-
* temps: [],
|
|
142
|
-
* rewritten_expr: "__SER___dispatcher.value(...)",
|
|
143
|
-
* effect_blocks: [],
|
|
144
|
-
* };
|
|
145
|
-
* ```
|
|
146
|
-
*
|
|
147
|
-
* @since 2.0.0
|
|
148
|
-
*/
|
|
149
77
|
export interface LoweredExpression {
|
|
150
78
|
temps: TempBinding[];
|
|
151
|
-
type_helpers
|
|
79
|
+
type_helpers: string[];
|
|
152
80
|
rewritten_expr: string;
|
|
153
81
|
effect_blocks: EffectBlock[];
|
|
154
82
|
}
|
|
155
|
-
/**
|
|
156
|
-
* Stateful services used while lowering one script block.
|
|
157
|
-
*
|
|
158
|
-
* @example
|
|
159
|
-
* ```ts
|
|
160
|
-
* const context: ScriptLoweringContext = {
|
|
161
|
-
* filename: "App.svelte",
|
|
162
|
-
* dispatcher_name: "get_dispatcher",
|
|
163
|
-
* effect_name: "Effect",
|
|
164
|
-
* emit_types: true,
|
|
165
|
-
* next_helper_name: (hint = "helper") => hint,
|
|
166
|
-
* next_temp_name: (hint = "temp") => hint,
|
|
167
|
-
* next_type_helper_name: (hint = "type") => hint,
|
|
168
|
-
* };
|
|
169
|
-
* ```
|
|
170
|
-
*
|
|
171
|
-
* @since 2.0.0
|
|
172
|
-
*/
|
|
173
83
|
export interface ScriptLoweringContext {
|
|
174
84
|
/** Source filename used for stable generated runtime ids. */
|
|
175
85
|
filename: string;
|
|
176
86
|
/** Binding name used for the dispatcher factory in generated code. */
|
|
177
87
|
dispatcher_name: string;
|
|
88
|
+
/** Binding name used for the component's Effect scope in generated code. */
|
|
89
|
+
scope_name: string;
|
|
178
90
|
/** Binding name used for the Effect namespace in generated code. */
|
|
179
91
|
effect_name: string;
|
|
180
92
|
/** Binding name used for the yieldable normalization helper. */
|
|
@@ -183,45 +95,10 @@ export interface ScriptLoweringContext {
|
|
|
183
95
|
yield_success_name: string;
|
|
184
96
|
/** Whether generated state placeholders should carry TypeScript types. */
|
|
185
97
|
emit_types: boolean;
|
|
186
|
-
/**
|
|
187
|
-
* Reserves a generated helper identifier.
|
|
188
|
-
*
|
|
189
|
-
* @param hint - Optional readable stem for the generated identifier.
|
|
190
|
-
* @returns A collision-free helper identifier.
|
|
191
|
-
*/
|
|
192
98
|
next_helper_name(hint?: string): string;
|
|
193
|
-
/**
|
|
194
|
-
* Reserves a generated `$state` temporary identifier.
|
|
195
|
-
*
|
|
196
|
-
* @param hint - Optional readable stem for the generated identifier.
|
|
197
|
-
* @returns A collision-free temporary identifier.
|
|
198
|
-
*/
|
|
199
99
|
next_temp_name(hint?: string): string;
|
|
200
|
-
/**
|
|
201
|
-
* Reserves a generated type-helper identifier.
|
|
202
|
-
*
|
|
203
|
-
* @param hint - Optional readable stem for the generated identifier.
|
|
204
|
-
* @returns A collision-free type-helper identifier.
|
|
205
|
-
*/
|
|
206
100
|
next_type_helper_name(hint?: string): string;
|
|
207
101
|
}
|
|
208
|
-
/**
|
|
209
|
-
* Runtime import bindings selected for generated script effect code.
|
|
210
|
-
*
|
|
211
|
-
* @example
|
|
212
|
-
* ```ts
|
|
213
|
-
* const bindings: RuntimeImportBindings = {
|
|
214
|
-
* effect: "Effect",
|
|
215
|
-
* dispatcher: "get_dispatcher",
|
|
216
|
-
* dispatcher_value: "__SER___dispatcher",
|
|
217
|
-
* program: "__SER___program",
|
|
218
|
-
* cancel: "__SER___cancel",
|
|
219
|
-
* untrack: "untrack",
|
|
220
|
-
* };
|
|
221
|
-
* ```
|
|
222
|
-
*
|
|
223
|
-
* @since 2.4.2
|
|
224
|
-
*/
|
|
225
102
|
export interface RuntimeImportBindings {
|
|
226
103
|
/** Binding name used for the Effect namespace in generated code. */
|
|
227
104
|
effect: string;
|
|
@@ -235,6 +112,12 @@ export interface RuntimeImportBindings {
|
|
|
235
112
|
cancel: string;
|
|
236
113
|
/** Binding name used for Svelte's untrack helper. */
|
|
237
114
|
untrack: string;
|
|
115
|
+
/** Binding name used for Svelte's onDestroy lifecycle hook. */
|
|
116
|
+
on_destroy: string;
|
|
117
|
+
/** Binding name used for the component's Effect scope local. */
|
|
118
|
+
scope: string;
|
|
119
|
+
/** Binding name used for the lazily-created component scope holder. */
|
|
120
|
+
component_scope_ref: string;
|
|
238
121
|
/** Binding name used for the yieldable normalization helper. */
|
|
239
122
|
yieldable: string;
|
|
240
123
|
/** Binding name used for yieldable success type extraction. */
|