svelte-effect-runtime 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/.dist/chunks/{client-BYhNKK1i.js → client-i7LwWCpT.js} +3 -3
  2. package/.dist/chunks/client-i7LwWCpT.js.map +1 -0
  3. package/.dist/chunks/descriptors-OS4VfJuW.js.map +1 -1
  4. package/.dist/chunks/{dispatcher-5WSjtyXR.js → dispatcher-BX6J0tQV.js} +3 -3
  5. package/.dist/chunks/dispatcher-BX6J0tQV.js.map +1 -0
  6. package/.dist/chunks/{dispatcher-BnitG7p3.js → dispatcher-D9PG87PW.js} +3 -2
  7. package/.dist/chunks/dispatcher-D9PG87PW.js.map +1 -0
  8. package/.dist/chunks/{errors-DppSJ83S.js → errors-Buz9cLGF.js} +55 -2
  9. package/.dist/chunks/errors-Buz9cLGF.js.map +1 -0
  10. package/.dist/chunks/{runtime-CPbQxe4W.js → runtime-L7xbXCiW.js} +4 -4
  11. package/.dist/chunks/runtime-L7xbXCiW.js.map +1 -0
  12. package/.dist/chunks/{transform-DHUCirwV.js → transform-B5T5TUcJ.js} +132 -43
  13. package/.dist/chunks/transform-B5T5TUcJ.js.map +1 -0
  14. package/.dist/chunks/vite-DiAwz7jc.js +465 -0
  15. package/.dist/chunks/vite-DiAwz7jc.js.map +1 -0
  16. package/.dist/detect.js.map +1 -1
  17. package/.dist/diagnostics.d.ts +21 -0
  18. package/.dist/dispatcher.js +1 -1
  19. package/.dist/errors.d.ts +39 -0
  20. package/.dist/internal/generators.js +2 -2
  21. package/.dist/internal/remote-client.js +1 -1
  22. package/.dist/markup/promise.js +1 -1
  23. package/.dist/markup/promise.js.map +1 -1
  24. package/.dist/markup/run.js +1 -1
  25. package/.dist/markup/run.js.map +1 -1
  26. package/.dist/markup/transform/emit.d.ts +2 -2
  27. package/.dist/markup/transform.js +1 -1
  28. package/.dist/markup/value.js +1 -1
  29. package/.dist/markup/value.js.map +1 -1
  30. package/.dist/mod.d.ts +1 -2
  31. package/.dist/mod.js +4 -5
  32. package/.dist/mod.js.map +1 -1
  33. package/.dist/remote/client.js +1 -1
  34. package/.dist/remote/server.js +1 -1
  35. package/.dist/remote/server.js.map +1 -1
  36. package/.dist/remote/shared.js.map +1 -1
  37. package/.dist/runtime/transform.js +45 -230
  38. package/.dist/runtime/transform.js.map +1 -1
  39. package/.dist/script-transform/index.d.ts +3 -3
  40. package/.dist/script-transform/runes.d.ts +0 -12
  41. package/.dist/script-transform/types.d.ts +1 -1
  42. package/.dist/server/index.d.ts +1 -0
  43. package/.dist/server/runtime.d.ts +13 -0
  44. package/.dist/server.js +2 -2
  45. package/.dist/server.js.map +1 -1
  46. package/.dist/vite.d.ts +3 -3
  47. package/.dist/vite.js +1 -145
  48. package/README.md +5 -5
  49. package/package.json +2 -7
  50. package/.dist/chunks/client-BYhNKK1i.js.map +0 -1
  51. package/.dist/chunks/dispatcher-5WSjtyXR.js.map +0 -1
  52. package/.dist/chunks/dispatcher-BnitG7p3.js.map +0 -1
  53. package/.dist/chunks/errors-DppSJ83S.js.map +0 -1
  54. package/.dist/chunks/grammars-i4CSRxWg.js +0 -181
  55. package/.dist/chunks/grammars-i4CSRxWg.js.map +0 -1
  56. package/.dist/chunks/runtime-CPbQxe4W.js.map +0 -1
  57. package/.dist/chunks/transform-DHUCirwV.js.map +0 -1
  58. package/.dist/grammars/textmate.d.ts +0 -105
  59. package/.dist/grammars/tree-sitter.d.ts +0 -22
  60. package/.dist/grammars.d.ts +0 -2
  61. package/.dist/grammars.js +0 -2
  62. package/.dist/vite.js.map +0 -1
@@ -1,47 +1,8 @@
1
- import { d as PreprocessError, n as AsyncEffectInSyncRuneError, r as AwaitInEffectWorkError } from "../chunks/errors-DppSJ83S.js";
2
- import { a as find_yield_star_node, c as collect_top_level_binding_names, i as extract_binding_names, l as has_local_import_binding, n as collect_yield_star_nodes, o as is_yield_star_expression, r as contains_top_level_await, s as collect_free_identifiers, t as transform_markup_effect, u as make_imports } from "../chunks/transform-DHUCirwV.js";
1
+ import { d as PreprocessError, r as AwaitInEffectWorkError } from "../chunks/errors-Buz9cLGF.js";
2
+ import { a as is_yield_star_expression, c as slice, d as collect_top_level_binding_names, f as has_local_import_binding, i as find_yield_star_node, l as slice_start, n as collect_yield_star_nodes, o as validate_rune_yield_usage, p as make_imports, r as contains_top_level_await, s as create_source_map, t as transform_markup_effect, u as collect_free_identifiers } from "../chunks/transform-B5T5TUcJ.js";
3
3
  import { contains_top_level_yield_star } from "../detect.js";
4
4
  import MagicString from "magic-string";
5
5
  import ts from "typescript";
6
- //#region src/script-transform/source.ts
7
- /**
8
- * Creates a source map from transformed script back to the original block.
9
- *
10
- * @since 2.0.0
11
- * @param magic - MagicString instance holding the transformed source.
12
- * @param filename - Source filename used for the source map entry.
13
- * @returns A plain source map object.
14
- */
15
- function create_source_map(magic, filename) {
16
- return magic.generateMap({
17
- hires: true,
18
- includeContent: true,
19
- source: filename
20
- });
21
- }
22
- /**
23
- * Slices a substring matching a node's full source range.
24
- *
25
- * @since 2.0.0
26
- * @param content - Original source text.
27
- * @param node - AST node whose full range should be extracted.
28
- * @returns Source text including leading trivia.
29
- */
30
- function slice(content, node) {
31
- return content.slice(node.getFullStart(), node.end);
32
- }
33
- /**
34
- * Slices a substring matching a node's source range without leading trivia.
35
- *
36
- * @since 2.0.0
37
- * @param content - Original source text.
38
- * @param node - AST node whose non-trivia range should be extracted.
39
- * @returns Source text excluding leading trivia.
40
- */
41
- function slice_start(content, node) {
42
- return content.slice(node.getStart(), node.end);
43
- }
44
- //#endregion
45
6
  //#region src/script-transform/runtime-block.ts
46
7
  /**
47
8
  * Builds the runtime blocks appended to lowered script effect code with
@@ -80,81 +41,6 @@ function merge_effect_blocks(blocks) {
80
41
  };
81
42
  }
82
43
  //#endregion
83
- //#region src/script-transform/runes.ts
84
- const ASYNC_EXPRESSION_RUNES = new Set([
85
- "$derived",
86
- "$inspect",
87
- "$state",
88
- "$state.raw"
89
- ]);
90
- const CALLBACK_RUNES = new Set([
91
- "$derived.by",
92
- "$effect",
93
- "$effect.pre",
94
- "$effect.root"
95
- ]);
96
- /**
97
- * Validates that `yield*` only appears in rune positions the script-effect
98
- * transform can lower without changing the rune's normal Svelte contract.
99
- *
100
- * @since 2.0.0
101
- * @param node - AST node to scan.
102
- * @param content - Original script source used for diagnostics.
103
- * @param filename - Source filename used for diagnostics.
104
- * @returns Nothing.
105
- */
106
- function validate_rune_yield_usage(node, content, filename) {
107
- visit_rune_yield_usage(node, content, filename);
108
- }
109
- /**
110
- * Identifies `$state(...)` and `$state.raw(...)` initializer calls.
111
- *
112
- * @since 2.0.0
113
- * @param expr - Expression to classify.
114
- * @param content - Original script source used to preserve argument text.
115
- * @returns State rune details when the expression is a state initializer.
116
- */
117
- function get_state_rune_initializer(expr, content) {
118
- if (!ts.isCallExpression(expr)) return;
119
- const rune_name = get_rune_name(expr.expression);
120
- if (rune_name !== "$state" && rune_name !== "$state.raw") return;
121
- const first_arg = expr.arguments[0];
122
- if (!first_arg) return;
123
- return {
124
- rune_name,
125
- value_text: slice(content, first_arg).trim()
126
- };
127
- }
128
- function visit_rune_yield_usage(node, content, filename) {
129
- if (ts.isCallExpression(node)) validate_call_expression(node, content, filename);
130
- node.forEachChild((child) => {
131
- visit_rune_yield_usage(child, content, filename);
132
- });
133
- }
134
- function validate_call_expression(call, content, filename) {
135
- const rune_name = get_rune_name(call.expression);
136
- if (!rune_name) return;
137
- if (!ASYNC_EXPRESSION_RUNES.has(rune_name) && contains_top_level_yield_star(call)) throw new AsyncEffectInSyncRuneError(rune_name, slice(content, call), filename);
138
- if (!CALLBACK_RUNES.has(rune_name)) return;
139
- const callback = call.arguments[0];
140
- if (!callback || !callback_has_top_level_yield_star(callback)) return;
141
- throw new AsyncEffectInSyncRuneError(rune_name, slice(content, call), filename);
142
- }
143
- function callback_has_top_level_yield_star(node) {
144
- if ((ts.isArrowFunction(node) || ts.isFunctionExpression(node)) && node.body !== void 0) return contains_top_level_yield_star(node.body);
145
- return contains_top_level_yield_star(node);
146
- }
147
- function get_rune_name(expr) {
148
- if (ts.isIdentifier(expr) && is_rune_root(expr.text)) return expr.text;
149
- if (!ts.isPropertyAccessExpression(expr)) return;
150
- const root_name = get_rune_name(expr.expression);
151
- if (!root_name) return;
152
- return `${root_name}.${expr.name.text}`;
153
- }
154
- function is_rune_root(name) {
155
- return name === "$bindable" || name === "$derived" || name === "$effect" || name === "$host" || name === "$inspect" || name === "$props" || name === "$state";
156
- }
157
- //#endregion
158
44
  //#region src/script-transform/lower.ts
159
45
  /**
160
46
  * Delegates a statement to the correct lowerer based on syntax kind.
@@ -180,103 +66,26 @@ function lower_statement(stmt, content, context) {
180
66
  };
181
67
  }
182
68
  function lower_variable_statement(stmt, content, context) {
183
- const temps = [];
184
- const type_helpers = [];
69
+ const helper_declarations = [];
185
70
  const rewritten_decls = [];
186
- const statements = [];
187
- const deps = [];
188
71
  const decl_list = stmt.declarationList;
189
72
  const kind = (decl_list.flags & ts.NodeFlags.Let) !== 0 ? "let" : "const";
190
- let has_bare_yield = false;
191
73
  let uses_dispatcher_promise = false;
192
74
  for (const decl of decl_list.declarations) {
193
- if (!decl.initializer || !contains_top_level_yield_star(decl.initializer)) {
194
- if (contains_top_level_yield_star(decl.name)) {
195
- has_bare_yield = true;
196
- const binding_text = slice(content, decl.name).trim();
197
- const initializer_text = decl.initializer ? slice(content, decl.initializer).trim() : "undefined";
198
- const names = extract_binding_names(decl.name);
199
- const statement = `(${binding_text} = ${initializer_text});`;
200
- temps.push(...names.map((name) => make_unknown_temp(name, context)));
201
- statements.push(statement);
202
- deps.push(...collect_deps(statement, names));
203
- continue;
204
- }
75
+ if (!contains_top_level_yield_star(decl)) {
205
76
  rewritten_decls.push(slice(content, decl).trim());
206
77
  continue;
207
78
  }
208
- const binding_text = slice(content, decl.name).trim();
209
- if (ts.isIdentifier(decl.name)) {
210
- const original_name = binding_text;
211
- if (is_yield_star_expression(decl.initializer)) {
212
- if (kind === "const") {
213
- const awaited = make_awaited_yield_initializer(decl.initializer, content, original_name, context);
214
- type_helpers.push(awaited.declaration);
215
- rewritten_decls.push(`${original_name} = ${awaited.expression}`);
216
- uses_dispatcher_promise = true;
217
- continue;
218
- }
219
- const temp_name = context.next_temp_name(original_name);
220
- const yield_text = extract_yield_star_full_text(decl.initializer, content);
221
- const type_helper = make_yield_type_helper(yield_text, original_name, context);
222
- if (type_helper) {
223
- type_helpers.push(type_helper.declaration);
224
- temps.push({
225
- name: temp_name,
226
- type: type_helper.type
227
- });
228
- } else temps.push({ name: temp_name });
229
- has_bare_yield = true;
230
- rewritten_decls.push(`${original_name} = $derived(${temp_name})`);
231
- statements.push(`${temp_name} = ${yield_text};`);
232
- deps.push(...collect_deps(yield_text));
233
- } else {
234
- const state_rune = get_state_rune_initializer(decl.initializer, content);
235
- if (state_rune) {
236
- const state_type = extract_yield_star_full_text(decl.initializer, content) === state_rune.value_text ? make_yield_type_helper(state_rune.value_text, original_name, context) : void 0;
237
- if (state_type) type_helpers.push(state_type.declaration);
238
- has_bare_yield = true;
239
- rewritten_decls.push(`${original_name} = ${make_state_placeholder(state_rune.rune_name, state_type?.type, context)}`);
240
- statements.push(`${original_name} = ${state_rune.value_text};`);
241
- deps.push(...collect_deps(state_rune.value_text));
242
- continue;
243
- }
244
- const lowered = lower_expression_yields(decl.initializer, content, original_name, context);
245
- temps.push(...lowered.temps);
246
- type_helpers.push(...lowered.type_helpers ?? []);
247
- for (const block of lowered.effect_blocks) {
248
- statements.push(...block.statements);
249
- deps.push(...block.deps);
250
- }
251
- const rewritten_expr = rewrite_state_rune_as_derived(lowered.rewritten_expr);
252
- const final_expr = should_wrap_complex_initializer_as_derived(decl.initializer, content) ? `$derived(${rewritten_expr})` : rewritten_expr;
253
- if (final_expr !== rewritten_expr) has_bare_yield = true;
254
- rewritten_decls.push(`${original_name} = ${final_expr}`);
255
- }
256
- } else {
257
- has_bare_yield = true;
258
- const temp_name = context.next_temp_name("destructure");
259
- const names = extract_binding_names(decl.name);
260
- const yield_text = extract_yield_star_full_text(decl.initializer, content);
261
- const type_helper = make_yield_type_helper(yield_text, "destructure", context);
262
- if (type_helper) {
263
- type_helpers.push(type_helper.declaration);
264
- temps.push({
265
- name: temp_name,
266
- type: type_helper.type
267
- });
268
- } else temps.push({ name: temp_name });
269
- temps.push(...names.map((name) => make_unknown_temp(name, context)));
270
- statements.push(`${temp_name} = ${yield_text};`);
271
- statements.push(`(${binding_text} = ${temp_name});`);
272
- deps.push(...collect_deps(yield_text));
273
- }
79
+ const lowered = lower_node_yields_to_await(decl, content, make_binding_hint(decl.name), context);
80
+ helper_declarations.push(...lowered.helper_declarations);
81
+ rewritten_decls.push(lowered.rewritten_text);
82
+ uses_dispatcher_promise ||= lowered.uses_dispatcher_promise;
274
83
  }
275
84
  return {
276
- temps,
277
- type_helpers,
278
- rewritten_text: rewritten_decls.length === 0 ? "" : `${has_bare_yield ? "let" : kind} ${rewritten_decls.join(", ")};`,
279
- effect_blocks: statements.length === 0 ? [] : [make_effect_block(statements, deps)],
85
+ temps: [],
86
+ type_helpers: helper_declarations,
87
+ rewritten_text: `${kind} ${rewritten_decls.join(", ")};`,
88
+ effect_blocks: [],
280
89
  uses_dispatcher_promise,
281
90
  range: {
282
91
  start: stmt.getStart(),
@@ -401,10 +210,32 @@ function lower_expression_yields(expr, content, hint, context) {
401
210
  effect_blocks: [make_effect_block(statements, deps)]
402
211
  };
403
212
  }
404
- function make_awaited_yield_initializer(expr, content, hint, context) {
405
- const yield_text = extract_yield_star_full_text(expr, content);
213
+ function lower_node_yields_to_await(node, content, hint, context) {
214
+ const helper_declarations = [];
215
+ const replacements = [];
216
+ collect_yield_star_nodes(node, (yield_node) => {
217
+ const awaited = make_awaited_yield_expression(yield_node, content, hint, context);
218
+ helper_declarations.push(awaited.declaration);
219
+ replacements.push({
220
+ start: yield_node.getStart(),
221
+ end: yield_node.end,
222
+ text: awaited.expression
223
+ });
224
+ });
225
+ replacements.sort((a, b) => b.start - a.start);
226
+ let text = slice_start(content, node);
227
+ const offset_in_node = node.getStart();
228
+ for (const replacement of replacements) text = text.slice(0, replacement.start - offset_in_node) + replacement.text + text.slice(replacement.end - offset_in_node);
229
+ return {
230
+ helper_declarations,
231
+ rewritten_text: text.trim(),
232
+ uses_dispatcher_promise: replacements.length > 0
233
+ };
234
+ }
235
+ function make_awaited_yield_expression(node, content, hint, context) {
236
+ const yield_text = slice_start(content, node).trim();
406
237
  const helper_name = context.next_helper_name(`effect_${hint}`);
407
- const helper_id = make_script_effect_id(expr, context);
238
+ const helper_id = make_script_effect_id(node, context);
408
239
  const deps_text = `[${collect_deps(yield_text).join(", ")}]`;
409
240
  return {
410
241
  declaration: `function* ${helper_name}() { return (${yield_text}); }`,
@@ -425,32 +256,12 @@ function make_yield_type_helper(yield_text, hint, context) {
425
256
  type: `${context.effect_name}.Success<ReturnType<typeof ${helper_name}>> | undefined`
426
257
  };
427
258
  }
428
- function make_unknown_temp(name, context) {
429
- return {
430
- name,
431
- type: context.emit_types ? "unknown" : void 0
432
- };
433
- }
434
- function make_state_placeholder(rune_name, type, context) {
435
- if (type) return `${rune_name}<${type}>(undefined)`;
436
- if (context.emit_types) return `${rune_name}<unknown>(undefined)`;
437
- return `${rune_name}(undefined)`;
438
- }
439
259
  function strip_yield_star(yield_text) {
440
260
  return yield_text.replace(/^yield\*\s*/, "");
