svelte-effect-runtime 1.0.4 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { t as MagicString } from "../chunks/magic-string.es-dQ3Qnajt.js";
1
+ import { t as MagicString } from "../chunks/magic-string.es-5gRBdMgP.js";
2
2
  import ts from "typescript";
3
3
  //#region internal/transform.ts
4
4
  const DEFAULT_RUNTIME_MODULE_ID = "svelte-effect-runtime";
@@ -1,4 +1,4 @@
1
- import { transformEffectMarkup } from "./internal/markup.js";
1
+ import { t as transformEffectMarkup } from "./chunks/markup-DItLw1g8.js";
2
2
  import { transformEffectScript } from "./internal/transform.js";
3
3
  import { effectPreprocess } from "./preprocess.js";
4
4
  export { effectPreprocess, transformEffectMarkup, transformEffectScript };
package/dist/mod.js CHANGED
@@ -1,4 +1,4 @@
1
- import { transformEffectMarkup } from "./internal/markup.js";
1
+ import { t as transformEffectMarkup } from "./chunks/markup-DItLw1g8.js";
2
2
  import { transformEffectScript } from "./internal/transform.js";
3
3
  import { effectPreprocess } from "./preprocess.js";
4
4
  import { ClientRuntime, ClientRuntimeTag, getEffectRuntimeOrThrow, provideEffectRuntime, registerHotDispose, runComponentEffect, runInlineEffect, to_effect, to_native } from "./client.js";
@@ -1,4 +1,4 @@
1
- import { transformEffectMarkup } from "./internal/markup.js";
1
+ import { t as transformEffectMarkup } from "./chunks/markup-DItLw1g8.js";
2
2
  import { transformEffectScript } from "./internal/transform.js";
3
3
  //#region preprocess.ts
4
4
  function effectPreprocess(options = {}) {
package/dist/root-node.js CHANGED
@@ -1,4 +1,4 @@
1
- import { transformEffectMarkup } from "./internal/markup.js";
1
+ import { t as transformEffectMarkup } from "./chunks/markup-DItLw1g8.js";
2
2
  import { transformEffectScript } from "./internal/transform.js";
3
3
  import { effectPreprocess } from "./preprocess.js";
4
4
  import { ClientRuntime, ClientRuntimeTag, getEffectRuntimeOrThrow, provideEffectRuntime, registerHotDispose, runComponentEffect, runInlineEffect, to_effect, to_native } from "./client.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelte-effect-runtime",
3
- "version": "1.0.4",
3
+ "version": "1.1.0",
4
4
  "description": "Client-side Effect runtime support for Svelte <script> blocks.",
5
5
  "license": "BSD-3-Clause",
6
6
  "type": "module",
@@ -1 +0,0 @@
1
- {"version":3,"file":"markup.js","names":[],"sources":["../../../modules/svelte-effect-runtime/internal/markup.ts"],"sourcesContent":["import MagicString, { type SourceMap } from \"magic-string\";\nimport { parse, type AST } from \"svelte/compiler\";\nimport ts from \"typescript\";\nimport type { EffectPreprocessOptions } from \"../preprocess.ts\";\n\nconst DEFAULT_RUNTIME_MODULE_ID = \"svelte-effect-runtime\";\nconst DEFAULT_EFFECT_MODULE_ID = \"effect\";\nconst DEFAULT_SVELTE_MODULE_ID = \"svelte\";\nconst MARKUP_HELPER_PREFIX = \"__svelteEffectRuntimeMarkup\";\n\ninterface TransformEffectMarkupOptions extends EffectPreprocessOptions {\n filename: string;\n}\n\ninterface TransformEffectMarkupResult {\n code: string;\n map: SourceMap;\n}\n\ninterface ExcludedRange {\n start: number;\n end: number;\n}\n\ninterface Replacement {\n start: number;\n end: number;\n text: string;\n}\n\ninterface MarkupCandidate {\n expressionText: string;\n placeholder: string;\n start: number;\n end: number;\n}\n\ninterface WrappedExpression {\n expression: ts.Expression;\n offset: number;\n sourceFile: ts.SourceFile;\n}\n\nexport function transformEffectMarkup(\n content: string,\n options: TransformEffectMarkupOptions,\n): TransformEffectMarkupResult {\n const sanitized = sanitizeEffectMarkup(\n content,\n options.filename,\n );\n\n if (sanitized.candidates.length === 0) {\n const identity = new MagicString(content);\n return {\n code: content,\n map: identity.generateMap({\n hires: true,\n includeContent: true,\n source: options.filename,\n }),\n };\n }\n\n const replacements = collectMarkupReplacements(\n create_parse_safe_markup_source(sanitized.code),\n sanitized.candidates,\n options.filename,\n );\n\n const magicString = new MagicString(content);\n\n for (const replacement of replacements) {\n magicString.overwrite(replacement.start, replacement.end, replacement.text);\n }\n\n injectMarkupHelpers(magicString, content, options);\n\n return {\n code: magicString.toString(),\n map: magicString.generateMap({\n hires: true,\n includeContent: true,\n source: options.filename,\n }),\n };\n}\n\nfunction create_parse_safe_markup_source(content: string): string {\n const excluded_ranges = findExcludedRanges(content);\n\n if (excluded_ranges.length === 0) {\n return content;\n }\n\n let result = \"\";\n let cursor = 0;\n\n for (const range of excluded_ranges) {\n result += content.slice(cursor, range.start);\n result += mask_excluded_text(content.slice(range.start, range.end));\n cursor = range.end;\n }\n\n result += content.slice(cursor);\n return result;\n}\n\nfunction mask_excluded_text(text: string): string {\n let result = \"\";\n\n for (const character of text) {\n result += character === \"\\n\" || character === \"\\r\" ? character : \" \";\n }\n\n return result;\n}\n\nfunction sanitizeEffectMarkup(\n content: string,\n filename: string,\n): { code: string; candidates: MarkupCandidate[] } {\n const excludedRanges = findExcludedRanges(content);\n const candidates: MarkupCandidate[] = [];\n const magicString = new MagicString(content);\n let helperIndex = 0;\n\n for (let index = 0; index < content.length; index += 1) {\n if (content[index] !== \"{\") {\n continue;\n }\n\n const range = findExcludedRangeAt(excludedRanges, index);\n\n if (range) {\n index = range.end - 1;\n continue;\n }\n\n const closingIndex = findClosingBrace(content, index + 1);\n\n if (closingIndex === -1) {\n continue;\n }\n\n const inner = content.slice(index + 1, closingIndex);\n const candidate = getCandidateForBraceTag(\n index,\n closingIndex,\n inner,\n filename,\n helperIndex,\n );\n\n if (candidate) {\n helperIndex += 1;\n candidates.push(candidate);\n magicString.overwrite(\n candidate.start,\n candidate.end,\n candidate.placeholder,\n );\n }\n\n index = closingIndex;\n }\n\n return {\n code: magicString.toString(),\n candidates,\n };\n}\n\nfunction collectMarkupReplacements(\n sanitizedContent: string,\n candidates: readonly MarkupCandidate[],\n filename: string,\n): Replacement[] {\n const ast = parse(sanitizedContent, {\n filename,\n modern: true,\n });\n const candidatesByPlaceholder = new Map(\n candidates.map((candidate) => [candidate.placeholder, candidate]),\n );\n const replacements: Replacement[] = [];\n const matchedPlaceholders = new Set<string>();\n\n visitFragment(ast.fragment, candidatesByPlaceholder, matchedPlaceholders, (\n candidate,\n kind,\n ) => {\n replacements.push(makeAstReplacement(candidate, kind, filename));\n });\n\n const unmatched = candidates.filter((candidate) =>\n !matchedPlaceholders.has(candidate.placeholder)\n );\n\n if (unmatched.length > 0) {\n throw new Error(\n `${filename}: failed to classify some markup Effect expressions.\\n` +\n unmatched.map((candidate) =>\n `Problematic expression:\\n${candidate.expressionText}`\n ).join(\"\\n\\n\"),\n );\n }\n\n return replacements.sort((left, right) => left.start - right.start);\n}\n\nfunction getCandidateForBraceTag(\n openBraceIndex: number,\n closeBraceIndex: number,\n inner: string,\n filename: string,\n helperIndex: number,\n): MarkupCandidate | undefined {\n const trimmed = inner.trimStart();\n const leadingWhitespaceLength = inner.length - trimmed.length;\n\n if (!containsYieldStarText(trimmed)) {\n return undefined;\n }\n\n if (trimmed.startsWith(\"@const \")) {\n const initializerRange = findConstInitializerRange(\n trimmed.slice(\"@const \".length),\n filename,\n );\n\n return initializerRange\n ? makeMarkupCandidate(\n openBraceIndex + 1 + leadingWhitespaceLength + \"@const \".length +\n initializerRange.start,\n openBraceIndex + 1 + leadingWhitespaceLength + \"@const \".length +\n initializerRange.end,\n trimmed.slice(\"@const \".length + initializerRange.start,\n \"@const \".length + initializerRange.end),\n helperIndex,\n )\n : undefined;\n }\n\n if (trimmed.startsWith(\"#if \")) {\n return makeMarkupCandidate(\n openBraceIndex + 1 + leadingWhitespaceLength + \"#if \".length,\n closeBraceIndex,\n trimmed.slice(\"#if \".length),\n helperIndex,\n );\n }\n\n if (trimmed.startsWith(\":else if \")) {\n return makeMarkupCandidate(\n openBraceIndex + 1 + leadingWhitespaceLength + \":else if \".length,\n closeBraceIndex,\n trimmed.slice(\":else if \".length),\n helperIndex,\n );\n }\n\n if (trimmed.startsWith(\"#each \")) {\n const eachHeader = trimmed.slice(\"#each \".length);\n const asIndex = findTopLevelKeyword(eachHeader, \" as \");\n\n if (asIndex === -1) {\n return undefined;\n }\n\n const listExpression = eachHeader.slice(0, asIndex);\n\n return makeMarkupCandidate(\n openBraceIndex + 1 + leadingWhitespaceLength + \"#each \".length,\n openBraceIndex + 1 + leadingWhitespaceLength + \"#each \".length +\n listExpression.length,\n listExpression,\n helperIndex,\n );\n }\n\n if (trimmed.startsWith(\"#await \")) {\n const awaitHeader = trimmed.slice(\"#await \".length);\n const boundary = findAwaitBoundary(awaitHeader);\n const expressionText = boundary === -1\n ? awaitHeader\n : awaitHeader.slice(0, boundary);\n\n return makeMarkupCandidate(\n openBraceIndex + 1 + leadingWhitespaceLength + \"#await \".length,\n openBraceIndex + 1 + leadingWhitespaceLength + \"#await \".length +\n expressionText.length,\n expressionText,\n helperIndex,\n );\n }\n\n if (trimmed.startsWith(\"@html \")) {\n return makeMarkupCandidate(\n openBraceIndex + 1 + leadingWhitespaceLength + \"@html \".length,\n closeBraceIndex,\n trimmed.slice(\"@html \".length),\n helperIndex,\n );\n }\n\n if (trimmed.startsWith(\"@render \")) {\n throw new Error(\n `${filename}: {@render ...} cannot depend on yield* in markup right now.\\nMove the Effect code into <script effect> or a helper function instead.\\n\\nProblematic tag:\\n{${inner}}`,\n );\n }\n\n if (trimmed.startsWith(\"@attach \")) {\n return makeMarkupCandidate(\n openBraceIndex + 1 + leadingWhitespaceLength + \"@attach \".length,\n closeBraceIndex,\n trimmed.slice(\"@attach \".length),\n helperIndex,\n );\n }\n\n if (trimmed.startsWith(\"#key \")) {\n return makeMarkupCandidate(\n openBraceIndex + 1 + leadingWhitespaceLength + \"#key \".length,\n closeBraceIndex,\n trimmed.slice(\"#key \".length),\n helperIndex,\n );\n }\n\n if (\n trimmed.startsWith(\"/\") || trimmed.startsWith(\":then\") ||\n trimmed.startsWith(\":catch\") || trimmed === \":else\"\n ) {\n return undefined;\n }\n\n if (trimmed.startsWith(\"...\")) {\n return makeMarkupCandidate(\n openBraceIndex + 1 + leadingWhitespaceLength + \"...\".length,\n closeBraceIndex,\n trimmed.slice(\"...\".length),\n helperIndex,\n );\n }\n\n return makeMarkupCandidate(\n openBraceIndex + 1,\n closeBraceIndex,\n inner,\n helperIndex,\n );\n}\n\nfunction makeMarkupCandidate(\n start: number,\n end: number,\n expressionText: string,\n helperIndex: number,\n): MarkupCandidate {\n const placeholder = `${MARKUP_HELPER_PREFIX}Placeholder${helperIndex}`;\n\n return {\n expressionText,\n placeholder,\n start,\n end,\n };\n}\n\nfunction makeAstReplacement(\n candidate: MarkupCandidate,\n kind: \"plain\" | \"each\" | \"await\" | \"event\",\n filename: string,\n): Replacement {\n if (kind === \"event\") {\n return {\n start: candidate.start,\n end: candidate.end,\n text: transformEventExpression(candidate.expressionText.trim(), filename),\n };\n }\n\n const helperId = `${MARKUP_HELPER_PREFIX}${candidate.placeholder}`;\n const deps = collectFreeIdentifiers(candidate.expressionText, filename);\n const depsText = deps.length === 0 ? \"[]\" : `[${deps.join(\", \")}]`;\n const trimmedExpression = candidate.expressionText.trim();\n\n const replacementText = kind === \"await\"\n ? `${MARKUP_HELPER_PREFIX}Promise(\"${helperId}\", ${depsText}, function* () { return (${trimmedExpression}); })`\n : `${MARKUP_HELPER_PREFIX}Value(\"${helperId}\", ${depsText}, function* () { return (${trimmedExpression}); }, ${\n kind === \"each\" ? \"[]\" : \"undefined\"\n })`;\n\n return {\n start: candidate.start,\n end: candidate.end,\n text: replacementText,\n };\n}\n\nfunction visitFragment(\n fragment: AST.Fragment,\n candidatesByPlaceholder: ReadonlyMap<string, MarkupCandidate>,\n matchedPlaceholders: Set<string>,\n onReplacement: (\n candidate: MarkupCandidate,\n kind: \"plain\" | \"each\" | \"await\" | \"event\",\n ) => void,\n): void {\n for (const node of fragment.nodes) {\n visitNode(node, candidatesByPlaceholder, matchedPlaceholders, onReplacement);\n }\n}\n\nfunction visitNode(\n node: AST.Fragment[\"nodes\"][number],\n candidatesByPlaceholder: ReadonlyMap<string, MarkupCandidate>,\n matchedPlaceholders: Set<string>,\n onReplacement: (\n candidate: MarkupCandidate,\n kind: \"plain\" | \"each\" | \"await\" | \"event\",\n ) => void,\n): void {\n switch (node.type) {\n case \"ExpressionTag\":\n case \"HtmlTag\":\n case \"AttachTag\":\n emitReplacementForExpression(\n node.expression,\n \"plain\",\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n return;\n\n case \"ConstTag\":\n emitReplacementForExpression(\n node.declaration.declarations[0]?.init,\n \"plain\",\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n return;\n\n case \"IfBlock\":\n emitReplacementForExpression(\n node.test,\n \"plain\",\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n visitFragment(\n node.consequent,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n if (node.alternate) {\n visitFragment(\n node.alternate,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n }\n return;\n\n case \"EachBlock\":\n emitReplacementForExpression(\n node.expression,\n \"each\",\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n visitFragment(\n node.body,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n if (node.fallback) {\n visitFragment(\n node.fallback,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n }\n return;\n\n case \"AwaitBlock\":\n emitReplacementForExpression(\n node.expression,\n \"await\",\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n if (node.pending) {\n visitFragment(\n node.pending,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n }\n if (node.then) {\n visitFragment(\n node.then,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n }\n if (node.catch) {\n visitFragment(\n node.catch,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n }\n return;\n\n case \"KeyBlock\":\n emitReplacementForExpression(\n node.expression,\n \"plain\",\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n visitFragment(\n node.fragment,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n return;\n\n case \"RegularElement\":\n case \"Component\":\n case \"TitleElement\":\n case \"SlotElement\":\n case \"SvelteBody\":\n case \"SvelteBoundary\":\n case \"SvelteComponent\":\n case \"SvelteDocument\":\n case \"SvelteElement\":\n case \"SvelteFragment\":\n case \"SvelteHead\":\n case \"SvelteSelf\":\n case \"SvelteWindow\":\n for (const attribute of node.attributes) {\n visitAttribute(\n attribute,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n }\n visitFragment(\n node.fragment,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n return;\n\n default:\n return;\n }\n}\n\nfunction visitAttribute(\n attribute: AST.BaseElement[\"attributes\"][number],\n candidatesByPlaceholder: ReadonlyMap<string, MarkupCandidate>,\n matchedPlaceholders: Set<string>,\n onReplacement: (\n candidate: MarkupCandidate,\n kind: \"plain\" | \"each\" | \"await\" | \"event\",\n ) => void,\n): void {\n switch (attribute.type) {\n case \"Attribute\": {\n const kind = isEventAttribute(attribute.name) ? \"event\" : \"plain\";\n visitAttributeValue(\n attribute.value,\n kind,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n return;\n }\n\n case \"OnDirective\":\n emitReplacementForExpression(\n attribute.expression,\n \"event\",\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n return;\n\n case \"SpreadAttribute\":\n case \"AnimateDirective\":\n case \"BindDirective\":\n case \"ClassDirective\":\n case \"TransitionDirective\":\n case \"UseDirective\":\n emitReplacementForExpression(\n attribute.expression,\n \"plain\",\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n return;\n\n case \"StyleDirective\":\n visitAttributeValue(\n attribute.value,\n \"plain\",\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n return;\n\n case \"LetDirective\":\n emitReplacementForExpression(\n attribute.expression,\n \"plain\",\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n return;\n\n default:\n return;\n }\n}\n\nfunction visitAttributeValue(\n value:\n | true\n | AST.ExpressionTag\n | Array<AST.Text | AST.ExpressionTag>,\n kind: \"plain\" | \"each\" | \"await\" | \"event\",\n candidatesByPlaceholder: ReadonlyMap<string, MarkupCandidate>,\n matchedPlaceholders: Set<string>,\n onReplacement: (\n candidate: MarkupCandidate,\n kind: \"plain\" | \"each\" | \"await\" | \"event\",\n ) => void,\n): void {\n if (value === true) {\n return;\n }\n\n if (Array.isArray(value)) {\n for (const part of value) {\n if (part.type === \"ExpressionTag\") {\n emitReplacementForExpression(\n part.expression,\n kind,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n }\n }\n return;\n }\n\n emitReplacementForExpression(\n value.expression,\n kind,\n candidatesByPlaceholder,\n matchedPlaceholders,\n onReplacement,\n );\n}\n\nfunction emitReplacementForExpression(\n expression: { type: string; name?: string } | null | undefined,\n kind: \"plain\" | \"each\" | \"await\" | \"event\",\n candidatesByPlaceholder: ReadonlyMap<string, MarkupCandidate>,\n matchedPlaceholders: Set<string>,\n onReplacement: (\n candidate: MarkupCandidate,\n kind: \"plain\" | \"each\" | \"await\" | \"event\",\n ) => void,\n): void {\n if (!expression || expression.type !== \"Identifier\" || !expression.name) {\n return;\n }\n\n const candidate = candidatesByPlaceholder.get(expression.name);\n\n if (!candidate || matchedPlaceholders.has(candidate.placeholder)) {\n return;\n }\n\n matchedPlaceholders.add(candidate.placeholder);\n onReplacement(candidate, kind);\n}\n\nfunction findConstInitializerRange(\n declarationText: string,\n filename: string,\n): { start: number; end: number } | undefined {\n const sourceFile = ts.createSourceFile(\n filename,\n `const ${declarationText};`,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n const statement = sourceFile.statements[0];\n\n if (!statement || !ts.isVariableStatement(statement)) {\n return undefined;\n }\n\n const declaration = statement.declarationList.declarations[0];\n\n if (!declaration?.initializer) {\n return undefined;\n }\n\n return {\n start: declaration.initializer.getStart(sourceFile) - \"const \".length,\n end: declaration.initializer.end - \"const \".length,\n };\n}\n\nfunction transformEventExpression(\n expressionText: string,\n filename: string,\n): string {\n const wrapped = parseWrappedExpression(expressionText, filename);\n const expression = unwrapParentheses(wrapped.expression);\n\n if (ts.isArrowFunction(expression)) {\n const signatureText = sliceWrappedNode(\n expressionText,\n wrapped,\n expression.getStart(wrapped.sourceFile),\n expression.equalsGreaterThanToken.end,\n );\n\n if (ts.isBlock(expression.body)) {\n return `${signatureText} ${\n makeInlineEventBlock(\n sliceWrappedNode(\n expressionText,\n wrapped,\n expression.body.getStart(wrapped.sourceFile) + 1,\n expression.body.end - 1,\n ),\n )\n }`;\n }\n\n return `${signatureText} ${\n makeInlineEventExpressionBody(\n sliceWrappedNode(\n expressionText,\n wrapped,\n expression.body.getStart(wrapped.sourceFile),\n expression.body.end,\n ),\n )\n }`;\n }\n\n if (ts.isFunctionExpression(expression)) {\n const signatureText = sliceWrappedNode(\n expressionText,\n wrapped,\n expression.getStart(wrapped.sourceFile),\n expression.body.getStart(wrapped.sourceFile),\n );\n const bodyText = sliceWrappedNode(\n expressionText,\n wrapped,\n expression.body.getStart(wrapped.sourceFile) + 1,\n expression.body.end - 1,\n );\n\n return `${signatureText}${makeInlineEventBlock(bodyText)}`;\n }\n\n return `() => ${makeInlineEventExpressionBody(expressionText)}`;\n}\n\nfunction makeInlineEventBlock(bodyText: string): string {\n const normalizedBody = bodyText.trim();\n\n if (normalizedBody.length === 0) {\n return `{ void ${MARKUP_HELPER_PREFIX}Run(function* () {}); }`;\n }\n\n return [\n \"{\",\n ` void ${MARKUP_HELPER_PREFIX}Run(function* () {`,\n indentBlock(normalizedBody, \" \"),\n \" });\",\n \"}\",\n ].join(\"\\n\");\n}\n\nfunction makeInlineEventExpressionBody(expressionText: string): string {\n return [\n \"{\",\n ` void ${MARKUP_HELPER_PREFIX}Run(function* () {`,\n ` return (${expressionText.trim()});`,\n \" });\",\n \"}\",\n ].join(\"\\n\");\n}\n\nfunction parseWrappedExpression(\n expressionText: string,\n filename: string,\n): WrappedExpression {\n const prefix = \"function* __svelteEffectRuntimeMarkupWrapper(){ return (\";\n const sourceFile = ts.createSourceFile(\n filename,\n `${prefix}${expressionText}); }`,\n ts.ScriptTarget.Latest,\n true,\n ts.ScriptKind.TS,\n );\n const functionDeclaration = sourceFile.statements[0];\n\n if (\n !functionDeclaration || !ts.isFunctionDeclaration(functionDeclaration) ||\n !functionDeclaration.body\n ) {\n throw new Error(\n `${filename}: could not parse markup Effect expression:\\n${expressionText}`,\n );\n }\n\n const returnStatement = functionDeclaration.body.statements[0];\n\n if (\n !returnStatement || !ts.isReturnStatement(returnStatement) ||\n !returnStatement.expression\n ) {\n throw new Error(\n `${filename}: could not locate markup Effect expression:\\n${expressionText}`,\n );\n }\n\n return {\n expression: returnStatement.expression,\n offset: prefix.length,\n sourceFile,\n };\n}\n\nfunction unwrapParentheses(expression: ts.Expression): ts.Expression {\n let current = expression;\n\n while (ts.isParenthesizedExpression(current)) {\n current = current.expression;\n }\n\n return current;\n}\n\nfunction sliceWrappedNode(\n expressionText: string,\n wrapped: WrappedExpression,\n start: number,\n end: number,\n): string {\n return expressionText.slice(start - wrapped.offset, end - wrapped.offset);\n}\n\nfunction collectFreeIdentifiers(\n expressionText: string,\n filename: string,\n): string[] {\n const wrapped = parseWrappedExpression(expressionText, filename);\n const identifiers: string[] = [];\n const seen = new Set<string>();\n const scopes: Array<Set<string>> = [new Set()];\n\n function isDeclaredLocally(identifier: string): boolean {\n return scopes.some((scope) => scope.has(identifier));\n }\n\n function visit(node: ts.Node): void {\n if (\n ts.isFunctionExpression(node) || ts.isArrowFunction(node) ||\n ts.isFunctionDeclaration(node)\n ) {\n if (!node.body) {\n return;\n }\n\n const nextScope = new Set<string>();\n\n if (node.name) {\n nextScope.add(node.name.text);\n }\n\n for (const parameter of node.parameters) {\n declareInto(nextScope, parameter.name);\n }\n\n scopes.unshift(nextScope);\n\n if (ts.isBlock(node.body)) {\n for (const statement of node.body.statements) {\n statement.forEachChild(visit);\n }\n } else {\n node.body.forEachChild(visit);\n }\n\n scopes.shift();\n return;\n }\n\n if (ts.isIdentifier(node)) {\n if (node.text === \"yield\" || node.text === \"undefined\") {\n return;\n }\n\n if (shouldSkipIdentifier(node)) {\n return;\n }\n\n if (!isDeclaredLocally(node.text) && !seen.has(node.text)) {\n seen.add(node.text);\n identifiers.push(node.text);\n }\n }\n\n if (ts.isVariableDeclaration(node)) {\n if (node.initializer) {\n node.initializer.forEachChild(visit);\n }\n return;\n }\n\n node.forEachChild(visit);\n }\n\n function declareInto(scope: Set<string>, name: ts.BindingName): void {\n if (ts.isIdentifier(name)) {\n scope.add(name.text);\n return;\n }\n\n for (const element of name.elements) {\n if (ts.isOmittedExpression(element)) {\n continue;\n }\n\n declareInto(scope, element.name);\n }\n }\n\n visit(unwrapParentheses(wrapped.expression));\n return identifiers;\n}\n\nfunction shouldSkipIdentifier(node: ts.Identifier): boolean {\n const parent = node.parent;\n\n return ts.isPropertyAccessExpression(parent) && parent.name === node ||\n ts.isPropertyAssignment(parent) && parent.name === node ||\n ts.isShorthandPropertyAssignment(parent) &&\n parent.objectAssignmentInitializer === node ||\n ts.isBindingElement(parent) && parent.propertyName === node ||\n ts.isImportSpecifier(parent) ||\n ts.isExportSpecifier(parent) ||\n ts.isLabeledStatement(parent) && parent.label === node;\n}\n\nfunction containsYieldStarText(text: string): boolean {\n return /\\byield\\s*\\*/.test(text);\n}\n\nfunction findExcludedRanges(content: string): ExcludedRange[] {\n const ranges: ExcludedRange[] = [];\n const patterns = [\n /<script\\b[\\s\\S]*?<\\/script\\s*>/gi,\n /<style\\b[\\s\\S]*?<\\/style\\s*>/gi,\n /<!--[\\s\\S]*?-->/g,\n ];\n\n for (const pattern of patterns) {\n for (const match of content.matchAll(pattern)) {\n if (match.index === undefined) {\n continue;\n }\n\n ranges.push({\n start: match.index,\n end: match.index + match[0].length,\n });\n }\n }\n\n return ranges.sort((left, right) => left.start - right.start);\n}\n\nfunction findExcludedRangeAt(\n ranges: ExcludedRange[],\n index: number,\n): ExcludedRange | undefined {\n return ranges.find((range) => range.start <= index && index < range.end);\n}\n\nfunction findClosingBrace(content: string, start: number): number {\n let braceDepth = 0;\n let bracketDepth = 0;\n let parenDepth = 0;\n let quote: \"'\" | '\"' | \"`\" | undefined;\n let templateBraceDepth = 0;\n\n for (let index = start; index < content.length; index += 1) {\n const character = content[index];\n const nextCharacter = content[index + 1];\n\n if (quote === \"'\") {\n if (character === \"\\\\\" && nextCharacter) {\n index += 1;\n continue;\n }\n\n if (character === \"'\") {\n quote = undefined;\n }\n\n continue;\n }\n\n if (quote === '\"') {\n if (character === \"\\\\\" && nextCharacter) {\n index += 1;\n continue;\n }\n\n if (character === '\"') {\n quote = undefined;\n }\n\n continue;\n }\n\n if (quote === \"`\") {\n if (character === \"\\\\\" && nextCharacter) {\n index += 1;\n continue;\n }\n\n if (character === \"$\" && nextCharacter === \"{\") {\n templateBraceDepth += 1;\n braceDepth += 1;\n index += 1;\n continue;\n }\n\n if (character === \"}\" && templateBraceDepth > 0) {\n templateBraceDepth -= 1;\n braceDepth -= 1;\n continue;\n }\n\n if (character === \"`\" && templateBraceDepth === 0) {\n quote = undefined;\n }\n\n continue;\n }\n\n if (character === \"'\" || character === '\"' || character === \"`\") {\n quote = character;\n continue;\n }\n\n if (character === \"/\" && nextCharacter === \"/\") {\n index += 2;\n\n while (index < content.length && content[index] !== \"\\n\") {\n index += 1;\n }\n\n continue;\n }\n\n if (character === \"/\" && nextCharacter === \"*\") {\n index += 2;\n\n while (\n index < content.length &&\n !(content[index] === \"*\" && content[index + 1] === \"/\")\n ) {\n index += 1;\n }\n\n index += 1;\n continue;\n }\n\n if (character === \"(\") {\n parenDepth += 1;\n continue;\n }\n\n if (character === \")\") {\n parenDepth -= 1;\n continue;\n }\n\n if (character === \"[\") {\n bracketDepth += 1;\n continue;\n }\n\n if (character === \"]\") {\n bracketDepth -= 1;\n continue;\n }\n\n if (character === \"{\") {\n braceDepth += 1;\n continue;\n }\n\n if (character === \"}\") {\n if (braceDepth === 0 && parenDepth === 0 && bracketDepth === 0) {\n return index;\n }\n\n braceDepth -= 1;\n }\n }\n\n return -1;\n}\n\nfunction findTopLevelKeyword(text: string, keyword: string): number {\n let braceDepth = 0;\n let bracketDepth = 0;\n let parenDepth = 0;\n let quote: \"'\" | '\"' | \"`\" | undefined;\n\n for (let index = 0; index <= text.length - keyword.length; index += 1) {\n const character = text[index];\n const nextCharacter = text[index + 1];\n\n if (quote) {\n if (character === \"\\\\\" && nextCharacter) {\n index += 1;\n continue;\n }\n\n if (character === quote) {\n quote = undefined;\n }\n\n continue;\n }\n\n if (character === \"'\" || character === '\"' || character === \"`\") {\n quote = character;\n continue;\n }\n\n if (character === \"(\") {\n parenDepth += 1;\n continue;\n }\n\n if (character === \")\") {\n parenDepth -= 1;\n continue;\n }\n\n if (character === \"[\") {\n bracketDepth += 1;\n continue;\n }\n\n if (character === \"]\") {\n bracketDepth -= 1;\n continue;\n }\n\n if (character === \"{\") {\n braceDepth += 1;\n continue;\n }\n\n if (character === \"}\") {\n braceDepth -= 1;\n continue;\n }\n\n if (\n braceDepth === 0 && bracketDepth === 0 && parenDepth === 0 &&\n text.startsWith(keyword, index)\n ) {\n return index;\n }\n }\n\n return -1;\n}\n\nfunction findAwaitBoundary(text: string): number {\n const thenIndex = findTopLevelKeyword(text, \" then \");\n const catchIndex = findTopLevelKeyword(text, \" catch \");\n\n if (thenIndex === -1) {\n return catchIndex;\n }\n\n if (catchIndex === -1) {\n return thenIndex;\n }\n\n return Math.min(thenIndex, catchIndex);\n}\n\n\nfunction isEventAttribute(name: string): boolean {\n return name.startsWith(\"on:\") ||\n /^on[a-z]/.test(name);\n}\n\nfunction injectMarkupHelpers(\n magicString: MagicString,\n content: string,\n options: TransformEffectMarkupOptions,\n): void {\n const helperBlock = makeMarkupHelperBlock(options);\n const scriptTagMatch = findInstanceScriptTag(content);\n\n if (!scriptTagMatch) {\n magicString.prepend(`<script>\\n${helperBlock}\\n</script>\\n\\n`);\n return;\n }\n\n magicString.appendLeft(scriptTagMatch.end, `\\n${helperBlock}\\n`);\n}\n\nfunction findInstanceScriptTag(content: string): ExcludedRange | 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) {\n continue;\n }\n\n const attributes = match[1] ?? \"\";\n\n if (\n /\\bcontext\\s*=\\s*[\"']module[\"']/.test(attributes) ||\n /\\bmodule\\b/.test(attributes)\n ) {\n continue;\n }\n\n const openTag = match[0].indexOf(\">\") + 1;\n\n return {\n start: match.index + openTag,\n end: match.index + match[0].length - \"</script>\".length,\n };\n }\n\n return undefined;\n}\n\nfunction makeMarkupHelperBlock(\n options: TransformEffectMarkupOptions,\n): string {\n const runtimeModuleId = options.runtimeModuleId ?? DEFAULT_RUNTIME_MODULE_ID;\n const effectModuleId = options.effectModuleId ?? DEFAULT_EFFECT_MODULE_ID;\n const svelteModuleId = options.svelteModuleId ?? DEFAULT_SVELTE_MODULE_ID;\n\n return [\n `import { Effect as ${MARKUP_HELPER_PREFIX}Effect } from \"${effectModuleId}\";`,\n `import { onDestroy as ${MARKUP_HELPER_PREFIX}OnDestroy } from \"${svelteModuleId}\";`,\n `import { getEffectRuntimeOrThrow as ${MARKUP_HELPER_PREFIX}GetRuntime, registerHotDispose as ${MARKUP_HELPER_PREFIX}RegisterHotDispose, runComponentEffect as ${MARKUP_HELPER_PREFIX}RunComponentEffect, runInlineEffect as ${MARKUP_HELPER_PREFIX}RunInlineEffect } from \"${runtimeModuleId}\";`,\n \"\",\n `const ${MARKUP_HELPER_PREFIX}Values = Object.create(null);`,\n `const ${MARKUP_HELPER_PREFIX}Promises = Object.create(null);`,\n `const ${MARKUP_HELPER_PREFIX}Cleanups = new Map();`,\n `const ${MARKUP_HELPER_PREFIX}ObjectIds = new WeakMap();`,\n `const ${MARKUP_HELPER_PREFIX}PendingStarts = new Set();`,\n `const ${MARKUP_HELPER_PREFIX}Runtime = typeof window === \"undefined\" ? undefined : ${MARKUP_HELPER_PREFIX}GetRuntime();`,\n `let ${MARKUP_HELPER_PREFIX}Version = $state(0);`,\n `let ${MARKUP_HELPER_PREFIX}NextObjectId = 1;`,\n \"\",\n `function ${MARKUP_HELPER_PREFIX}Hash(value) {`,\n ` if (value === null) {`,\n ` return \"null\";`,\n \" }\",\n \"\",\n ` if (value === undefined) {`,\n ` return \"undefined\";`,\n \" }\",\n \"\",\n ` const type = typeof value;`,\n \"\",\n ` if (type === \"string\") {`,\n ` return \\`string:\\${value}\\`;`,\n \" }\",\n \"\",\n ` if (type === \"number\") {`,\n ` return \\`number:\\${Object.is(value, -0) ? \"-0\" : String(value)}\\`;`,\n \" }\",\n \"\",\n ` if (type === \"bigint\") {`,\n ` return \\`bigint:\\${value.toString()}\\`;`,\n \" }\",\n \"\",\n ` if (type === \"boolean\") {`,\n ` return value ? \"boolean:true\" : \"boolean:false\";`,\n \" }\",\n \"\",\n ` if (type === \"symbol\") {`,\n ` return \\`symbol:\\${String(value)}\\`;`,\n \" }\",\n \"\",\n ` let objectId = ${MARKUP_HELPER_PREFIX}ObjectIds.get(value);`,\n \"\",\n ` if (objectId === undefined) {`,\n ` objectId = ${MARKUP_HELPER_PREFIX}NextObjectId;`,\n ` ${MARKUP_HELPER_PREFIX}NextObjectId += 1;`,\n ` ${MARKUP_HELPER_PREFIX}ObjectIds.set(value, objectId);`,\n \" }\",\n \"\",\n ` return \\`object:\\${objectId}\\`;`,\n \"}\",\n \"\",\n `function ${MARKUP_HELPER_PREFIX}DepsKey(deps) {`,\n ` return deps.map(${MARKUP_HELPER_PREFIX}Hash).join(\"|\");`,\n \"}\",\n \"\",\n `function ${MARKUP_HELPER_PREFIX}Value(id, deps, factory, fallback) {`,\n ` if (typeof window === \"undefined\") {`,\n ` return fallback;`,\n \" }\",\n \"\",\n ` ${MARKUP_HELPER_PREFIX}Version;`,\n \"\",\n ` const cacheKey = \\`\\${id}::\\${${MARKUP_HELPER_PREFIX}DepsKey(deps)}\\`;`,\n \"\",\n ` if (!${MARKUP_HELPER_PREFIX}Cleanups.has(cacheKey)) {`,\n ` if (!${MARKUP_HELPER_PREFIX}PendingStarts.has(cacheKey)) {`,\n ` ${MARKUP_HELPER_PREFIX}PendingStarts.add(cacheKey);`,\n ` queueMicrotask(() => {`,\n ` ${MARKUP_HELPER_PREFIX}PendingStarts.delete(cacheKey);`,\n \"\",\n ` if (${MARKUP_HELPER_PREFIX}Cleanups.has(cacheKey)) {`,\n \" return;\",\n \" }\",\n \"\",\n ` ${MARKUP_HELPER_PREFIX}Cleanups.set(`,\n \" cacheKey,\",\n ` ${MARKUP_HELPER_PREFIX}RunComponentEffect(`,\n ` ${MARKUP_HELPER_PREFIX}Runtime,`,\n ` ${MARKUP_HELPER_PREFIX}Effect.gen(function* () {`,\n ` ${MARKUP_HELPER_PREFIX}Values[cacheKey] = yield* ${MARKUP_HELPER_PREFIX}Effect.gen(factory);`,\n ` ${MARKUP_HELPER_PREFIX}Version += 1;`,\n \" }),\",\n \" ),\",\n \" );\",\n \" });\",\n \" }\",\n \" }\",\n \"\",\n ` return Object.prototype.hasOwnProperty.call(${MARKUP_HELPER_PREFIX}Values, cacheKey)`,\n ` ? ${MARKUP_HELPER_PREFIX}Values[cacheKey]`,\n \" : fallback;\",\n \"}\",\n \"\",\n `function ${MARKUP_HELPER_PREFIX}Promise(id, deps, factory) {`,\n ` if (typeof window === \"undefined\") {`,\n ` return Promise.resolve(undefined);`,\n \" }\",\n \"\",\n ` const cacheKey = \\`\\${id}::\\${${MARKUP_HELPER_PREFIX}DepsKey(deps)}\\`;`,\n \"\",\n ` if (!Object.prototype.hasOwnProperty.call(${MARKUP_HELPER_PREFIX}Promises, cacheKey)) {`,\n ` ${MARKUP_HELPER_PREFIX}Promises[cacheKey] = new Promise((resolve, reject) => {`,\n ` queueMicrotask(() => {`,\n ` ${MARKUP_HELPER_PREFIX}RunInlineEffect(`,\n ` ${MARKUP_HELPER_PREFIX}Runtime,`,\n ` ${MARKUP_HELPER_PREFIX}Effect.gen(factory),`,\n ` ).then(resolve, reject);`,\n \" });\",\n ` }).catch((error) => {`,\n ` delete ${MARKUP_HELPER_PREFIX}Promises[cacheKey];`,\n \" throw error;\",\n \" });\",\n \" }\",\n \"\",\n ` return ${MARKUP_HELPER_PREFIX}Promises[cacheKey];`,\n \"}\",\n \"\",\n `function ${MARKUP_HELPER_PREFIX}Run(factory) {`,\n ` if (typeof window === \"undefined\") {`,\n \" return Promise.resolve(undefined);\",\n \" }\",\n \"\",\n ` return ${MARKUP_HELPER_PREFIX}RunInlineEffect(`,\n ` ${MARKUP_HELPER_PREFIX}Runtime,`,\n ` ${MARKUP_HELPER_PREFIX}Effect.gen(factory),`,\n \" );\",\n \"}\",\n \"\",\n `function ${MARKUP_HELPER_PREFIX}CleanupAll() {`,\n ` for (const cleanup of ${MARKUP_HELPER_PREFIX}Cleanups.values()) {`,\n \" cleanup();\",\n \" }\",\n \"\",\n ` ${MARKUP_HELPER_PREFIX}Cleanups.clear();`,\n \"}\",\n \"\",\n `${MARKUP_HELPER_PREFIX}OnDestroy(${MARKUP_HELPER_PREFIX}CleanupAll);`,\n `${MARKUP_HELPER_PREFIX}RegisterHotDispose(import.meta, ${MARKUP_HELPER_PREFIX}CleanupAll);`,\n ].join(\"\\n\");\n}\n\nfunction indentBlock(text: string, indent: string): string {\n return text.split(\"\\n\").map((line) =>\n line.length > 0 ? `${indent}${line}` : line\n ).join(\"\\n\");\n}\n"],"mappings":"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D;AAEH;EAEF,KAAK;AACH,gCACE,KAAK,YACL,QACA,yBACA,qBACA,cACD;AACD,iBACE,KAAK,MACL,yBACA,qBACA,cACD;AACD,OAAI,KAAK,SACP,eACE,KAAK,UACL,yBACA,qBACA,cACD;AAEH;EAEF,KAAK;AACH,gCACE,KAAK,YACL,SACA,yBACA,qBACA,cACD;AACD,OAAI,KAAK,QACP,eACE,KAAK,SACL,yBACA,qBACA,cACD;AAEH,OAAI,KAAK,KACP,eACE,KAAK,MACL,yBACA,qBACA,cACD;AAEH,OAAI,KAAK,MACP,eACE,KAAK,OACL,yBACA,qBACA,cACD;AAEH;EAEF,KAAK;AACH,gCACE,KAAK,YACL,SACA,yBACA,qBACA,cACD;AACD,iBACE,KAAK,UACL,yBACA,qBACA,cACD;AACD;EAEF,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;AACH,QAAK,MAAM,aAAa,KAAK,WAC3B,gBACE,WACA,yBACA,qBACA,cACD;AAEH,iBACE,KAAK,UACL,yBACA,qBACA,cACD;AACD;EAEF,QACE;;;AAIN,SAAS,eACP,WACA,yBACA,qBACA,eAIM;AACN,SAAQ,UAAU,MAAlB;EACE,KAAK,aAAa;GAChB,MAAM,OAAO,iBAAiB,UAAU,KAAK,GAAG,UAAU;AAC1D,uBACE,UAAU,OACV,MACA,yBACA,qBACA,cACD;AACD;;EAGF,KAAK;AACH,gCACE,UAAU,YACV,SACA,yBACA,qBACA,cACD;AACD;EAEF,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;AACH,gCACE,UAAU,YACV,SACA,yBACA,qBACA,cACD;AACD;EAEF,KAAK;AACH,uBACE,UAAU,OACV,SACA,yBACA,qBACA,cACD;AACD;EAEF,KAAK;AACH,gCACE,UAAU,YACV,SACA,yBACA,qBACA,cACD;AACD;EAEF,QACE;;;AAIN,SAAS,oBACP,OAIA,MACA,yBACA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"}