441
261
  }
442
262
  function make_script_effect_id(expr, context) {
443
263
  return `${context.filename}:${expr.getStart()}:${expr.end}`;
444
264
  }
445
- function rewrite_state_rune_as_derived(expression) {
446
- const state_call = expression.match(/^\$state(?:\.raw)?\(([\s\S]*)\)$/);
447
- if (!state_call) return expression;
448
- return `$derived(${state_call[1]})`;
449
- }
450
- function should_wrap_complex_initializer_as_derived(expr, content) {
451
- const text = slice(content, expr).trim();
452
- return !/^\$derived(?:\.by)?\(/.test(text) && !/^\$inspect(?:\.trace)?\(/.test(text);
453
- }
454
265
  function is_assignment_operator(expr) {
455
266
  return expr.operatorToken.kind >= ts.SyntaxKind.FirstAssignment && expr.operatorToken.kind <= ts.SyntaxKind.LastAssignment;
456
267
  }
@@ -463,6 +274,10 @@ function is_top_level_rune_call(expr) {
463
274
  function make_temp_hint(target) {
464
275
  return target.match(/[A-Za-z_$][\w$]*$/)?.[0] ?? "assignment";
465
276
  }
277
+ function make_binding_hint(name) {
278
+ if (ts.isIdentifier(name)) return name.text;
279
+ return "destructure";
280
+ }
466
281
  function extract_yield_star_full_text(expr, content) {
467
282
  let found;
468
283
  find_yield_star_node(expr, (node) => {
@@ -496,9 +311,9 @@ function collect_assignment_target_names(node) {
496
311
  //#endregion
497
312
  //#region src/script-transform/index.ts
498
313
  /**
499
- * Transforms a `<script effect>` body by extracting top-level `yield*`
500
- * expressions into `$state` temp bindings and wrapping the lowered
501
- * assignments in a dependency-tracked `$effect` block.
314
+ * Transforms a `<script effect>` body by lowering top-level `yield*`
315
+ * expressions into Svelte-compatible async rendering declarations or into
316
+ * dependency-tracked `$effect` blocks for effectful statements.
502
317
  *
503
318
  * @example
504
319
  * ```ts
@@ -563,9 +378,9 @@ function transform_script_effect(content, filename, options = {}) {
563
378
  validate_rune_yield_usage(stmt, content, filename);
564
379
  validate_script_yield_boundaries(stmt, content, filename);
565
380
  if (!contains_top_level_yield_star(stmt)) continue;
566
- if (contains_top_level_await(stmt)) throw new AwaitInEffectWorkError(filename, slice(content, stmt));
567
381
  has_effect = true;
568
382
  const lowered = lower_statement(stmt, content, context);
383
+ if (lowered.effect_blocks.length > 0 && contains_top_level_await(stmt)) throw new AwaitInEffectWorkError(filename, slice(content, stmt));
569
384
  magic.overwrite(lowered.range.start, lowered.range.end, lowered.rewritten_text);
570
385
  if (lowered.temps.length > 0 || lowered.type_helpers?.length) {
571
386
  const temp_declarations = lowered.temps.map((temp) => temp.type ? `let ${temp.name} = $state<${temp.type}>(undefined);` : `let ${temp.name} = $state(undefined);`);
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","names":[],"sources":["../../../modules/svelte-effect-runtime/src/script-transform/source.ts","../../../modules/svelte-effect-runtime/src/script-transform/runtime-block.ts","../../../modules/svelte-effect-runtime/src/script-transform/runes.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 MagicString from \"magic-string\";\nimport type ts from \"typescript\";\n\n/**\n * Creates a source map from transformed script back to the original block.\n *\n * @since 2.0.0\n * @param magic - MagicString instance holding the transformed source.\n * @param filename - Source filename used for the source map entry.\n * @returns A plain source map object.\n */\nexport function create_source_map(\n magic: MagicString,\n filename: string,\n): Record<string, unknown> {\n const map = magic.generateMap({\n hires: true,\n includeContent: true,\n source: filename,\n });\n\n return map as unknown as Record<string, unknown>;\n}\n\n/**\n * Slices a substring matching a node's full source range.\n *\n * @since 2.0.0\n * @param content - Original source text.\n * @param node - AST node whose full range should be extracted.\n * @returns Source text including leading trivia.\n */\nexport function slice(content: string, node: ts.Node): string {\n return content.slice(node.getFullStart(), node.end);\n}\n\n/**\n * Slices a substring matching a node's source range without leading trivia.\n *\n * @since 2.0.0\n * @param content - Original source text.\n * @param node - AST node whose non-trivia range should be extracted.\n * @returns Source text excluding leading trivia.\n */\nexport function slice_start(content: string, node: ts.Node): string {\n return content.slice(node.getStart(), node.end);\n}\n","import type { EffectBlock, RuntimeImportBindings } from \"./types.ts\";\n\n/**\n * Builds the runtime blocks appended to lowered script effect code.\n *\n * @since 2.0.0\n * @param blocks - Effect bodies and dependency reads to emit.\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\n */\nexport function make_runtime_block(blocks: EffectBlock[]): string {\n const bindings: RuntimeImportBindings = {\n cancel: \"__SER___cancel\",\n dispatcher: \"get_dispatcher\",\n dispatcher_value: \"__SER___dispatcher\",\n effect: \"Effect\",\n program: \"__SER___program\",\n untrack: \"untrack\",\n };\n\n return make_runtime_block_with_bindings(blocks, bindings);\n}\n\n/**\n * Builds the runtime blocks appended to lowered script effect code with\n * explicit runtime import bindings.\n *\n * @since 2.4.2\n * @param blocks - Effect bodies and dependency reads to emit.\n * @param bindings - Runtime binding names available in the generated code.\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\n */\nexport function make_runtime_block_with_bindings(\n blocks: EffectBlock[],\n bindings: RuntimeImportBindings,\n): string {\n const merged_block = merge_effect_blocks(blocks);\n const dep_reads = merged_block.deps.map((dep) => ` ${dep};`);\n\n const body = merged_block.statements\n .map((statement) => ` ${statement}`)\n .join(\"\\n\");\n\n return [\n \"\",\n \"$effect(() => {\",\n ...dep_reads,\n ` const ${bindings.dispatcher_value} = ${bindings.dispatcher}();`,\n ` const ${bindings.program} = ${bindings.effect}.gen(function* () {`,\n body,\n \" });\",\n ` const ${bindings.cancel} = ${bindings.untrack}(() => ${bindings.dispatcher_value}.fork(${bindings.program}));`,\n ` import.meta.hot?.dispose(${bindings.cancel});`,\n ` return ${bindings.cancel};`,\n \"});\",\n \"\",\n ].join(\"\\n\");\n}\n\nfunction merge_effect_blocks(blocks: EffectBlock[]): EffectBlock {\n const statements = blocks.flatMap((block) => block.statements);\n const deps = blocks.flatMap((block) => block.deps);\n\n return {\n statements,\n deps: [...new Set(deps)],\n };\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport { AsyncEffectInSyncRuneError } from \"$/errors.ts\";\nimport { slice } from \"./source.ts\";\n\nimport ts from \"typescript\";\n\nconst ASYNC_EXPRESSION_RUNES = new Set([\n \"$derived\",\n \"$inspect\",\n \"$state\",\n \"$state.raw\",\n]);\n\nconst CALLBACK_RUNES = new Set([\n \"$derived.by\",\n \"$effect\",\n \"$effect.pre\",\n \"$effect.root\",\n]);\n\n/**\n * Validates that `yield*` only appears in rune positions the script-effect\n * transform can lower without changing the rune's normal Svelte contract.\n *\n * @since 2.0.0\n * @param node - AST node to scan.\n * @param content - Original script source used for diagnostics.\n * @param filename - Source filename used for diagnostics.\n * @returns Nothing.\n */\nexport function validate_rune_yield_usage(\n node: ts.Node,\n content: string,\n filename: string,\n): void {\n visit_rune_yield_usage(node, content, filename);\n}\n\n/**\n * Identifies `$state(...)` and `$state.raw(...)` initializer calls.\n *\n * @since 2.0.0\n * @param expr - Expression to classify.\n * @param content - Original script source used to preserve argument text.\n * @returns State rune details when the expression is a state initializer.\n */\nexport function get_state_rune_initializer(\n expr: ts.Expression,\n content: string,\n): { rune_name: \"$state\" | \"$state.raw\"; value_text: string } | undefined {\n if (!ts.isCallExpression(expr)) {\n return undefined;\n }\n\n const rune_name = get_rune_name(expr.expression);\n\n if (rune_name !== \"$state\" && rune_name !== \"$state.raw\") {\n return undefined;\n }\n\n const first_arg = expr.arguments[0];\n\n if (!first_arg) {\n return undefined;\n }\n\n return {\n rune_name,\n value_text: slice(content, first_arg).trim(),\n };\n}\n\nfunction visit_rune_yield_usage(\n node: ts.Node,\n content: string,\n filename: string,\n): void {\n if (ts.isCallExpression(node)) {\n validate_call_expression(node, content, filename);\n }\n\n node.forEachChild((child) => {\n visit_rune_yield_usage(child, content, filename);\n });\n}\n\nfunction validate_call_expression(\n call: ts.CallExpression,\n content: string,\n filename: string,\n): void {\n const rune_name = get_rune_name(call.expression);\n\n if (!rune_name) {\n return;\n }\n\n if (\n !ASYNC_EXPRESSION_RUNES.has(rune_name) &&\n contains_top_level_yield_star(call)\n ) {\n throw new AsyncEffectInSyncRuneError(\n rune_name,\n slice(content, call),\n filename,\n );\n }\n\n if (!CALLBACK_RUNES.has(rune_name)) {\n return;\n }\n\n const callback = call.arguments[0];\n\n if (!callback || !callback_has_top_level_yield_star(callback)) {\n return;\n }\n\n throw new AsyncEffectInSyncRuneError(\n rune_name,\n slice(content, call),\n filename,\n );\n}\n\nfunction callback_has_top_level_yield_star(node: ts.Expression): boolean {\n if (\n (ts.isArrowFunction(node) ||\n ts.isFunctionExpression(node)) &&\n node.body !== undefined\n ) {\n return contains_top_level_yield_star(node.body);\n }\n\n return contains_top_level_yield_star(node);\n}\n\nfunction get_rune_name(expr: ts.Expression): string | undefined {\n if (ts.isIdentifier(expr) && is_rune_root(expr.text)) {\n return expr.text;\n }\n\n if (!ts.isPropertyAccessExpression(expr)) {\n return undefined;\n }\n\n const root_name = get_rune_name(expr.expression);\n\n if (!root_name) {\n return undefined;\n }\n\n return `${root_name}.${expr.name.text}`;\n}\n\nfunction is_rune_root(name: string): boolean {\n return (\n name === \"$bindable\" ||\n name === \"$derived\" ||\n name === \"$effect\" ||\n name === \"$host\" ||\n name === \"$inspect\" ||\n name === \"$props\" ||\n name === \"$state\"\n );\n}\n","import { collect_free_identifiers } from \"$/markup/transform/expressions.ts\";\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\nimport {\n collect_yield_star_nodes,\n extract_binding_names,\n find_yield_star_node,\n is_yield_star_expression,\n} from \"./ast.ts\";\nimport { get_state_rune_initializer } from \"./runes.ts\";\nimport { slice, slice_start } from \"./source.ts\";\nimport type {\n EffectBlock,\n LoweredExpression,\n LoweredStatement,\n ScriptLoweringContext,\n TempBinding,\n} from \"./types.ts\";\n\nimport ts from \"typescript\";\n\n/**\n * Delegates a statement to the correct lowerer based on syntax kind.\n *\n * @since 2.0.0\n * @param stmt - Statement to lower.\n * @param content - Original source text.\n * @param context - Lowering services for this transform pass.\n * @returns Lowered statement descriptor.\n */\nexport function lower_statement(\n stmt: ts.Statement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n if (ts.isExpressionStatement(stmt)) {\n return lower_expression_statement(stmt, content, context);\n }\n\n if (ts.isVariableStatement(stmt)) {\n return lower_variable_statement(stmt, content, context);\n }\n\n const text = slice(content, stmt);\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [make_effect_block([text], collect_deps(text))],\n range: { start: stmt.getFullStart(), end: stmt.end },\n };\n}\n\nfunction lower_variable_statement(\n stmt: ts.VariableStatement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n const temps: TempBinding[] = [];\n const type_helpers: string[] = [];\n const rewritten_decls: string[] = [];\n const statements: string[] = [];\n const deps: string[] = [];\n\n const decl_list = stmt.declarationList;\n const kind = (decl_list.flags & ts.NodeFlags.Let) !== 0 ? \"let\" : \"const\";\n let has_bare_yield = false;\n let uses_dispatcher_promise = false;\n\n for (const decl of decl_list.declarations) {\n if (!decl.initializer || !contains_top_level_yield_star(decl.initializer)) {\n if (contains_top_level_yield_star(decl.name)) {\n has_bare_yield = true;\n\n const binding_text = slice(content, decl.name).trim();\n const initializer_text = decl.initializer\n ? slice(content, decl.initializer).trim()\n : \"undefined\";\n const names = extract_binding_names(decl.name);\n const statement = `(${binding_text} = ${initializer_text});`;\n\n temps.push(...names.map((name) => make_unknown_temp(name, context)));\n statements.push(statement);\n deps.push(...collect_deps(statement, names));\n\n continue;\n }\n\n rewritten_decls.push(slice(content, decl).trim());\n continue;\n }\n\n const binding_text = slice(content, decl.name).trim();\n\n if (ts.isIdentifier(decl.name)) {\n const original_name = binding_text;\n\n if (is_yield_star_expression(decl.initializer)) {\n if (kind === \"const\") {\n const awaited = make_awaited_yield_initializer(\n decl.initializer,\n content,\n original_name,\n context,\n );\n\n type_helpers.push(awaited.declaration);\n rewritten_decls.push(`${original_name} = ${awaited.expression}`);\n uses_dispatcher_promise = true;\n continue;\n }\n\n const temp_name = context.next_temp_name(original_name);\n const yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n const type_helper = make_yield_type_helper(\n yield_text,\n original_name,\n context,\n );\n\n if (type_helper) {\n type_helpers.push(type_helper.declaration);\n temps.push({ name: temp_name, type: type_helper.type });\n } else {\n temps.push({ name: temp_name });\n }\n\n has_bare_yield = true;\n rewritten_decls.push(`${original_name} = $derived(${temp_name})`);\n\n statements.push(`${temp_name} = ${yield_text};`);\n deps.push(...collect_deps(yield_text));\n } else {\n const state_rune = get_state_rune_initializer(\n decl.initializer,\n content,\n );\n\n if (state_rune) {\n const direct_yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n const state_type = direct_yield_text === state_rune.value_text\n ? make_yield_type_helper(\n state_rune.value_text,\n original_name,\n context,\n )\n : undefined;\n\n if (state_type) {\n type_helpers.push(state_type.declaration);\n }\n\n has_bare_yield = true;\n rewritten_decls.push(\n `${original_name} = ${\n make_state_placeholder(\n state_rune.rune_name,\n state_type?.type,\n context,\n )\n }`,\n );\n statements.push(`${original_name} = ${state_rune.value_text};`);\n deps.push(...collect_deps(state_rune.value_text));\n continue;\n }\n\n const lowered = lower_expression_yields(\n decl.initializer,\n content,\n original_name,\n context,\n );\n\n temps.push(...lowered.temps);\n type_helpers.push(...(lowered.type_helpers ?? []));\n for (const block of lowered.effect_blocks) {\n statements.push(...block.statements);\n deps.push(...block.deps);\n }\n\n const rewritten_expr = rewrite_state_rune_as_derived(\n lowered.rewritten_expr,\n );\n const final_expr = should_wrap_complex_initializer_as_derived(\n decl.initializer,\n content,\n )\n ? `$derived(${rewritten_expr})`\n : rewritten_expr;\n\n if (final_expr !== rewritten_expr) {\n has_bare_yield = true;\n }\n\n rewritten_decls.push(`${original_name} = ${final_expr}`);\n }\n } else {\n has_bare_yield = true;\n\n const temp_name = context.next_temp_name(\"destructure\");\n const names = extract_binding_names(decl.name);\n const yield_text = extract_yield_star_full_text(\n decl.initializer,\n content,\n );\n const type_helper = make_yield_type_helper(\n yield_text,\n \"destructure\",\n context,\n );\n\n if (type_helper) {\n type_helpers.push(type_helper.declaration);\n temps.push({ name: temp_name, type: type_helper.type });\n } else {\n temps.push({ name: temp_name });\n }\n\n temps.push(...names.map((name) => make_unknown_temp(name, context)));\n\n statements.push(`${temp_name} = ${yield_text};`);\n statements.push(`(${binding_text} = ${temp_name});`);\n deps.push(...collect_deps(yield_text));\n }\n }\n\n const rewritten_text = rewritten_decls.length === 0\n ? \"\"\n : `${has_bare_yield ? \"let\" : kind} ${rewritten_decls.join(\", \")};`;\n\n return {\n temps,\n type_helpers,\n rewritten_text,\n effect_blocks: statements.length === 0\n ? []\n : [make_effect_block(statements, deps)],\n uses_dispatcher_promise,\n range: { start: stmt.getStart(), end: stmt.end },\n };\n}\n\nfunction lower_expression_statement(\n stmt: ts.ExpressionStatement,\n content: string,\n context: ScriptLoweringContext,\n): LoweredStatement {\n const expr = stmt.expression;\n\n if (!contains_top_level_yield_star(expr)) {\n return {\n temps: [],\n rewritten_text: slice(content, stmt).trim(),\n effect_blocks: [],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n if (is_yield_star_expression(expr)) {\n const text = slice(content, expr).trim();\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [make_effect_block([text + \";\"], collect_deps(text))],\n range: { start: stmt.getFullStart(), end: stmt.end },\n };\n }\n\n if (ts.isBinaryExpression(expr) && is_assignment_operator(expr)) {\n const target = slice(content, expr.left).trim();\n const target_names = collect_assignment_target_names(expr.left);\n\n if (\n expr.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\n is_yield_star_expression(expr.right)\n ) {\n const yield_text = extract_yield_star_full_text(expr.right, content);\n\n return {\n temps: [],\n rewritten_text: \"\",\n effect_blocks: [\n make_effect_block(\n [`${target} = ${yield_text};`],\n collect_deps(yield_text, target_names),\n ),\n ],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n const lowered = lower_expression_yields(\n expr.right,\n content,\n make_temp_hint(target),\n context,\n );\n const temp_names = lowered.temps.map((temp) => temp.name);\n const statement = `${target} ${\n slice(content, expr.operatorToken).trim()\n } ${lowered.rewritten_expr};`;\n\n return {\n temps: lowered.temps,\n type_helpers: lowered.type_helpers,\n rewritten_text: \"\",\n effect_blocks: [\n make_effect_block(\n [\n ...lowered.effect_blocks.flatMap((block) => block.statements),\n statement,\n ],\n [\n ...lowered.effect_blocks.flatMap((block) => block.deps),\n ...collect_deps(lowered.rewritten_expr, [\n ...target_names,\n ...temp_names,\n ]),\n ],\n ),\n ],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n const lowered = lower_expression_yields(\n expr,\n content,\n \"call\",\n context,\n );\n\n if (is_top_level_rune_call(expr)) {\n return {\n temps: lowered.temps,\n type_helpers: lowered.type_helpers,\n rewritten_text: lowered.rewritten_expr + \";\",\n effect_blocks: lowered.effect_blocks,\n range: { start: stmt.getStart(), end: stmt.end },\n };\n }\n\n const temp_names = lowered.temps.map((temp) => temp.name);\n\n return {\n temps: lowered.temps,\n type_helpers: lowered.type_helpers,\n rewritten_text: \"\",\n effect_blocks: [\n make_effect_block(\n [\n ...lowered.effect_blocks.flatMap((block) => block.statements),\n lowered.rewritten_expr + \";\",\n ],\n [\n ...lowered.effect_blocks.flatMap((block) => block.deps),\n ...collect_deps(lowered.rewritten_expr, temp_names),\n ],\n ),\n ],\n range: { start: stmt.getStart(), end: stmt.end },\n };\n}\n\nfunction lower_expression_yields(\n expr: ts.Expression,\n content: string,\n hint: string,\n context: ScriptLoweringContext,\n): LoweredExpression {\n const replacements: Array<{\n start: number;\n end: number;\n text: string;\n }> = [];\n\n const temps: TempBinding[] = [];\n const type_helpers: string[] = [];\n const statements: string[] = [];\n const deps: string[] = [];\n\n collect_yield_star_nodes(expr, (node) => {\n const temp_name = context.next_temp_name(hint);\n const yield_text = slice_start(content, node).trim();\n const type_helper = make_yield_type_helper(yield_text, hint, context);\n\n if (type_helper) {\n type_helpers.push(type_helper.declaration);\n temps.push({ name: temp_name, type: type_helper.type });\n } else {\n temps.push({ name: temp_name });\n }\n\n statements.push(`${temp_name} = ${yield_text};`);\n deps.push(...collect_deps(yield_text));\n replacements.push({\n start: node.getStart(),\n end: node.end,\n text: temp_name,\n });\n });\n\n if (replacements.length === 0) {\n return {\n temps,\n type_helpers,\n rewritten_expr: slice(content, expr).trim(),\n effect_blocks: [],\n };\n }\n\n replacements.sort((a, b) => b.start - a.start);\n\n let text = slice(content, expr);\n\n const offset_in_expr = expr.getFullStart();\n\n for (const replacement of replacements) {\n text = text.slice(0, replacement.start - offset_in_expr) +\n replacement.text +\n text.slice(replacement.end - offset_in_expr);\n }\n\n return {\n temps,\n type_helpers,\n rewritten_expr: text.trim(),\n effect_blocks: [make_effect_block(statements, deps)],\n };\n}\n\nfunction make_awaited_yield_initializer(\n expr: ts.Expression,\n content: string,\n hint: string,\n context: ScriptLoweringContext,\n): { declaration: string; expression: string } {\n const yield_text = extract_yield_star_full_text(expr, content);\n const helper_name = context.next_helper_name(`effect_${hint}`);\n const helper_id = make_script_effect_id(expr, context);\n const deps = collect_deps(yield_text);\n const deps_text = `[${deps.join(\", \")}]`;\n\n return {\n declaration: `function* ${helper_name}() { return (${yield_text}); }`,\n expression: [\n `await ${context.dispatcher_name}().promise({`,\n `id: ${JSON.stringify(helper_id)}, `,\n `deps: ${deps_text}, `,\n `factory: () => ${helper_name}()`,\n `})`,\n ].join(\"\"),\n };\n}\n\nfunction make_yield_type_helper(\n yield_text: string,\n hint: string,\n context: ScriptLoweringContext,\n): { declaration: string; type: string } | undefined {\n if (!context.emit_types) {\n return undefined;\n }\n\n const helper_name = context.next_type_helper_name(hint);\n const effect_text = strip_yield_star(yield_text);\n\n return {\n declaration: `function ${helper_name}() { return (${effect_text}); }`,\n type:\n `${context.effect_name}.Success<ReturnType<typeof ${helper_name}>> | undefined`,\n };\n}\n\nfunction make_unknown_temp(\n name: string,\n context: ScriptLoweringContext,\n): TempBinding {\n return {\n name,\n type: context.emit_types ? \"unknown\" : undefined,\n };\n}\n\nfunction make_state_placeholder(\n rune_name: string,\n type: string | undefined,\n context: ScriptLoweringContext,\n): string {\n if (type) {\n return `${rune_name}<${type}>(undefined)`;\n }\n\n if (context.emit_types) {\n return `${rune_name}<unknown>(undefined)`;\n }\n\n return `${rune_name}(undefined)`;\n}\n\nfunction strip_yield_star(yield_text: string): string {\n return yield_text.replace(/^yield\\*\\s*/, \"\");\n}\n\nfunction make_script_effect_id(\n expr: ts.Expression,\n context: ScriptLoweringContext,\n): string {\n return `${context.filename}:${expr.getStart()}:${expr.end}`;\n}\n\nfunction rewrite_state_rune_as_derived(expression: string): string {\n const state_call = expression.match(/^\\$state(?:\\.raw)?\\(([\\s\\S]*)\\)$/);\n\n if (!state_call) {\n return expression;\n }\n\n return `$derived(${state_call[1]})`;\n}\n\nfunction should_wrap_complex_initializer_as_derived(\n expr: ts.Expression,\n content: string,\n): boolean {\n const text = slice(content, expr).trim();\n\n return !/^\\$derived(?:\\.by)?\\(/.test(text) &&\n !/^\\$inspect(?:\\.trace)?\\(/.test(text);\n}\n\nfunction is_assignment_operator(expr: ts.BinaryExpression): boolean {\n return expr.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&\n expr.operatorToken.kind <= ts.SyntaxKind.LastAssignment;\n}\n\nfunction is_top_level_rune_call(expr: ts.Expression): boolean {\n if (!ts.isCallExpression(expr)) {\n return false;\n }\n\n const callee = expr.expression;\n\n if (ts.isIdentifier(callee)) {\n return callee.text.startsWith(\"$\");\n }\n\n return ts.isPropertyAccessExpression(callee) &&\n ts.isIdentifier(callee.expression) &&\n callee.expression.text.startsWith(\"$\");\n}\n\nfunction make_temp_hint(target: string): string {\n const match = target.match(/[A-Za-z_$][\\w$]*$/);\n\n return match?.[0] ?? \"assignment\";\n}\n\nfunction extract_yield_star_full_text(\n expr: ts.Expression,\n content: string,\n): string {\n let found: string | undefined;\n\n find_yield_star_node(expr, (node) => {\n found = slice_start(content, node).trim();\n });\n\n return found ?? \"undefined\";\n}\n\nfunction make_effect_block(\n statements: string[],\n deps: string[],\n): EffectBlock {\n return {\n statements,\n deps: [...new Set(deps)],\n };\n}\n\nfunction collect_deps(\n expr_text: string,\n excluded_names: readonly string[] = [],\n): string[] {\n const excluded = new Set(excluded_names);\n\n return collect_free_identifiers(expr_text).filter(\n (identifier) =>\n !identifier.startsWith(\"__SER___\") && !excluded.has(identifier),\n );\n}\n\nfunction collect_assignment_target_names(node: ts.Node): string[] {\n if (ts.isIdentifier(node)) {\n return [node.text];\n }\n\n if (ts.isParenthesizedExpression(node)) {\n return collect_assignment_target_names(node.expression);\n }\n\n if (\n ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)\n ) {\n return collect_assignment_target_names(node.expression);\n }\n\n if (ts.isObjectLiteralExpression(node)) {\n return node.properties.flatMap((property) => {\n if (ts.isShorthandPropertyAssignment(property)) {\n return [property.name.text];\n }\n\n if (ts.isPropertyAssignment(property)) {\n return collect_assignment_target_names(property.initializer);\n }\n\n if (ts.isSpreadAssignment(property)) {\n return collect_assignment_target_names(property.expression);\n }\n\n return [];\n });\n }\n\n if (ts.isArrayLiteralExpression(node)) {\n return node.elements.flatMap((element) =>\n ts.isSpreadElement(element)\n ? collect_assignment_target_names(element.expression)\n : collect_assignment_target_names(element)\n );\n }\n\n return [];\n}\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\nimport {\n collect_top_level_binding_names,\n has_local_import_binding,\n make_imports,\n} from \"./imports.ts\";\nimport { create_source_map, slice } from \"./source.ts\";\nimport { AwaitInEffectWorkError, PreprocessError } from \"$/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 BlockRef,\n EffectBlock,\n Relocation,\n RuntimeImportBindings,\n ScriptLoweringContext,\n ScriptTransformResult,\n} from \"./types.ts\";\n\nimport MagicString from \"magic-string\";\nimport ts from \"typescript\";\n\nexport type { BlockRef, ScriptTransformResult } from \"./types.ts\";\n\ninterface ScriptTransformOptions {\n emit_types?: boolean;\n}\n\n/**\n * Transforms a `<script effect>` body by extracting top-level `yield*`\n * expressions into `$state` temp bindings and wrapping the lowered\n * assignments in a dependency-tracked `$effect` block.\n *\n * @example\n * ```ts\n * const result = transform_script_effect(\n * `let user = $state(yield* getUser(id));`,\n * \"App.svelte\",\n * );\n * ```\n *\n * @since 2.0.0\n * @param content - The raw `<script effect>` body content.\n * @param filename - The source filename, used in error messages.\n * @param options - Optional transform settings for generated script code.\n * @returns The transformed code and any block references.\n */\nexport function transform_script_effect(\n content: string,\n filename: string,\n options: ScriptTransformOptions = {},\n): ScriptTransformResult {\n let temp_counter = 0;\n\n const source_file = ts.createSourceFile(\n filename,\n content,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n\n const magic = new MagicString(content);\n const effect_blocks: EffectBlock[] = [];\n const block_refs: BlockRef[] = [];\n const top_level_binding_names = collect_top_level_binding_names(source_file);\n const top_level_binding_names_set = new Set(top_level_binding_names);\n const name_allocator = make_name_allocator(top_level_binding_names);\n const emit_types = options.emit_types ?? true;\n\n let has_effect = false;\n let uses_dispatcher_promise = false;\n let uses_effect_types = false;\n\n /** Phase 1: detect imports already provided by the user. */\n const has_effect_import = has_local_import_binding(\n source_file,\n \"effect\",\n \"Effect\",\n );\n\n const has_dispatcher_import = has_local_import_binding(\n source_file,\n \"svelte-effect-runtime/internal/generators\",\n \"get_dispatcher\",\n );\n\n const has_untrack_import = has_local_import_binding(\n source_file,\n \"svelte\",\n \"untrack\",\n );\n\n const reserve_runtime_import = (name: string) =>\n top_level_binding_names_set.has(name)\n ? name_allocator.reserve(make_generated_name(name, \"\"))\n : name_allocator.reserve(name);\n\n const runtime_bindings: RuntimeImportBindings = {\n cancel: name_allocator.reserve(\"__SER___cancel\"),\n dispatcher: has_dispatcher_import\n ? \"get_dispatcher\"\n : reserve_runtime_import(\"get_dispatcher\"),\n dispatcher_value: name_allocator.reserve(\"__SER___dispatcher\"),\n effect: has_effect_import ? \"Effect\" : reserve_runtime_import(\"Effect\"),\n program: name_allocator.reserve(\"__SER___program\"),\n untrack: has_untrack_import ? \"untrack\" : reserve_runtime_import(\"untrack\"),\n };\n\n const context: ScriptLoweringContext = {\n filename,\n dispatcher_name: runtime_bindings.dispatcher,\n effect_name: runtime_bindings.effect,\n emit_types,\n next_helper_name(hint?: string) {\n return name_allocator.reserve(make_generated_name(hint ?? \"helper\", \"\"));\n },\n next_temp_name(hint?: string) {\n const suffix = temp_counter === 0 ? \"\" : `_${temp_counter}`;\n const name = make_generated_name(hint ?? String(temp_counter), suffix);\n\n temp_counter += 1;\n\n return name_allocator.reserve(name);\n },\n next_type_helper_name(hint?: string) {\n return name_allocator.reserve(\n make_generated_name(`type_${hint ?? \"effect\"}`, \"\"),\n );\n },\n };\n\n /** Phase 2: lower every top-level statement that contains `yield*`. */\n for (const stmt of source_file.statements) {\n validate_rune_yield_usage(stmt, content, filename);\n validate_script_yield_boundaries(stmt, content, filename);\n\n const has_top_level_yield_star = contains_top_level_yield_star(stmt);\n\n if (!has_top_level_yield_star) {\n continue;\n }\n\n if (contains_top_level_await(stmt)) {\n const text = slice(content, stmt);\n throw new AwaitInEffectWorkError(filename, text);\n }\n\n has_effect = true;\n const lowered = lower_statement(stmt, content, context);\n\n magic.overwrite(\n lowered.range.start,\n lowered.range.end,\n lowered.rewritten_text,\n );\n\n if (lowered.temps.length > 0 || lowered.type_helpers?.length) {\n const temp_declarations = lowered.temps.map((temp) =>\n temp.type\n ? `let ${temp.name} = $state<${temp.type}>(undefined);`\n : `let ${temp.name} = $state(undefined);`\n );\n\n const prefix = [\n ...(lowered.type_helpers ?? []),\n ...temp_declarations,\n ].join(\"\\n\");\n\n magic.appendLeft(lowered.range.start, prefix + \"\\n\");\n }\n\n effect_blocks.push(...lowered.effect_blocks);\n uses_dispatcher_promise ||= lowered.uses_dispatcher_promise ?? false;\n uses_effect_types ||= lowered.temps.some((temp) =>\n temp.type?.includes(`${runtime_bindings.effect}.Success`) ?? false\n );\n }\n\n if (!has_effect) {\n block_refs.push({ id: filename, kind: \"script\" });\n\n return { code: content, blocks: block_refs };\n }\n\n /** Phase 3: inject runtime imports after the last user import. */\n const imports = make_imports(\n has_effect_import,\n has_dispatcher_import,\n has_untrack_import,\n runtime_bindings,\n {\n needs_dispatcher: effect_blocks.length > 0 || uses_dispatcher_promise,\n needs_effect: effect_blocks.length > 0 || uses_effect_types,\n needs_untrack: effect_blocks.length > 0,\n },\n );\n\n const last_import = [...source_file.statements]\n .reverse()\n .find(ts.isImportDeclaration);\n\n if (imports) {\n if (last_import) {\n magic.appendRight(last_import.end, \"\\n\" + imports);\n } else {\n magic.prepend(imports + \"\\n\");\n }\n }\n\n /** Phase 4: append the runtime program and lifecycle wiring. */\n if (effect_blocks.length > 0) {\n const runtime_block = make_runtime_block_with_bindings(\n effect_blocks,\n runtime_bindings,\n );\n\n magic.append(\"\\n\" + runtime_block);\n }\n\n block_refs.push({ id: filename, kind: \"script\" });\n\n const code = magic.toString();\n\n return {\n code,\n blocks: block_refs,\n map: create_source_map(magic, filename),\n relocations: create_script_relocations(content, code, source_file),\n };\n}\n\nfunction create_script_relocations(\n content: string,\n code: string,\n source_file: ts.SourceFile,\n): Relocation[] {\n const candidates = source_file.statements.flatMap((stmt) => {\n const relocations: RelocationCandidate[] = [];\n\n if (contains_top_level_yield_star(stmt) && ts.isVariableStatement(stmt)) {\n for (const decl of stmt.declarationList.declarations) {\n collect_binding_relocation_candidates(decl.name, relocations);\n }\n }\n\n collect_yield_star_nodes(stmt, (node) => {\n const text = content.slice(node.getStart(), node.end).trim();\n\n relocations.push({\n originalStart: node.getStart(),\n originalEnd: node.end,\n text,\n match: \"exact\",\n });\n });\n\n return relocations;\n });\n\n const used_ranges: Array<{ start: number; end: number }> = [];\n\n return candidates.flatMap((candidate) => {\n const generated_start = find_available_generated_text(\n code,\n candidate,\n used_ranges,\n );\n\n if (generated_start < 0) {\n return [];\n }\n\n const generated_end = generated_start + candidate.text.length;\n used_ranges.push({ start: generated_start, end: generated_end });\n\n return [{\n originalStart: candidate.originalStart,\n originalEnd: candidate.originalEnd,\n generatedStart: generated_start,\n generatedEnd: generated_end,\n }];\n });\n}\n\ntype RelocationCandidate = {\n originalStart: number;\n originalEnd: number;\n text: string;\n match: \"exact\" | \"identifier\";\n};\n\nfunction collect_binding_relocation_candidates(\n name: ts.BindingName,\n candidates: RelocationCandidate[],\n): void {\n if (ts.isIdentifier(name)) {\n candidates.push({\n originalStart: name.getStart(),\n originalEnd: name.end,\n text: name.text,\n match: \"identifier\",\n });\n\n return;\n }\n\n for (const element of name.elements) {\n if (ts.isOmittedExpression(element)) {\n continue;\n }\n\n collect_binding_relocation_candidates(element.name, candidates);\n }\n}\n\nfunction find_available_generated_text(\n code: string,\n candidate: RelocationCandidate,\n used_ranges: Array<{ start: number; end: number }>,\n): number {\n let search_start = 0;\n\n while (search_start < code.length) {\n const index = code.indexOf(candidate.text, search_start);\n\n if (index < 0) {\n return -1;\n }\n\n const end = index + candidate.text.length;\n const overlaps_used_range = used_ranges.some((range) =>\n index < range.end && end > range.start\n );\n const is_text_match = candidate.match === \"exact\" ||\n is_identifier_text_match(code, index, end);\n\n if (!overlaps_used_range && is_text_match) {\n return index;\n }\n\n search_start = candidate.match === \"identifier\" ? index + 1 : end;\n }\n\n return -1;\n}\n\nfunction is_identifier_text_match(\n code: string,\n start: number,\n end: number,\n): boolean {\n const before = start === 0 ? 0 : code.charCodeAt(start - 1);\n const after = end >= code.length ? 0 : code.charCodeAt(end);\n\n return !is_identifier_part(before) && !is_identifier_part(after);\n}\n\nfunction is_identifier_part(char_code: number): boolean {\n return (\n (char_code >= 65 && char_code <= 90) ||\n (char_code >= 97 && char_code <= 122) ||\n (char_code >= 48 && char_code <= 57) ||\n char_code === 36 ||\n char_code === 95\n );\n}\n\nfunction validate_script_yield_boundaries(\n stmt: ts.Statement,\n content: string,\n filename: string,\n): void {\n const bad_member = find_class_member_with_yield_star(stmt);\n\n if (!bad_member) {\n return;\n }\n\n throw new PreprocessError(\n [\n `[ASYNC_EFFECT_IN_CLASS_MEMBER]: ${filename}: yield* cannot be used inside class members.`,\n `Class fields and methods are not component top-level reactive work. Move the Effect work into a script effect statement before assigning it to the class instance.`,\n \"\",\n \"Problematic member:\",\n slice(content, bad_member),\n ].join(\"\\n\"),\n filename,\n );\n}\n\nfunction find_class_member_with_yield_star(\n stmt: ts.Statement,\n): ts.Node | undefined {\n let found: ts.Node | undefined;\n\n function visit(node: ts.Node): void {\n if (found) {\n return;\n }\n\n if (\n ts.isPropertyDeclaration(node) &&\n node.initializer &&\n contains_top_level_yield_star(node.initializer)\n ) {\n found = node;\n return;\n }\n\n node.forEachChild(visit);\n }\n\n visit(stmt);\n\n return found;\n}\n\nfunction make_name_allocator(initial_names: readonly string[]): {\n reserve(name: string): string;\n} {\n const used_names = new Set(initial_names);\n\n return {\n reserve(name: string): string {\n let candidate = name;\n let suffix = 1;\n\n while (used_names.has(candidate)) {\n candidate = `${name}_${suffix}`;\n suffix += 1;\n }\n\n used_names.add(candidate);\n\n return candidate;\n },\n };\n}\n\nfunction make_generated_name(hint: string, suffix: string): string {\n const normalized_hint = hint.replace(/[^A-Za-z0-9_$]/g, \"_\");\n const safe_hint = /^[A-Za-z_$]/.test(normalized_hint)\n ? normalized_hint\n : `temp_${normalized_hint}`;\n\n return `__SER___${safe_hint}${suffix}`;\n}\n","import {\n type MarkupTransformTarget,\n transform_markup_effect,\n} from \"$/markup/transform.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 /** Transformed Svelte source. */\n code: 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 /** Markup emission target passed through to the markup transform. */\n target?: 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 content: string,\n filename = \"unknown.svelte\",\n options: SvelteTransformOptions = {},\n): SvelteTransformResult {\n const script = find_script(content);\n\n let combined = content;\n\n if (script?.has_effect) {\n const result = transform_script_effect(script.text, filename, {\n emit_types: script.is_typescript,\n });\n\n combined = content.slice(0, script.effect_attr_start) +\n content.slice(script.effect_attr_end, script.open_end) +\n result.code +\n content.slice(script.close_start);\n }\n\n const result = transform_markup_effect(combined, filename, {\n target: options.target,\n });\n\n return { code: result.code };\n}\n\nfunction find_script(content: string):\n | {\n text: string;\n open_end: number;\n close_start: number;\n has_effect: boolean;\n effect_attr_start: number;\n effect_attr_end: number;\n is_typescript: boolean;\n }\n | undefined {\n const pattern = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script\\s*>/gi;\n\n for (const match of content.matchAll(pattern)) {\n if (match.index === undefined || /\\bmodule\\b/.test(match[1] ?? \"\")) {\n continue;\n }\n\n const attrs = match[1] ?? \"\";\n const effect_match = /\\s+effect(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s>]+))?/\n .exec(attrs);\n const open_end = match.index + match[0].indexOf(\">\") + 1;\n const attr_start = effect_match?.index ?? attrs.length;\n const attr_end = attr_start + (effect_match?.[0].length ?? 0);\n\n return {\n text: match[2],\n open_end,\n close_start: match.index + match[0].lastIndexOf(\"<\"),\n has_effect: effect_match !== null,\n effect_attr_start: match.index + \"<script\".length + attr_start,\n effect_attr_end: match.index + \"<script\".length + attr_end,\n is_typescript: has_typescript_lang(attrs),\n };\n }\n\n return undefined;\n}\n\nfunction has_typescript_lang(attrs: string): boolean {\n const lang_match = /\\blang\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s>]+))/i.exec(\n attrs,\n );\n const lang = (lang_match?.[1] ?? lang_match?.[2] ?? lang_match?.[3] ?? \"\")\n .toLowerCase();\n\n return lang === \"ts\" || lang === \"typescript\";\n}\n\nexport {\n type MarkupTransformOptions,\n type MarkupTransformResult,\n type MarkupTransformTarget,\n transform_markup_effect,\n} from \"$/markup/transform.ts\";\n\nexport {\n type BlockRef,\n type ScriptTransformResult,\n transform_script_effect,\n} from \"$/script-transform/index.ts\";\n"],"mappings":"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"}
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\";\r\n\r\n/**\r\n * Builds the runtime blocks appended to lowered script effect code.\r\n *\r\n * @since 2.0.0\r\n * @param blocks - Effect bodies and dependency reads to emit.\r\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\r\n */\r\nexport function make_runtime_block(blocks: EffectBlock[]): string {\r\n const bindings: RuntimeImportBindings = {\r\n cancel: \"__SER___cancel\",\r\n dispatcher: \"get_dispatcher\",\r\n dispatcher_value: \"__SER___dispatcher\",\r\n effect: \"Effect\",\r\n program: \"__SER___program\",\r\n untrack: \"untrack\",\r\n };\r\n\r\n return make_runtime_block_with_bindings(blocks, bindings);\r\n}\r\n\r\n/**\r\n * Builds the runtime blocks appended to lowered script effect code with\r\n * explicit runtime import bindings.\r\n *\r\n * @since 2.4.2\r\n * @param blocks - Effect bodies and dependency reads to emit.\r\n * @param bindings - Runtime binding names available in the generated code.\r\n * @returns Full `$effect` blocks that fork generated `Effect.gen` programs.\r\n */\r\nexport function make_runtime_block_with_bindings(\r\n blocks: EffectBlock[],\r\n bindings: RuntimeImportBindings,\r\n): string {\r\n const merged_block = merge_effect_blocks(blocks);\r\n const dep_reads = merged_block.deps.map((dep) => ` ${dep};`);\r\n\r\n const body = merged_block.statements\r\n .map((statement) => ` ${statement}`)\r\n .join(\"\\n\");\r\n\r\n return [\r\n \"\",\r\n \"$effect(() => {\",\r\n ...dep_reads,\r\n ` const ${bindings.dispatcher_value} = ${bindings.dispatcher}();`,\r\n ` const ${bindings.program} = ${bindings.effect}.gen(function* () {`,\r\n body,\r\n \" });\",\r\n ` const ${bindings.cancel} = ${bindings.untrack}(() => ${bindings.dispatcher_value}.fork(${bindings.program}));`,\r\n ` import.meta.hot?.dispose(${bindings.cancel});`,\r\n ` return ${bindings.cancel};`,\r\n \"});\",\r\n \"\",\r\n ].join(\"\\n\");\r\n}\r\n\r\nfunction merge_effect_blocks(blocks: EffectBlock[]): EffectBlock {\r\n const statements = blocks.flatMap((block) => block.statements);\r\n const deps = blocks.flatMap((block) => block.deps);\r\n\r\n return {\r\n statements,\r\n deps: [...new Set(deps)],\r\n };\r\n}\r\n","import { collect_free_identifiers } from \"$/markup/transform/expressions.ts\";\r\nimport { contains_top_level_yield_star } from \"$/detect.ts\";\r\nimport {\r\n collect_yield_star_nodes,\r\n find_yield_star_node,\r\n is_yield_star_expression,\r\n} from \"./ast.ts\";\r\nimport { slice, slice_start } from \"./source.ts\";\r\nimport type {\r\n EffectBlock,\r\n LoweredExpression,\r\n LoweredStatement,\r\n ScriptLoweringContext,\r\n TempBinding,\r\n} from \"./types.ts\";\r\n\r\nimport ts from \"typescript\";\r\n\r\n/**\r\n * Delegates a statement to the correct lowerer based on syntax kind.\r\n *\r\n * @since 2.0.0\r\n * @param stmt - Statement to lower.\r\n * @param content - Original source text.\r\n * @param context - Lowering services for this transform pass.\r\n * @returns Lowered statement descriptor.\r\n */\r\nexport function lower_statement(\r\n stmt: ts.Statement,\r\n content: string,\r\n context: ScriptLoweringContext,\r\n): LoweredStatement {\r\n if (ts.isExpressionStatement(stmt)) {\r\n return lower_expression_statement(stmt, content, context);\r\n }\r\n\r\n if (ts.isVariableStatement(stmt)) {\r\n return lower_variable_statement(stmt, content, context);\r\n }\r\n\r\n const text = slice(content, stmt);\r\n\r\n return {\r\n temps: [],\r\n rewritten_text: \"\",\r\n effect_blocks: [make_effect_block([text], collect_deps(text))],\r\n range: { start: stmt.getFullStart(), end: stmt.end },\r\n };\r\n}\r\n\r\nfunction lower_variable_statement(\r\n stmt: ts.VariableStatement,\r\n content: string,\r\n context: ScriptLoweringContext,\r\n): LoweredStatement {\r\n const helper_declarations: string[] = [];\r\n const rewritten_decls: string[] = [];\r\n\r\n const decl_list = stmt.declarationList;\r\n const kind = (decl_list.flags & ts.NodeFlags.Let) !== 0 ? \"let\" : \"const\";\r\n let uses_dispatcher_promise = false;\r\n\r\n for (const decl of decl_list.declarations) {\r\n if (!contains_top_level_yield_star(decl)) {\r\n rewritten_decls.push(slice(content, decl).trim());\r\n continue;\r\n }\r\n\r\n const lowered = lower_node_yields_to_await(\r\n decl,\r\n content,\r\n make_binding_hint(decl.name),\r\n context,\r\n );\r\n\r\n helper_declarations.push(...lowered.helper_declarations);\r\n rewritten_decls.push(lowered.rewritten_text);\r\n uses_dispatcher_promise ||= lowered.uses_dispatcher_promise;\r\n }\r\n\r\n const rewritten_text = `${kind} ${rewritten_decls.join(\", \")};`;\r\n\r\n return {\r\n temps: [],\r\n type_helpers: helper_declarations,\r\n rewritten_text,\r\n effect_blocks: [],\r\n uses_dispatcher_promise,\r\n range: { start: stmt.getStart(), end: stmt.end },\r\n };\r\n}\r\n\r\nfunction lower_expression_statement(\r\n stmt: ts.ExpressionStatement,\r\n content: string,\r\n context: ScriptLoweringContext,\r\n): LoweredStatement {\r\n const expr = stmt.expression;\r\n\r\n if (!contains_top_level_yield_star(expr)) {\r\n return {\r\n temps: [],\r\n rewritten_text: slice(content, stmt).trim(),\r\n effect_blocks: [],\r\n range: { start: stmt.getStart(), end: stmt.end },\r\n };\r\n }\r\n\r\n if (is_yield_star_expression(expr)) {\r\n const text = slice(content, expr).trim();\r\n\r\n return {\r\n temps: [],\r\n rewritten_text: \"\",\r\n effect_blocks: [make_effect_block([text + \";\"], collect_deps(text))],\r\n range: { start: stmt.getFullStart(), end: stmt.end },\r\n };\r\n }\r\n\r\n if (ts.isBinaryExpression(expr) && is_assignment_operator(expr)) {\r\n const target = slice(content, expr.left).trim();\r\n const target_names = collect_assignment_target_names(expr.left);\r\n\r\n if (\r\n expr.operatorToken.kind === ts.SyntaxKind.EqualsToken &&\r\n is_yield_star_expression(expr.right)\r\n ) {\r\n const yield_text = extract_yield_star_full_text(expr.right, content);\r\n\r\n return {\r\n temps: [],\r\n rewritten_text: \"\",\r\n effect_blocks: [\r\n make_effect_block(\r\n [`${target} = ${yield_text};`],\r\n collect_deps(yield_text, target_names),\r\n ),\r\n ],\r\n range: { start: stmt.getStart(), end: stmt.end },\r\n };\r\n }\r\n\r\n const lowered = lower_expression_yields(\r\n expr.right,\r\n content,\r\n make_temp_hint(target),\r\n context,\r\n );\r\n const temp_names = lowered.temps.map((temp) => temp.name);\r\n const statement = `${target} ${\r\n slice(content, expr.operatorToken).trim()\r\n } ${lowered.rewritten_expr};`;\r\n\r\n return {\r\n temps: lowered.temps,\r\n type_helpers: lowered.type_helpers,\r\n rewritten_text: \"\",\r\n effect_blocks: [\r\n make_effect_block(\r\n [\r\n ...lowered.effect_blocks.flatMap((block) => block.statements),\r\n statement,\r\n ],\r\n [\r\n ...lowered.effect_blocks.flatMap((block) => block.deps),\r\n ...collect_deps(lowered.rewritten_expr, [\r\n ...target_names,\r\n ...temp_names,\r\n ]),\r\n ],\r\n ),\r\n ],\r\n range: { start: stmt.getStart(), end: stmt.end },\r\n };\r\n }\r\n\r\n const lowered = lower_expression_yields(\r\n expr,\r\n content,\r\n \"call\",\r\n context,\r\n );\r\n\r\n if (is_top_level_rune_call(expr)) {\r\n return {\r\n temps: lowered.temps,\r\n type_helpers: lowered.type_helpers,\r\n rewritten_text: lowered.rewritten_expr + \";\",\r\n effect_blocks: lowered.effect_blocks,\r\n range: { start: stmt.getStart(), end: stmt.end },\r\n };\r\n }\r\n\r\n const temp_names = lowered.temps.map((temp) => temp.name);\r\n\r\n return {\r\n temps: lowered.temps,\r\n type_helpers: lowered.type_helpers,\r\n rewritten_text: \"\",\r\n effect_blocks: [\r\n make_effect_block(\r\n [\r\n ...lowered.effect_blocks.flatMap((block) => block.statements),\r\n lowered.rewritten_expr + \";\",\r\n ],\r\n [\r\n ...lowered.effect_blocks.flatMap((block) => block.deps),\r\n ...collect_deps(lowered.rewritten_expr, temp_names),\r\n ],\r\n ),\r\n ],\r\n range: { start: stmt.getStart(), end: stmt.end },\r\n };\r\n}\r\n\r\nfunction lower_expression_yields(\r\n expr: ts.Expression,\r\n content: string,\r\n hint: string,\r\n context: ScriptLoweringContext,\r\n): LoweredExpression {\r\n const replacements: Array<{\r\n start: number;\r\n end: number;\r\n text: string;\r\n }> = [];\r\n\r\n const temps: TempBinding[] = [];\r\n const type_helpers: string[] = [];\r\n const statements: string[] = [];\r\n const deps: string[] = [];\r\n\r\n collect_yield_star_nodes(expr, (node) => {\r\n const temp_name = context.next_temp_name(hint);\r\n const yield_text = slice_start(content, node).trim();\r\n const type_helper = make_yield_type_helper(yield_text, hint, context);\r\n\r\n if (type_helper) {\r\n type_helpers.push(type_helper.declaration);\r\n temps.push({ name: temp_name, type: type_helper.type });\r\n } else {\r\n temps.push({ name: temp_name });\r\n }\r\n\r\n statements.push(`${temp_name} = ${yield_text};`);\r\n deps.push(...collect_deps(yield_text));\r\n replacements.push({\r\n start: node.getStart(),\r\n end: node.end,\r\n text: temp_name,\r\n });\r\n });\r\n\r\n if (replacements.length === 0) {\r\n return {\r\n temps,\r\n type_helpers,\r\n rewritten_expr: slice(content, expr).trim(),\r\n effect_blocks: [],\r\n };\r\n }\r\n\r\n replacements.sort((a, b) => b.start - a.start);\r\n\r\n let text = slice(content, expr);\r\n\r\n const offset_in_expr = expr.getFullStart();\r\n\r\n for (const replacement of replacements) {\r\n text = text.slice(0, replacement.start - offset_in_expr) +\r\n replacement.text +\r\n text.slice(replacement.end - offset_in_expr);\r\n }\r\n\r\n return {\r\n temps,\r\n type_helpers,\r\n rewritten_expr: text.trim(),\r\n effect_blocks: [make_effect_block(statements, deps)],\r\n };\r\n}\r\n\r\nfunction lower_node_yields_to_await(\r\n node: ts.Node,\r\n content: string,\r\n hint: string,\r\n context: ScriptLoweringContext,\r\n): {\r\n helper_declarations: string[];\r\n rewritten_text: string;\r\n uses_dispatcher_promise: boolean;\r\n} {\r\n const helper_declarations: string[] = [];\r\n const replacements: Array<{\r\n start: number;\r\n end: number;\r\n text: string;\r\n }> = [];\r\n\r\n collect_yield_star_nodes(node, (yield_node) => {\r\n const awaited = make_awaited_yield_expression(\r\n yield_node,\r\n content,\r\n hint,\r\n context,\r\n );\r\n\r\n helper_declarations.push(awaited.declaration);\r\n replacements.push({\r\n start: yield_node.getStart(),\r\n end: yield_node.end,\r\n text: awaited.expression,\r\n });\r\n });\r\n\r\n replacements.sort((a, b) => b.start - a.start);\r\n\r\n let text = slice_start(content, node);\r\n const offset_in_node = node.getStart();\r\n\r\n for (const replacement of replacements) {\r\n text = text.slice(0, replacement.start - offset_in_node) +\r\n replacement.text +\r\n text.slice(replacement.end - offset_in_node);\r\n }\r\n\r\n return {\r\n helper_declarations,\r\n rewritten_text: text.trim(),\r\n uses_dispatcher_promise: replacements.length > 0,\r\n };\r\n}\r\n\r\nfunction make_awaited_yield_expression(\r\n node: ts.Node,\r\n content: string,\r\n hint: string,\r\n context: ScriptLoweringContext,\r\n): { declaration: string; expression: string } {\r\n const yield_text = slice_start(content, node).trim();\r\n const helper_name = context.next_helper_name(`effect_${hint}`);\r\n const helper_id = make_script_effect_id(node, context);\r\n const deps = collect_deps(yield_text);\r\n const deps_text = `[${deps.join(\", \")}]`;\r\n\r\n return {\r\n declaration: `function* ${helper_name}() { return (${yield_text}); }`,\r\n expression: [\r\n `await ${context.dispatcher_name}().promise({`,\r\n `id: ${JSON.stringify(helper_id)}, `,\r\n `deps: ${deps_text}, `,\r\n `factory: () => ${helper_name}()`,\r\n `})`,\r\n ].join(\"\"),\r\n };\r\n}\r\n\r\nfunction make_yield_type_helper(\r\n yield_text: string,\r\n hint: string,\r\n context: ScriptLoweringContext,\r\n): { declaration: string; type: string } | undefined {\r\n if (!context.emit_types) {\r\n return undefined;\r\n }\r\n\r\n const helper_name = context.next_type_helper_name(hint);\r\n const effect_text = strip_yield_star(yield_text);\r\n\r\n return {\r\n declaration: `function ${helper_name}() { return (${effect_text}); }`,\r\n type:\r\n `${context.effect_name}.Success<ReturnType<typeof ${helper_name}>> | undefined`,\r\n };\r\n}\r\n\r\nfunction strip_yield_star(yield_text: string): string {\r\n return yield_text.replace(/^yield\\*\\s*/, \"\");\r\n}\r\n\r\nfunction make_script_effect_id(\r\n expr: ts.Node,\r\n context: ScriptLoweringContext,\r\n): string {\r\n return `${context.filename}:${expr.getStart()}:${expr.end}`;\r\n}\r\n\r\nfunction is_assignment_operator(expr: ts.BinaryExpression): boolean {\r\n return expr.operatorToken.kind >= ts.SyntaxKind.FirstAssignment &&\r\n expr.operatorToken.kind <= ts.SyntaxKind.LastAssignment;\r\n}\r\n\r\nfunction is_top_level_rune_call(expr: ts.Expression): boolean {\r\n if (!ts.isCallExpression(expr)) {\r\n return false;\r\n }\r\n\r\n const callee = expr.expression;\r\n\r\n if (ts.isIdentifier(callee)) {\r\n return callee.text.startsWith(\"$\");\r\n }\r\n\r\n return ts.isPropertyAccessExpression(callee) &&\r\n ts.isIdentifier(callee.expression) &&\r\n callee.expression.text.startsWith(\"$\");\r\n}\r\n\r\nfunction make_temp_hint(target: string): string {\r\n const match = target.match(/[A-Za-z_$][\\w$]*$/);\r\n\r\n return match?.[0] ?? \"assignment\";\r\n}\r\n\r\nfunction make_binding_hint(name: ts.BindingName): string {\r\n if (ts.isIdentifier(name)) {\r\n return name.text;\r\n }\r\n\r\n return \"destructure\";\r\n}\r\n\r\nfunction extract_yield_star_full_text(\r\n expr: ts.Expression,\r\n content: string,\r\n): string {\r\n let found: string | undefined;\r\n\r\n find_yield_star_node(expr, (node) => {\r\n found = slice_start(content, node).trim();\r\n });\r\n\r\n return found ?? \"undefined\";\r\n}\r\n\r\nfunction make_effect_block(\r\n statements: string[],\r\n deps: string[],\r\n): EffectBlock {\r\n return {\r\n statements,\r\n deps: [...new Set(deps)],\r\n };\r\n}\r\n\r\nfunction collect_deps(\r\n expr_text: string,\r\n excluded_names: readonly string[] = [],\r\n): string[] {\r\n const excluded = new Set(excluded_names);\r\n\r\n return collect_free_identifiers(expr_text).filter(\r\n (identifier) =>\r\n !identifier.startsWith(\"__SER___\") && !excluded.has(identifier),\r\n );\r\n}\r\n\r\nfunction collect_assignment_target_names(node: ts.Node): string[] {\r\n if (ts.isIdentifier(node)) {\r\n return [node.text];\r\n }\r\n\r\n if (ts.isParenthesizedExpression(node)) {\r\n return collect_assignment_target_names(node.expression);\r\n }\r\n\r\n if (\r\n ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)\r\n ) {\r\n return collect_assignment_target_names(node.expression);\r\n }\r\n\r\n if (ts.isObjectLiteralExpression(node)) {\r\n return node.properties.flatMap((property) => {\r\n if (ts.isShorthandPropertyAssignment(property)) {\r\n return [property.name.text];\r\n }\r\n\r\n if (ts.isPropertyAssignment(property)) {\r\n return collect_assignment_target_names(property.initializer);\r\n }\r\n\r\n if (ts.isSpreadAssignment(property)) {\r\n return collect_assignment_target_names(property.expression);\r\n }\r\n\r\n return [];\r\n });\r\n }\r\n\r\n if (ts.isArrayLiteralExpression(node)) {\r\n return node.elements.flatMap((element) =>\r\n ts.isSpreadElement(element)\r\n ? collect_assignment_target_names(element.expression)\r\n : collect_assignment_target_names(element)\r\n );\r\n }\r\n\r\n return [];\r\n}\r\n","import { contains_top_level_yield_star } from \"$/detect.ts\";\r\nimport {\r\n collect_top_level_binding_names,\r\n has_local_import_binding,\r\n make_imports,\r\n} from \"./imports.ts\";\r\nimport { create_source_map, slice } from \"./source.ts\";\r\nimport { AwaitInEffectWorkError, PreprocessError } from \"$/errors.ts\";\r\nimport { make_runtime_block_with_bindings } from \"./runtime-block.ts\";\r\nimport { collect_yield_star_nodes, contains_top_level_await } from \"./ast.ts\";\r\nimport { lower_statement } from \"./lower.ts\";\r\nimport { validate_rune_yield_usage } from \"./runes.ts\";\r\nimport type {\r\n BlockRef,\r\n EffectBlock,\r\n Relocation,\r\n RuntimeImportBindings,\r\n ScriptLoweringContext,\r\n ScriptTransformResult,\r\n} from \"./types.ts\";\r\n\r\nimport MagicString from \"magic-string\";\r\nimport ts from \"typescript\";\r\n\r\nexport type { BlockRef, ScriptTransformResult } from \"./types.ts\";\r\n\r\ninterface ScriptTransformOptions {\r\n emit_types?: boolean;\r\n}\r\n\r\n/**\r\n * Transforms a `<script effect>` body by lowering top-level `yield*`\r\n * expressions into Svelte-compatible async rendering declarations or into\r\n * dependency-tracked `$effect` blocks for effectful statements.\r\n *\r\n * @example\r\n * ```ts\r\n * const result = transform_script_effect(\r\n * `let user = $state(yield* getUser(id));`,\r\n * \"App.svelte\",\r\n * );\r\n * ```\r\n *\r\n * @since 2.0.0\r\n * @param content - The raw `<script effect>` body content.\r\n * @param filename - The source filename, used in error messages.\r\n * @param options - Optional transform settings for generated script code.\r\n * @returns The transformed code and any block references.\r\n */\r\nexport function transform_script_effect(\r\n content: string,\r\n filename: string,\r\n options: ScriptTransformOptions = {},\r\n): ScriptTransformResult {\r\n let temp_counter = 0;\r\n\r\n const source_file = ts.createSourceFile(\r\n filename,\r\n content,\r\n ts.ScriptTarget.Latest,\r\n true,\r\n ts.ScriptKind.TS,\r\n );\r\n\r\n const magic = new MagicString(content);\r\n const effect_blocks: EffectBlock[] = [];\r\n const block_refs: BlockRef[] = [];\r\n const top_level_binding_names = collect_top_level_binding_names(source_file);\r\n const top_level_binding_names_set = new Set(top_level_binding_names);\r\n const name_allocator = make_name_allocator(top_level_binding_names);\r\n const emit_types = options.emit_types ?? true;\r\n\r\n let has_effect = false;\r\n let uses_dispatcher_promise = false;\r\n let uses_effect_types = false;\r\n\r\n /** Phase 1: detect imports already provided by the user. */\r\n const has_effect_import = has_local_import_binding(\r\n source_file,\r\n \"effect\",\r\n \"Effect\",\r\n );\r\n\r\n const has_dispatcher_import = has_local_import_binding(\r\n source_file,\r\n \"svelte-effect-runtime/internal/generators\",\r\n \"get_dispatcher\",\r\n );\r\n\r\n const has_untrack_import = has_local_import_binding(\r\n source_file,\r\n \"svelte\",\r\n \"untrack\",\r\n );\r\n\r\n const reserve_runtime_import = (name: string) =>\r\n top_level_binding_names_set.has(name)\r\n ? name_allocator.reserve(make_generated_name(name, \"\"))\r\n : name_allocator.reserve(name);\r\n\r\n const runtime_bindings: RuntimeImportBindings = {\r\n cancel: name_allocator.reserve(\"__SER___cancel\"),\r\n dispatcher: has_dispatcher_import\r\n ? \"get_dispatcher\"\r\n : reserve_runtime_import(\"get_dispatcher\"),\r\n dispatcher_value: name_allocator.reserve(\"__SER___dispatcher\"),\r\n effect: has_effect_import ? \"Effect\" : reserve_runtime_import(\"Effect\"),\r\n program: name_allocator.reserve(\"__SER___program\"),\r\n untrack: has_untrack_import ? \"untrack\" : reserve_runtime_import(\"untrack\"),\r\n };\r\n\r\n const context: ScriptLoweringContext = {\r\n filename,\r\n dispatcher_name: runtime_bindings.dispatcher,\r\n effect_name: runtime_bindings.effect,\r\n emit_types,\r\n next_helper_name(hint?: string) {\r\n return name_allocator.reserve(make_generated_name(hint ?? \"helper\", \"\"));\r\n },\r\n next_temp_name(hint?: string) {\r\n const suffix = temp_counter === 0 ? \"\" : `_${temp_counter}`;\r\n const name = make_generated_name(hint ?? String(temp_counter), suffix);\r\n\r\n temp_counter += 1;\r\n\r\n return name_allocator.reserve(name);\r\n },\r\n next_type_helper_name(hint?: string) {\r\n return name_allocator.reserve(\r\n make_generated_name(`type_${hint ?? \"effect\"}`, \"\"),\r\n );\r\n },\r\n };\r\n\r\n /** Phase 2: lower every top-level statement that contains `yield*`. */\r\n for (const stmt of source_file.statements) {\r\n validate_rune_yield_usage(stmt, content, filename);\r\n validate_script_yield_boundaries(stmt, content, filename);\r\n\r\n const has_top_level_yield_star = contains_top_level_yield_star(stmt);\r\n\r\n if (!has_top_level_yield_star) {\r\n continue;\r\n }\r\n\r\n has_effect = true;\r\n const lowered = lower_statement(stmt, content, context);\r\n\r\n if (lowered.effect_blocks.length > 0 && contains_top_level_await(stmt)) {\r\n const text = slice(content, stmt);\r\n throw new AwaitInEffectWorkError(filename, text);\r\n }\r\n\r\n magic.overwrite(\r\n lowered.range.start,\r\n lowered.range.end,\r\n lowered.rewritten_text,\r\n );\r\n\r\n if (lowered.temps.length > 0 || lowered.type_helpers?.length) {\r\n const temp_declarations = lowered.temps.map((temp) =>\r\n temp.type\r\n ? `let ${temp.name} = $state<${temp.type}>(undefined);`\r\n : `let ${temp.name} = $state(undefined);`\r\n );\r\n\r\n const prefix = [\r\n ...(lowered.type_helpers ?? []),\r\n ...temp_declarations,\r\n ].join(\"\\n\");\r\n\r\n magic.appendLeft(lowered.range.start, prefix + \"\\n\");\r\n }\r\n\r\n effect_blocks.push(...lowered.effect_blocks);\r\n uses_dispatcher_promise ||= lowered.uses_dispatcher_promise ?? false;\r\n uses_effect_types ||= lowered.temps.some((temp) =>\r\n temp.type?.includes(`${runtime_bindings.effect}.Success`) ?? false\r\n );\r\n }\r\n\r\n if (!has_effect) {\r\n block_refs.push({ id: filename, kind: \"script\" });\r\n\r\n return { code: content, blocks: block_refs };\r\n }\r\n\r\n /** Phase 3: inject runtime imports after the last user import. */\r\n const imports = make_imports(\r\n has_effect_import,\r\n has_dispatcher_import,\r\n has_untrack_import,\r\n runtime_bindings,\r\n {\r\n needs_dispatcher: effect_blocks.length > 0 || uses_dispatcher_promise,\r\n needs_effect: effect_blocks.length > 0 || uses_effect_types,\r\n needs_untrack: effect_blocks.length > 0,\r\n },\r\n );\r\n\r\n const last_import = [...source_file.statements]\r\n .reverse()\r\n .find(ts.isImportDeclaration);\r\n\r\n if (imports) {\r\n if (last_import) {\r\n magic.appendRight(last_import.end, \"\\n\" + imports);\r\n } else {\r\n magic.prepend(imports + \"\\n\");\r\n }\r\n }\r\n\r\n /** Phase 4: append the runtime program and lifecycle wiring. */\r\n if (effect_blocks.length > 0) {\r\n const runtime_block = make_runtime_block_with_bindings(\r\n effect_blocks,\r\n runtime_bindings,\r\n );\r\n\r\n magic.append(\"\\n\" + runtime_block);\r\n }\r\n\r\n block_refs.push({ id: filename, kind: \"script\" });\r\n\r\n const code = magic.toString();\r\n\r\n return {\r\n code,\r\n blocks: block_refs,\r\n map: create_source_map(magic, filename),\r\n relocations: create_script_relocations(content, code, source_file),\r\n };\r\n}\r\n\r\nfunction create_script_relocations(\r\n content: string,\r\n code: string,\r\n source_file: ts.SourceFile,\r\n): Relocation[] {\r\n const candidates = source_file.statements.flatMap((stmt) => {\r\n const relocations: RelocationCandidate[] = [];\r\n\r\n if (contains_top_level_yield_star(stmt) && ts.isVariableStatement(stmt)) {\r\n for (const decl of stmt.declarationList.declarations) {\r\n collect_binding_relocation_candidates(decl.name, relocations);\r\n }\r\n }\r\n\r\n collect_yield_star_nodes(stmt, (node) => {\r\n const text = content.slice(node.getStart(), node.end).trim();\r\n\r\n relocations.push({\r\n originalStart: node.getStart(),\r\n originalEnd: node.end,\r\n text,\r\n match: \"exact\",\r\n });\r\n });\r\n\r\n return relocations;\r\n });\r\n\r\n const used_ranges: Array<{ start: number; end: number }> = [];\r\n\r\n return candidates.flatMap((candidate) => {\r\n const generated_start = find_available_generated_text(\r\n code,\r\n candidate,\r\n used_ranges,\r\n );\r\n\r\n if (generated_start < 0) {\r\n return [];\r\n }\r\n\r\n const generated_end = generated_start + candidate.text.length;\r\n used_ranges.push({ start: generated_start, end: generated_end });\r\n\r\n return [{\r\n originalStart: candidate.originalStart,\r\n originalEnd: candidate.originalEnd,\r\n generatedStart: generated_start,\r\n generatedEnd: generated_end,\r\n }];\r\n });\r\n}\r\n\r\ntype RelocationCandidate = {\r\n originalStart: number;\r\n originalEnd: number;\r\n text: string;\r\n match: \"exact\" | \"identifier\";\r\n};\r\n\r\nfunction collect_binding_relocation_candidates(\r\n name: ts.BindingName,\r\n candidates: RelocationCandidate[],\r\n): void {\r\n if (ts.isIdentifier(name)) {\r\n candidates.push({\r\n originalStart: name.getStart(),\r\n originalEnd: name.end,\r\n text: name.text,\r\n match: \"identifier\",\r\n });\r\n\r\n return;\r\n }\r\n\r\n for (const element of name.elements) {\r\n if (ts.isOmittedExpression(element)) {\r\n continue;\r\n }\r\n\r\n collect_binding_relocation_candidates(element.name, candidates);\r\n }\r\n}\r\n\r\nfunction find_available_generated_text(\r\n code: string,\r\n candidate: RelocationCandidate,\r\n used_ranges: Array<{ start: number; end: number }>,\r\n): number {\r\n let search_start = 0;\r\n\r\n while (search_start < code.length) {\r\n const index = code.indexOf(candidate.text, search_start);\r\n\r\n if (index < 0) {\r\n return -1;\r\n }\r\n\r\n const end = index + candidate.text.length;\r\n const overlaps_used_range = used_ranges.some((range) =>\r\n index < range.end && end > range.start\r\n );\r\n const is_text_match = candidate.match === \"exact\" ||\r\n is_identifier_text_match(code, index, end);\r\n\r\n if (!overlaps_used_range && is_text_match) {\r\n return index;\r\n }\r\n\r\n search_start = candidate.match === \"identifier\" ? index + 1 : end;\r\n }\r\n\r\n return -1;\r\n}\r\n\r\nfunction is_identifier_text_match(\r\n code: string,\r\n start: number,\r\n end: number,\r\n): boolean {\r\n const before = start === 0 ? 0 : code.charCodeAt(start - 1);\r\n const after = end >= code.length ? 0 : code.charCodeAt(end);\r\n\r\n return !is_identifier_part(before) && !is_identifier_part(after);\r\n}\r\n\r\nfunction is_identifier_part(char_code: number): boolean {\r\n return (\r\n (char_code >= 65 && char_code <= 90) ||\r\n (char_code >= 97 && char_code <= 122) ||\r\n (char_code >= 48 && char_code <= 57) ||\r\n char_code === 36 ||\r\n char_code === 95\r\n );\r\n}\r\n\r\nfunction validate_script_yield_boundaries(\r\n stmt: ts.Statement,\r\n content: string,\r\n filename: string,\r\n): void {\r\n const bad_member = find_class_member_with_yield_star(stmt);\r\n\r\n if (!bad_member) {\r\n return;\r\n }\r\n\r\n throw new PreprocessError(\r\n [\r\n `[ASYNC_EFFECT_IN_CLASS_MEMBER]: ${filename}: yield* cannot be used inside class members.`,\r\n `Class fields and methods are not component top-level reactive work. Move the Effect work into a script effect statement before assigning it to the class instance.`,\r\n \"\",\r\n \"Problematic member:\",\r\n slice(content, bad_member),\r\n ].join(\"\\n\"),\r\n filename,\r\n );\r\n}\r\n\r\nfunction find_class_member_with_yield_star(\r\n stmt: ts.Statement,\r\n): ts.Node | undefined {\r\n let found: ts.Node | undefined;\r\n\r\n function visit(node: ts.Node): void {\r\n if (found) {\r\n return;\r\n }\r\n\r\n if (\r\n ts.isPropertyDeclaration(node) &&\r\n node.initializer &&\r\n contains_top_level_yield_star(node.initializer)\r\n ) {\r\n found = node;\r\n return;\r\n }\r\n\r\n node.forEachChild(visit);\r\n }\r\n\r\n visit(stmt);\r\n\r\n return found;\r\n}\r\n\r\nfunction make_name_allocator(initial_names: readonly string[]): {\r\n reserve(name: string): string;\r\n} {\r\n const used_names = new Set(initial_names);\r\n\r\n return {\r\n reserve(name: string): string {\r\n let candidate = name;\r\n let suffix = 1;\r\n\r\n while (used_names.has(candidate)) {\r\n candidate = `${name}_${suffix}`;\r\n suffix += 1;\r\n }\r\n\r\n used_names.add(candidate);\r\n\r\n return candidate;\r\n },\r\n };\r\n}\r\n\r\nfunction make_generated_name(hint: string, suffix: string): string {\r\n const normalized_hint = hint.replace(/[^A-Za-z0-9_$]/g, \"_\");\r\n const safe_hint = /^[A-Za-z_$]/.test(normalized_hint)\r\n ? normalized_hint\r\n : `temp_${normalized_hint}`;\r\n\r\n return `__SER___${safe_hint}${suffix}`;\r\n}\r\n","import {\r\n type MarkupTransformTarget,\r\n transform_markup_effect,\r\n} from \"$/markup/transform.ts\";\r\nimport { transform_script_effect } from \"$/script-transform/index.ts\";\r\n\r\n/**\r\n * Result returned by the direct whole-file Svelte transform.\r\n *\r\n * @example\r\n * ```ts\r\n * const result = transform_svelte_effect(\"<p>{yield* load()}</p>\", \"App.svelte\");\r\n * result.code;\r\n * ```\r\n *\r\n * @since 2.5.0\r\n */\r\nexport interface SvelteTransformResult {\r\n /** Transformed Svelte source. */\r\n code: string;\r\n}\r\n\r\n/**\r\n * Options accepted by the direct whole-file Svelte transform.\r\n *\r\n * @example\r\n * ```ts\r\n * const options: SvelteTransformOptions = { target: \"client\" };\r\n * ```\r\n *\r\n * @since 2.5.0\r\n */\r\nexport interface SvelteTransformOptions {\r\n /** Markup emission target passed through to the markup transform. */\r\n target?: MarkupTransformTarget;\r\n}\r\n\r\n/**\r\n * Lowers SER syntax in a complete Svelte component without using Svelte's\r\n * adapter API.\r\n *\r\n * @example\r\n * ```ts\r\n * const result = transform_svelte_effect(\r\n * \"<script effect>const value = yield* load()</script>\",\r\n * \"App.svelte\",\r\n * );\r\n * ```\r\n *\r\n * @since 2.5.0\r\n * @param content - Full Svelte component source to lower before Svelte parses\r\n * it.\r\n * @param filename - Component filename used in generated cache identifiers and\r\n * diagnostics.\r\n * @param options - Optional target configuration for markup lowering.\r\n * @returns The transformed component source.\r\n */\r\nexport function transform_svelte_effect(\r\n content: string,\r\n filename = \"unknown.svelte\",\r\n options: SvelteTransformOptions = {},\r\n): SvelteTransformResult {\r\n const script = find_script(content);\r\n\r\n let combined = content;\r\n\r\n if (script?.has_effect) {\r\n const result = transform_script_effect(script.text, filename, {\r\n emit_types: script.is_typescript,\r\n });\r\n\r\n combined = content.slice(0, script.effect_attr_start) +\r\n content.slice(script.effect_attr_end, script.open_end) +\r\n result.code +\r\n content.slice(script.close_start);\r\n }\r\n\r\n const result = transform_markup_effect(combined, filename, {\r\n target: options.target,\r\n });\r\n\r\n return { code: result.code };\r\n}\r\n\r\nfunction find_script(content: string):\r\n | {\r\n text: string;\r\n open_end: number;\r\n close_start: number;\r\n has_effect: boolean;\r\n effect_attr_start: number;\r\n effect_attr_end: number;\r\n is_typescript: boolean;\r\n }\r\n | undefined {\r\n const pattern = /<script\\b([^>]*)>([\\s\\S]*?)<\\/script\\s*>/gi;\r\n\r\n for (const match of content.matchAll(pattern)) {\r\n if (match.index === undefined || /\\bmodule\\b/.test(match[1] ?? \"\")) {\r\n continue;\r\n }\r\n\r\n const attrs = match[1] ?? \"\";\r\n const effect_match = /\\s+effect(?:\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s>]+))?/\r\n .exec(attrs);\r\n const open_end = match.index + match[0].indexOf(\">\") + 1;\r\n const attr_start = effect_match?.index ?? attrs.length;\r\n const attr_end = attr_start + (effect_match?.[0].length ?? 0);\r\n\r\n return {\r\n text: match[2],\r\n open_end,\r\n close_start: match.index + match[0].lastIndexOf(\"<\"),\r\n has_effect: effect_match !== null,\r\n effect_attr_start: match.index + \"<script\".length + attr_start,\r\n effect_attr_end: match.index + \"<script\".length + attr_end,\r\n is_typescript: has_typescript_lang(attrs),\r\n };\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction has_typescript_lang(attrs: string): boolean {\r\n const lang_match = /\\blang\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)'|([^\\s>]+))/i.exec(\r\n attrs,\r\n );\r\n const lang = (lang_match?.[1] ?? lang_match?.[2] ?? lang_match?.[3] ?? \"\")\r\n .toLowerCase();\r\n\r\n return lang === \"ts\" || lang === \"typescript\";\r\n}\r\n\r\nexport {\r\n type MarkupTransformOptions,\r\n type MarkupTransformResult,\r\n type MarkupTransformTarget,\r\n transform_markup_effect,\r\n} from \"$/markup/transform.ts\";\r\n\r\nexport {\r\n type BlockRef,\r\n type ScriptTransformResult,\r\n transform_script_effect,\r\n} from \"$/script-transform/index.ts\";\r\n"],"mappings":";;;;;;;;;;;;;;;AA+BA,SAAgB,iCACd,QACA,UACQ;CACR,MAAM,eAAe,oBAAoB,MAAM;CAC/C,MAAM,YAAY,aAAa,KAAK,KAAK,QAAQ,KAAK,IAAI,EAAE;CAE5D,MAAM,OAAO,aAAa,WACvB,KAAK,cAAc,OAAO,WAAW,EACrC,KAAK,IAAI;CAEZ,OAAO;EACL;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;CACF,EAAE,KAAK,IAAI;AACb;AAEA,SAAS,oBAAoB,QAAoC;CAC/D,MAAM,aAAa,OAAO,SAAS,UAAU,MAAM,UAAU;CAC7D,MAAM,OAAO,OAAO,SAAS,UAAU,MAAM,IAAI;CAEjD,OAAO;EACL;EACA,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC;CACzB;AACF;;;;;;;;;;;;ACvCA,SAAgB,gBACd,MACA,SACA,SACkB;CAClB,IAAI,GAAG,sBAAsB,IAAI,GAC/B,OAAO,2BAA2B,MAAM,SAAS,OAAO;CAG1D,IAAI,GAAG,oBAAoB,IAAI,GAC7B,OAAO,yBAAyB,MAAM,SAAS,OAAO;CAGxD,MAAM,OAAO,MAAM,SAAS,IAAI;CAEhC,OAAO;EACL,OAAO,CAAC;EACR,gBAAgB;EAChB,eAAe,CAAC,kBAAkB,CAAC,IAAI,GAAG,aAAa,IAAI,CAAC,CAAC;EAC7D,OAAO;GAAE,OAAO,KAAK,aAAa;GAAG,KAAK,KAAK;EAAI;CACrD;AACF;AAEA,SAAS,yBACP,MACA,SACA,SACkB;CAClB,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;EACzC,IAAI,CAAC,8BAA8B,IAAI,GAAG;GACxC,gBAAgB,KAAK,MAAM,SAAS,IAAI,EAAE,KAAK,CAAC;GAChD;EACF;EAEA,MAAM,UAAU,2BACd,MACA,SACA,kBAAkB,KAAK,IAAI,GAC3B,OACF;EAEA,oBAAoB,KAAK,GAAG,QAAQ,mBAAmB;EACvD,gBAAgB,KAAK,QAAQ,cAAc;EAC3C,4BAA4B,QAAQ;CACtC;CAIA,OAAO;EACL,OAAO,CAAC;EACR,cAAc;EACd,gBAAA,GALwB,KAAK,GAAG,gBAAgB,KAAK,IAAI,EAAE;EAM3D,eAAe,CAAC;EAChB;EACA,OAAO;GAAE,OAAO,KAAK,SAAS;GAAG,KAAK,KAAK;EAAI;CACjD;AACF;AAEA,SAAS,2BACP,MACA,SACA,SACkB;CAClB,MAAM,OAAO,KAAK;CAElB,IAAI,CAAC,8BAA8B,IAAI,GACrC,OAAO;EACL,OAAO,CAAC;EACR,gBAAgB,MAAM,SAAS,IAAI,EAAE,KAAK;EAC1C,eAAe,CAAC;EAChB,OAAO;GAAE,OAAO,KAAK,SAAS;GAAG,KAAK,KAAK;EAAI;CACjD;CAGF,IAAI,yBAAyB,IAAI,GAAG;EAClC,MAAM,OAAO,MAAM,SAAS,IAAI,EAAE,KAAK;EAEvC,OAAO;GACL,OAAO,CAAC;GACR,gBAAgB;GAChB,eAAe,CAAC,kBAAkB,CAAC,OAAO,GAAG,GAAG,aAAa,IAAI,CAAC,CAAC;GACnE,OAAO;IAAE,OAAO,KAAK,aAAa;IAAG,KAAK,KAAK;GAAI;EACrD;CACF;CAEA,IAAI,GAAG,mBAAmB,IAAI,KAAK,uBAAuB,IAAI,GAAG;EAC/D,MAAM,SAAS,MAAM,SAAS,KAAK,IAAI,EAAE,KAAK;EAC9C,MAAM,eAAe,gCAAgC,KAAK,IAAI;EAE9D,IACE,KAAK,cAAc,SAAS,GAAG,WAAW,eAC1C,yBAAyB,KAAK,KAAK,GACnC;GACA,MAAM,aAAa,6BAA6B,KAAK,OAAO,OAAO;GAEnE,OAAO;IACL,OAAO,CAAC;IACR,gBAAgB;IAChB,eAAe,CACb,kBACE,CAAC,GAAG,OAAO,KAAK,WAAW,EAAE,GAC7B,aAAa,YAAY,YAAY,CACvC,CACF;IACA,OAAO;KAAE,OAAO,KAAK,SAAS;KAAG,KAAK,KAAK;IAAI;GACjD;EACF;EAEA,MAAM,UAAU,wBACd,KAAK,OACL,SACA,eAAe,MAAM,GACrB,OACF;EACA,MAAM,aAAa,QAAQ,MAAM,KAAK,SAAS,KAAK,IAAI;EACxD,MAAM,YAAY,GAAG,OAAO,GAC1B,MAAM,SAAS,KAAK,aAAa,EAAE,KAAK,EACzC,GAAG,QAAQ,eAAe;EAE3B,OAAO;GACL,OAAO,QAAQ;GACf,cAAc,QAAQ;GACtB,gBAAgB;GAChB,eAAe,CACb,kBACE,CACE,GAAG,QAAQ,cAAc,SAAS,UAAU,MAAM,UAAU,GAC5D,SACF,GACA,CACE,GAAG,QAAQ,cAAc,SAAS,UAAU,MAAM,IAAI,GACtD,GAAG,aAAa,QAAQ,gBAAgB,CACtC,GAAG,cACH,GAAG,UACL,CAAC,CACH,CACF,CACF;GACA,OAAO;IAAE,OAAO,KAAK,SAAS;IAAG,KAAK,KAAK;GAAI;EACjD;CACF;CAEA,MAAM,UAAU,wBACd,MACA,SACA,QACA,OACF;CAEA,IAAI,uBAAuB,IAAI,GAC7B,OAAO;EACL,OAAO,QAAQ;EACf,cAAc,QAAQ;EACtB,gBAAgB,QAAQ,iBAAiB;EACzC,eAAe,QAAQ;EACvB,OAAO;GAAE,OAAO,KAAK,SAAS;GAAG,KAAK,KAAK;EAAI;CACjD;CAGF,MAAM,aAAa,QAAQ,MAAM,KAAK,SAAS,KAAK,IAAI;CAExD,OAAO;EACL,OAAO,QAAQ;EACf,cAAc,QAAQ;EACtB,gBAAgB;EAChB,eAAe,CACb,kBACE,CACE,GAAG,QAAQ,cAAc,SAAS,UAAU,MAAM,UAAU,GAC5D,QAAQ,iBAAiB,GAC3B,GACA,CACE,GAAG,QAAQ,cAAc,SAAS,UAAU,MAAM,IAAI,GACtD,GAAG,aAAa,QAAQ,gBAAgB,UAAU,CACpD,CACF,CACF;EACA,OAAO;GAAE,OAAO,KAAK,SAAS;GAAG,KAAK,KAAK;EAAI;CACjD;AACF;AAEA,SAAS,wBACP,MACA,SACA,MACA,SACmB;CACnB,MAAM,eAID,CAAC;CAEN,MAAM,QAAuB,CAAC;CAC9B,MAAM,eAAyB,CAAC;CAChC,MAAM,aAAuB,CAAC;CAC9B,MAAM,OAAiB,CAAC;CAExB,yBAAyB,OAAO,SAAS;EACvC,MAAM,YAAY,QAAQ,eAAe,IAAI;EAC7C,MAAM,aAAa,YAAY,SAAS,IAAI,EAAE,KAAK;EACnD,MAAM,cAAc,uBAAuB,YAAY,MAAM,OAAO;EAEpE,IAAI,aAAa;GACf,aAAa,KAAK,YAAY,WAAW;GACzC,MAAM,KAAK;IAAE,MAAM;IAAW,MAAM,YAAY;GAAK,CAAC;EACxD,OACE,MAAM,KAAK,EAAE,MAAM,UAAU,CAAC;EAGhC,WAAW,KAAK,GAAG,UAAU,KAAK,WAAW,EAAE;EAC/C,KAAK,KAAK,GAAG,aAAa,UAAU,CAAC;EACrC,aAAa,KAAK;GAChB,OAAO,KAAK,SAAS;GACrB,KAAK,KAAK;GACV,MAAM;EACR,CAAC;CACH,CAAC;CAED,IAAI,aAAa,WAAW,GAC1B,OAAO;EACL;EACA;EACA,gBAAgB,MAAM,SAAS,IAAI,EAAE,KAAK;EAC1C,eAAe,CAAC;CAClB;CAGF,aAAa,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;CAE7C,IAAI,OAAO,MAAM,SAAS,IAAI;CAE9B,MAAM,iBAAiB,KAAK,aAAa;CAEzC,KAAK,MAAM,eAAe,cACxB,OAAO,KAAK,MAAM,GAAG,YAAY,QAAQ,cAAc,IACrD,YAAY,OACZ,KAAK,MAAM,YAAY,MAAM,cAAc;CAG/C,OAAO;EACL;EACA;EACA,gBAAgB,KAAK,KAAK;EAC1B,eAAe,CAAC,kBAAkB,YAAY,IAAI,CAAC;CACrD;AACF;AAEA,SAAS,2BACP,MACA,SACA,MACA,SAKA;CACA,MAAM,sBAAgC,CAAC;CACvC,MAAM,eAID,CAAC;CAEN,yBAAyB,OAAO,eAAe;EAC7C,MAAM,UAAU,8BACd,YACA,SACA,MACA,OACF;EAEA,oBAAoB,KAAK,QAAQ,WAAW;EAC5C,aAAa,KAAK;GAChB,OAAO,WAAW,SAAS;GAC3B,KAAK,WAAW;GAChB,MAAM,QAAQ;EAChB,CAAC;CACH,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,cACxB,OAAO,KAAK,MAAM,GAAG,YAAY,QAAQ,cAAc,IACrD,YAAY,OACZ,KAAK,MAAM,YAAY,MAAM,cAAc;CAG/C,OAAO;EACL;EACA,gBAAgB,KAAK,KAAK;EAC1B,yBAAyB,aAAa,SAAS;CACjD;AACF;AAEA,SAAS,8BACP,MACA,SACA,MACA,SAC6C;CAC7C,MAAM,aAAa,YAAY,SAAS,IAAI,EAAE,KAAK;CACnD,MAAM,cAAc,QAAQ,iBAAiB,UAAU,MAAM;CAC7D,MAAM,YAAY,sBAAsB,MAAM,OAAO;CAErD,MAAM,YAAY,IADL,aAAa,UACD,EAAE,KAAK,IAAI,EAAE;CAEtC,OAAO;EACL,aAAa,aAAa,YAAY,eAAe,WAAW;EAChE,YAAY;GACV,SAAS,QAAQ,gBAAgB;GACjC,OAAO,KAAK,UAAU,SAAS,EAAE;GACjC,SAAS,UAAU;GACnB,kBAAkB,YAAY;GAC9B;EACF,EAAE,KAAK,EAAE;CACX;AACF;AAEA,SAAS,uBACP,YACA,MACA,SACmD;CACnD,IAAI,CAAC,QAAQ,YACX;CAGF,MAAM,cAAc,QAAQ,sBAAsB,IAAI;CAGtD,OAAO;EACL,aAAa,YAAY,YAAY,eAHnB,iBAAiB,UAG2B,EAAE;EAChE,MACE,GAAG,QAAQ,YAAY,6BAA6B,YAAY;CACpE;AACF;AAEA,SAAS,iBAAiB,YAA4B;CACpD,OAAO,WAAW,QAAQ,eAAe,EAAE;AAC7C;AAEA,SAAS,sBACP,MACA,SACQ;CACR,OAAO,GAAG,QAAQ,SAAS,GAAG,KAAK,SAAS,EAAE,GAAG,KAAK;AACxD;AAEA,SAAS,uBAAuB,MAAoC;CAClE,OAAO,KAAK,cAAc,QAAQ,GAAG,WAAW,mBAC9C,KAAK,cAAc,QAAQ,GAAG,WAAW;AAC7C;AAEA,SAAS,uBAAuB,MAA8B;CAC5D,IAAI,CAAC,GAAG,iBAAiB,IAAI,GAC3B,OAAO;CAGT,MAAM,SAAS,KAAK;CAEpB,IAAI,GAAG,aAAa,MAAM,GACxB,OAAO,OAAO,KAAK,WAAW,GAAG;CAGnC,OAAO,GAAG,2BAA2B,MAAM,KACzC,GAAG,aAAa,OAAO,UAAU,KACjC,OAAO,WAAW,KAAK,WAAW,GAAG;AACzC;AAEA,SAAS,eAAe,QAAwB;CAG9C,OAFc,OAAO,MAAM,mBAEhB,IAAI,MAAM;AACvB;AAEA,SAAS,kBAAkB,MAA8B;CACvD,IAAI,GAAG,aAAa,IAAI,GACtB,OAAO,KAAK;CAGd,OAAO;AACT;AAEA,SAAS,6BACP,MACA,SACQ;CACR,IAAI;CAEJ,qBAAqB,OAAO,SAAS;EACnC,QAAQ,YAAY,SAAS,IAAI,EAAE,KAAK;CAC1C,CAAC;CAED,OAAO,SAAS;AAClB;AAEA,SAAS,kBACP,YACA,MACa;CACb,OAAO;EACL;EACA,MAAM,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC;CACzB;AACF;AAEA,SAAS,aACP,WACA,iBAAoC,CAAC,GAC3B;CACV,MAAM,WAAW,IAAI,IAAI,cAAc;CAEvC,OAAO,yBAAyB,SAAS,EAAE,QACxC,eACC,CAAC,WAAW,WAAW,UAAU,KAAK,CAAC,SAAS,IAAI,UAAU,CAClE;AACF;AAEA,SAAS,gCAAgC,MAAyB;CAChE,IAAI,GAAG,aAAa,IAAI,GACtB,OAAO,CAAC,KAAK,IAAI;CAGnB,IAAI,GAAG,0BAA0B,IAAI,GACnC,OAAO,gCAAgC,KAAK,UAAU;CAGxD,IACE,GAAG,2BAA2B,IAAI,KAAK,GAAG,0BAA0B,IAAI,GAExE,OAAO,gCAAgC,KAAK,UAAU;CAGxD,IAAI,GAAG,0BAA0B,IAAI,GACnC,OAAO,KAAK,WAAW,SAAS,aAAa;EAC3C,IAAI,GAAG,8BAA8B,QAAQ,GAC3C,OAAO,CAAC,SAAS,KAAK,IAAI;EAG5B,IAAI,GAAG,qBAAqB,QAAQ,GAClC,OAAO,gCAAgC,SAAS,WAAW;EAG7D,IAAI,GAAG,mBAAmB,QAAQ,GAChC,OAAO,gCAAgC,SAAS,UAAU;EAG5D,OAAO,CAAC;CACV,CAAC;CAGH,IAAI,GAAG,yBAAyB,IAAI,GAClC,OAAO,KAAK,SAAS,SAAS,YAC5B,GAAG,gBAAgB,OAAO,IACtB,gCAAgC,QAAQ,UAAU,IAClD,gCAAgC,OAAO,CAC7C;CAGF,OAAO,CAAC;AACV;;;;;;;;;;;;;;;;;;;;;;AClcA,SAAgB,wBACd,SACA,UACA,UAAkC,CAAC,GACZ;CACvB,IAAI,eAAe;CAEnB,MAAM,cAAc,GAAG,iBACrB,UACA,SACA,GAAG,aAAa,QAChB,MACA,GAAG,WAAW,EAChB;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,oBAAoB;;CAGxB,MAAM,oBAAoB,yBACxB,aACA,UACA,QACF;CAEA,MAAM,wBAAwB,yBAC5B,aACA,6CACA,gBACF;CAEA,MAAM,qBAAqB,yBACzB,aACA,UACA,SACF;CAEA,MAAM,0BAA0B,SAC9B,4BAA4B,IAAI,IAAI,IAChC,eAAe,QAAQ,oBAAoB,MAAM,EAAE,CAAC,IACpD,eAAe,QAAQ,IAAI;CAEjC,MAAM,mBAA0C;EAC9C,QAAQ,eAAe,QAAQ,gBAAgB;EAC/C,YAAY,wBACR,mBACA,uBAAuB,gBAAgB;EAC3C,kBAAkB,eAAe,QAAQ,oBAAoB;EAC7D,QAAQ,oBAAoB,WAAW,uBAAuB,QAAQ;EACtE,SAAS,eAAe,QAAQ,iBAAiB;EACjD,SAAS,qBAAqB,YAAY,uBAAuB,SAAS;CAC5E;CAEA,MAAM,UAAiC;EACrC;EACA,iBAAiB,iBAAiB;EAClC,aAAa,iBAAiB;EAC9B;EACA,iBAAiB,MAAe;GAC9B,OAAO,eAAe,QAAQ,oBAAoB,QAAQ,UAAU,EAAE,CAAC;EACzE;EACA,eAAe,MAAe;GAC5B,MAAM,SAAS,iBAAiB,IAAI,KAAK,IAAI;GAC7C,MAAM,OAAO,oBAAoB,QAAQ,OAAO,YAAY,GAAG,MAAM;GAErE,gBAAgB;GAEhB,OAAO,eAAe,QAAQ,IAAI;EACpC;EACA,sBAAsB,MAAe;GACnC,OAAO,eAAe,QACpB,oBAAoB,QAAQ,QAAQ,YAAY,EAAE,CACpD;EACF;CACF;;CAGA,KAAK,MAAM,QAAQ,YAAY,YAAY;EACzC,0BAA0B,MAAM,SAAS,QAAQ;EACjD,iCAAiC,MAAM,SAAS,QAAQ;EAIxD,IAAI,CAF6B,8BAA8B,IAEnC,GAC1B;EAGF,aAAa;EACb,MAAM,UAAU,gBAAgB,MAAM,SAAS,OAAO;EAEtD,IAAI,QAAQ,cAAc,SAAS,KAAK,yBAAyB,IAAI,GAEnE,MAAM,IAAI,uBAAuB,UADpB,MAAM,SAAS,IACkB,CAAC;EAGjD,MAAM,UACJ,QAAQ,MAAM,OACd,QAAQ,MAAM,KACd,QAAQ,cACV;EAEA,IAAI,QAAQ,MAAM,SAAS,KAAK,QAAQ,cAAc,QAAQ;GAC5D,MAAM,oBAAoB,QAAQ,MAAM,KAAK,SAC3C,KAAK,OACD,OAAO,KAAK,KAAK,YAAY,KAAK,KAAK,iBACvC,OAAO,KAAK,KAAK,sBACvB;GAEA,MAAM,SAAS,CACb,GAAI,QAAQ,gBAAgB,CAAC,GAC7B,GAAG,iBACL,EAAE,KAAK,IAAI;GAEX,MAAM,WAAW,QAAQ,MAAM,OAAO,SAAS,IAAI;EACrD;EAEA,cAAc,KAAK,GAAG,QAAQ,aAAa;EAC3C,4BAA4B,QAAQ,2BAA2B;EAC/D,sBAAsB,QAAQ,MAAM,MAAM,SACxC,KAAK,MAAM,SAAS,GAAG,iBAAiB,OAAO,SAAS,KAAK,KAC/D;CACF;CAEA,IAAI,CAAC,YAAY;EACf,WAAW,KAAK;GAAE,IAAI;GAAU,MAAM;EAAS,CAAC;EAEhD,OAAO;GAAE,MAAM;GAAS,QAAQ;EAAW;CAC7C;;CAGA,MAAM,UAAU,aACd,mBACA,uBACA,oBACA,kBACA;EACE,kBAAkB,cAAc,SAAS,KAAK;EAC9C,cAAc,cAAc,SAAS,KAAK;EAC1C,eAAe,cAAc,SAAS;CACxC,CACF;CAEA,MAAM,cAAc,CAAC,GAAG,YAAY,UAAU,EAC3C,QAAQ,EACR,KAAK,GAAG,mBAAmB;CAE9B,IAAI,SACF,IAAI,aACF,MAAM,YAAY,YAAY,KAAK,OAAO,OAAO;MAEjD,MAAM,QAAQ,UAAU,IAAI;;CAKhC,IAAI,cAAc,SAAS,GAAG;EAC5B,MAAM,gBAAgB,iCACpB,eACA,gBACF;EAEA,MAAM,OAAO,OAAO,aAAa;CACnC;CAEA,WAAW,KAAK;EAAE,IAAI;EAAU,MAAM;CAAS,CAAC;CAEhD,MAAM,OAAO,MAAM,SAAS;CAE5B,OAAO;EACL;EACA,QAAQ;EACR,KAAK,kBAAkB,OAAO,QAAQ;EACtC,aAAa,0BAA0B,SAAS,MAAM,WAAW;CACnE;AACF;AAEA,SAAS,0BACP,SACA,MACA,aACc;CACd,MAAM,aAAa,YAAY,WAAW,SAAS,SAAS;EAC1D,MAAM,cAAqC,CAAC;EAE5C,IAAI,8BAA8B,IAAI,KAAK,GAAG,oBAAoB,IAAI,GACpE,KAAK,MAAM,QAAQ,KAAK,gBAAgB,cACtC,sCAAsC,KAAK,MAAM,WAAW;EAIhE,yBAAyB,OAAO,SAAS;GACvC,MAAM,OAAO,QAAQ,MAAM,KAAK,SAAS,GAAG,KAAK,GAAG,EAAE,KAAK;GAE3D,YAAY,KAAK;IACf,eAAe,KAAK,SAAS;IAC7B,aAAa,KAAK;IAClB;IACA,OAAO;GACT,CAAC;EACH,CAAC;EAED,OAAO;CACT,CAAC;CAED,MAAM,cAAqD,CAAC;CAE5D,OAAO,WAAW,SAAS,cAAc;EACvC,MAAM,kBAAkB,8BACtB,MACA,WACA,WACF;EAEA,IAAI,kBAAkB,GACpB,OAAO,CAAC;EAGV,MAAM,gBAAgB,kBAAkB,UAAU,KAAK;EACvD,YAAY,KAAK;GAAE,OAAO;GAAiB,KAAK;EAAc,CAAC;EAE/D,OAAO,CAAC;GACN,eAAe,UAAU;GACzB,aAAa,UAAU;GACvB,gBAAgB;GAChB,cAAc;EAChB,CAAC;CACH,CAAC;AACH;AASA,SAAS,sCACP,MACA,YACM;CACN,IAAI,GAAG,aAAa,IAAI,GAAG;EACzB,WAAW,KAAK;GACd,eAAe,KAAK,SAAS;GAC7B,aAAa,KAAK;GAClB,MAAM,KAAK;GACX,OAAO;EACT,CAAC;EAED;CACF;CAEA,KAAK,MAAM,WAAW,KAAK,UAAU;EACnC,IAAI,GAAG,oBAAoB,OAAO,GAChC;EAGF,sCAAsC,QAAQ,MAAM,UAAU;CAChE;AACF;AAEA,SAAS,8BACP,MACA,WACA,aACQ;CACR,IAAI,eAAe;CAEnB,OAAO,eAAe,KAAK,QAAQ;EACjC,MAAM,QAAQ,KAAK,QAAQ,UAAU,MAAM,YAAY;EAEvD,IAAI,QAAQ,GACV,OAAO;EAGT,MAAM,MAAM,QAAQ,UAAU,KAAK;EACnC,MAAM,sBAAsB,YAAY,MAAM,UAC5C,QAAQ,MAAM,OAAO,MAAM,MAAM,KACnC;EACA,MAAM,gBAAgB,UAAU,UAAU,WACxC,yBAAyB,MAAM,OAAO,GAAG;EAE3C,IAAI,CAAC,uBAAuB,eAC1B,OAAO;EAGT,eAAe,UAAU,UAAU,eAAe,QAAQ,IAAI;CAChE;CAEA,OAAO;AACT;AAEA,SAAS,yBACP,MACA,OACA,KACS;CACT,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;AACjE;AAEA,SAAS,mBAAmB,WAA4B;CACtD,OACG,aAAa,MAAM,aAAa,MAChC,aAAa,MAAM,aAAa,OAChC,aAAa,MAAM,aAAa,MACjC,cAAc,MACd,cAAc;AAElB;AAEA,SAAS,iCACP,MACA,SACA,UACM;CACN,MAAM,aAAa,kCAAkC,IAAI;CAEzD,IAAI,CAAC,YACH;CAGF,MAAM,IAAI,gBACR;EACE,mCAAmC,SAAS;EAC5C;EACA;EACA;EACA,MAAM,SAAS,UAAU;CAC3B,EAAE,KAAK,IAAI,GACX,QACF;AACF;AAEA,SAAS,kCACP,MACqB;CACrB,IAAI;CAEJ,SAAS,MAAM,MAAqB;EAClC,IAAI,OACF;EAGF,IACE,GAAG,sBAAsB,IAAI,KAC7B,KAAK,eACL,8BAA8B,KAAK,WAAW,GAC9C;GACA,QAAQ;GACR;EACF;EAEA,KAAK,aAAa,KAAK;CACzB;CAEA,MAAM,IAAI;CAEV,OAAO;AACT;AAEA,SAAS,oBAAoB,eAE3B;CACA,MAAM,aAAa,IAAI,IAAI,aAAa;CAExC,OAAO,EACL,QAAQ,MAAsB;EAC5B,IAAI,YAAY;EAChB,IAAI,SAAS;EAEb,OAAO,WAAW,IAAI,SAAS,GAAG;GAChC,YAAY,GAAG,KAAK,GAAG;GACvB,UAAU;EACZ;EAEA,WAAW,IAAI,SAAS;EAExB,OAAO;CACT,EACF;AACF;AAEA,SAAS,oBAAoB,MAAc,QAAwB;CACjE,MAAM,kBAAkB,KAAK,QAAQ,mBAAmB,GAAG;CAK3D,OAAO,WAJW,cAAc,KAAK,eAAe,IAChD,kBACA,QAAQ,oBAEkB;AAChC;;;;;;;;;;;;;;;;;;;;;;;ACxYA,SAAgB,wBACd,SACA,WAAW,kBACX,UAAkC,CAAC,GACZ;CACvB,MAAM,SAAS,YAAY,OAAO;CAElC,IAAI,WAAW;CAEf,IAAI,QAAQ,YAAY;EACtB,MAAM,SAAS,wBAAwB,OAAO,MAAM,UAAU,EAC5D,YAAY,OAAO,cACrB,CAAC;EAED,WAAW,QAAQ,MAAM,GAAG,OAAO,iBAAiB,IAClD,QAAQ,MAAM,OAAO,iBAAiB,OAAO,QAAQ,IACrD,OAAO,OACP,QAAQ,MAAM,OAAO,WAAW;CACpC;CAMA,OAAO,EAAE,MAJM,wBAAwB,UAAU,UAAU,EACzD,QAAQ,QAAQ,OAClB,CAEoB,EAAE,KAAK;AAC7B;AAEA,SAAS,YAAY,SAUP;CAGZ,KAAK,MAAM,SAAS,QAAQ,SAAS,4CAAO,GAAG;EAC7C,IAAI,MAAM,UAAU,KAAA,KAAa,aAAa,KAAK,MAAM,MAAM,EAAE,GAC/D;EAGF,MAAM,QAAQ,MAAM,MAAM;EAC1B,MAAM,eAAe,mDAClB,KAAK,KAAK;EACb,MAAM,WAAW,MAAM,QAAQ,MAAM,GAAG,QAAQ,GAAG,IAAI;EACvD,MAAM,aAAa,cAAc,SAAS,MAAM;EAChD,MAAM,WAAW,cAAc,eAAe,GAAG,UAAU;EAE3D,OAAO;GACL,MAAM,MAAM;GACZ;GACA,aAAa,MAAM,QAAQ,MAAM,GAAG,YAAY,GAAG;GACnD,YAAY,iBAAiB;GAC7B,mBAAmB,MAAM,QAAQ,IAAmB;GACpD,iBAAiB,MAAM,QAAQ,IAAmB;GAClD,eAAe,oBAAoB,KAAK;EAC1C;CACF;AAGF;AAEA,SAAS,oBAAoB,OAAwB;CACnD,MAAM,aAAa,kDAAkD,KACnE,KACF;CACA,MAAM,QAAQ,aAAa,MAAM,aAAa,MAAM,aAAa,MAAM,IACpE,YAAY;CAEf,OAAO,SAAS,QAAQ,SAAS;AACnC"}
@@ -4,9 +4,9 @@ interface ScriptTransformOptions {
4
4
  emit_types?: boolean;
5
5
  }
6
6
  /**
7
- * Transforms a `<script effect>` body by extracting top-level `yield*`
8
- * expressions into `$state` temp bindings and wrapping the lowered
9
- * assignments in a dependency-tracked `$effect` block.
7
+ * Transforms a `<script effect>` body by lowering top-level `yield*`
8
+ * expressions into Svelte-compatible async rendering declarations or into
9
+ * dependency-tracked `$effect` blocks for effectful statements.
10
10
  *
11
11
  * @example
12
12
  * ```ts
@@ -10,15 +10,3 @@ import ts from "typescript";
10
10
  * @returns Nothing.
11
11
  */
12
12
  export declare function validate_rune_yield_usage(node: ts.Node, content: string, filename: string): void;
13
- /**
14
- * Identifies `$state(...)` and `$state.raw(...)` initializer calls.
15
- *
16
- * @since 2.0.0
17
- * @param expr - Expression to classify.
18
- * @param content - Original script source used to preserve argument text.
19
- * @returns State rune details when the expression is a state initializer.
20
- */
21
- export declare function get_state_rune_initializer(expr: ts.Expression, content: string): {
22
- rune_name: "$state" | "$state.raw";
23
- value_text: string;
24
- } | undefined;